25.4 ZFS 启动环境

概述

什么是启动环境(ZFS Boot Environments )?“ZFS 启动环境是由某个时间点创建的 ZFS 快照克隆出来的可写 ZFS clone。”参见 ZFS Boot Environments Explained

其实很好理解,启动环境和 Android 系统的 A/B 分区有异曲同工之妙。启动环境本质上是原子更新,双系统,快照与回滚的功能集合。

如果单纯地从 FreeBSD 系统备份还原角度的理解。我们将正在使用的系统设置理解为正常世界。有一种物理学观点认为世界每时每刻都在以不同的事件选择进行分支,将那些我们没有做出选择的事件而产生的分支世界其视为可能世界。那么正常世界始终是最新,最完整的;而可能世界只能是用来测试的,有缺陷的(实际上只是我们只这么使用而已)。哪怕将其还原到正常世界,也只是回到了正常世界的时间线上,而不是使用可能世界代替了正常世界(但是实际上启动管理是有这种可能性的)。可能世界完全可以是人们以为的正常世界,只是我们拣选了 FreeBSD 某个特定版本或部署将其视为正常世界。

思考题

你相信我们所在的世界相比其他世界具有唯一性而不是其他正常世界的 副本 吗?如果是,你可以简单证明一下吗:我们的这个世界是所有可能世界中 最完美 的那个。如果不是,那么必然存在一个正常世界,你认为它可能 正常 在哪里?

使用 ZFS 快照等技术能在一个文件系统(ZFS)中实现多款完全独立的操作系统,比如 FreeBSD 14.3-RELEASE、FreeBSD 15.0-RELEASE、Gentoo Linux 等,并且他们互相独立。

甚至启动环境也可以实现所谓的“不可变系统”,并且比其更符合不可变这个概念,也更彻底。通过该功能也可以简单地直接将操作系统完全替换掉。

思考题

我们可以看到,某些看似时髦的概念往往是旧瓶装 旧酒,而 FreeBSD 缺乏的恰恰正是这种包装。你怎么看?

可以看到启动环境的作用不仅仅局限于系统更新前的备份快照。

查看环境

检查是否需要更新 zpool(ZFS 存储池):

# zpool upgrade
This system supports ZFS pool feature flags.

All pools are formatted using feature flags.

Every feature flags pool has all supported and requested features enabled.

“这套系统支持 ZFS pool feature flags。所有的存储池都使用 feature flags 格式化。每个 feature flags 存储池都启用了所有受支持和被请求的功能。”

说明 ZFS 存储池无需更新。

启动环境基本用法

在默认安装中 zroot/ROOT/default 是默认的启动环境。

创建一个 zfs 快照:

用刚建的快照复制一个镜像:

复制的镜像可以作为一个启动环境,可以用工具 bectl 查看可用的启动环境

其中 Active 这一列中 N 表示当前使用环境,R 表示下次启动时使用的环境。bectl 工具可以改变下次使用的启动环境(在启动 FreeBSD 时,启动菜单里选 8,也可以改变启动环境)

再次用 bectl list 查看,观察 Active 列的变化

重启 FreeBSD(启动菜单里选择 new 启动环境,或如上用 bectl activate new 切换到 new 启动环境),用 df 观察,挂载的根目录的文件系统已经是 zroot/ROOT/new

要切换回 zroot/ROOT/default 启动环境,请在启动菜单里选择 default 启动环境,或如上用 bectl activate default 切换到 default 启动环境。

参考文献

最后更新于

这有帮助吗?