新型 ZFS 启动环境工具

注意

注:15.0-RELEASE 中仅存在命令 bectl

大约一个月前,我有幸在 PBUG 上做了关于 ZFS 启动环境 的演讲。在演讲的最后,我提到了在 FreeBSD 上管理 ZFS 启动环境 的工具发展历史。

zfs-boot-environments-history.png

Pawel Jakub Dawidek——他也参加了 PBUG #3 会议——建议我应该尝试将 beadm 纳入 FreeBSD 基本系统。我也从很多 beadm 用户那里听到过这个想法,他们反复询问为什么 FreeBSD 基本系统没有内置 beadm。因此,在 PBUG #3 结束后,我正是做了这件事。我创建了新的 PR——Bug 230323 – Idea/Feature Request – include beadm in the base——令我(惊喜地)发现,他们将新工具 bectl 内置到了 FreeBSD 基本系统!现在,我们的 ZFS 启动环境 工具家族中新增了一员——工具 bectl

当然,我仍会维护和更新工具 beadm,它仍可通过 FreeBSD Ports 中的 sysutils/beadm 获取。因为该工具是用 POSIX /bin/sh 编写的,所以调试快速且易于修改。简单来说(TLDR):bectl 是用 C 语言实现的 beadm,它已引入到了 FreeBSD 基本系统,这意味着它将成为 FreeBSD 12.0-RELEASE 的一部分。目前 bectl 已经可以在 12.0-ALPHA2 镜像中使用。

对比

新的 bectl 工具还处于非常早期的阶段,目前(尚未)能完全替代工具 beadm。下面是 bectlbeadm 工具使用信息的简单对比。

……以及新的 bectl 工具。

例如,bectl 目前无法重命名正在使用/已挂载的启动环境,而 beadm 可以。

可以通过命令 zfs rename -u ... 重命名挂载到 / 的 ZFS 数据集(这正是 beadm 在底层所做的操作),作为 bectl 工具的替代方案。

随后它会像平常一样以新名字显示在 bectl 下,如下所示:

bectl 相较于 beadm 的一个很棒的新功能是可以在指定的启动环境中动态创建 FreeBSD Jail。

下面展示 bectl 创建 FreeBSD Jail 的实际操作。

如果你从 beadm 迁移到 bectl,你也需要更加小心,因为 bectl 不会让你进行确认 :🙂:

例如,beadm 工具会在销毁指定的启动环境前询问你是否确认。而 bectl 工具则会直接删除,不会在屏幕上出现任何提示。

bectl 缺少的功能之一是 Ansible 插件支持。beadm 支持 Ansible 插件,因此如果你希望使用该配置管理工具,那么使用 bectl 时就需要退回到 原生 Ansible 模块 :🙂:

好消息是 beadmbectl 可以在同一台主机上共存,所以你不必二选一。你仍然可以用 beadm 工具处理日常任务(或用于 Ansible 模块),而用 bectl 来处理 jail/unjail 等选项。

我认为随着时间推移,bectl 会增加所需功能,而将这样的工具纳入 FreeBSD 基本系统无疑是个受欢迎的补充。

更新 1

New ZFS Boot Environments Tool 文章被收录在 BSD Now 262 – OpenBSD Surfacing 集中。

感谢分享!

更新 2

最后,我有时间在更新的 FreeBSD-12.0-ALPHA6 版本中再次测试新的 bectl 命令,看是否有改进。

现在在无参数调用时,bectl 不会显示缺少命令的提示。

可以使用 bectl 命令重命名当前正在使用的启动环境。

我注意到的最后一点是,bectl jail 命令在退出后不会保持 Jail 处于启用/运行状态,虽然只是外观上的变化,但很重要。

最后,最简单的迁移路径是创建一个简单别名:

… 或针对 (T)CSH shell:

最后更新于

这有帮助吗?