25.5 更新 ZFS 的 zpool

更新 zpool

FreeBSD 的大版本之间,ZFS 的版本通常会发生变化,例如从 14.3 升级到 15.0 时,zpool 的版本也会随之升级。

警告

请准备好备份和应急 CD 以应对意外情况,因为旧版本系统内置的 ZFS 无法兼容新版 ZFS 文件系统的功能集。

验证版本

  • 查看当前系统版本

# freebsd-version -kru
15.0-RELEASE
15.0-RELEASE
15.0-RELEASE
  • 查看 ZFS/zpool 相关版本

# zpool version
2.4.0-rc4-FreeBSD_g099f69ff5
zfs-kmod-2.4.0-rc4-FreeBSD_g099f69ff5

警告

这意味着任何 ZFS 版本低于 2.4.0-rc4 的操作系统在升级后可能无法启动。

进行更新

由于在升级前无法充分利用 ZFS 的新功能,下面将进行升级操作:

根据系统提示信息:

状态:存储池上有一些支持的且已请求的功能尚未启用。存储池仍然可以使用,但部分功能不可用。

操作:使用 zpool upgrade 启用所有功能。在完成后,未支持这些功能的软件可能无法再访问该存储池。详细信息请参见 zpool-features(7)

确实需要进行更新,但更新后旧系统可能无法再启动。

我们预览一下有哪些功能会被更新:

可以看到,除了带有 * 的功能需要手动启用外,其余功能在升级后将默认启用。

警告

zpool upgrade 并不能实际启用这些特性,仅用于预览可启用的功能。要执行更新,必须同时指定存储池名称,例如 zpool upgrade zroot。参见 'zpool status' gives confusing suggestion with 'zpool upgrade'

思考题

有贡献者认为上面 issue 关联的修补 PR 是琐碎的,无关紧要的细枝末节,甚至以每行不得超出 80 字符的客观理由予以拒绝,可问题在于无数人都被这种“小事”浪费了不止一个小时的时间。你怎样理解对于文字力量的忽视,其代价究竟是什么?

现在让我们来真正升级看看:

  • 显示所有 ZFS 池的当前状态及健康信息:

一如既往。

附录:启用那些需要手动启用的特性

如果你还希望手动启用一些功能:

这说明可以手动启用 dynamic_gang_header,接下来查询 ZFS 池中该特性的状态:

该特性确实未启用,下面在 zroot 池上启用 dynamic_gang_header 特性:

再看看 zroot 池中 dynamic_gang_header 特性的当前状态:

检查当前可升级的 ZFS 池及其支持的特性:

重写引导(仅 BIOS 传统引导需要)

警告

bootfs 属性是在 ZFS 上引导 FreeBSD 的关键标志,忽略此提示可能不会立即出问题,但一旦出现问题将导致系统无法启动,因此建议按照提示重写 boot code。(为什么这么建议?因为我炸了)。如果系统中不存在 freebsd-boot 分区,则无需执行以下操作。

列出系统中所有磁盘及其分区表信息:

找到类型为 freebsd-boot 的分区,这里分区序号为 1,对应以下命令中的 -i 选项,然后进行 bootcode 重写:

可以再次列出所有 ZFS 池的状态及详细信息:

最后更新于