ZFS 启动环境
概述
ZFS 启动环境 ZFS Boot Environments 是基于 ZFS 快照 与 克隆 技术构建的系统版本管理机制。
从技术定义看,“ZFS 启动环境是由某个时间点创建的 ZFS 快照克隆出的可写 ZFS 克隆文件系统” 参见:ZFS Boot Environments Explained[EB/OL]. [2026-03-26]. https://vermaden.wordpress.com/2025/11/25/zfs-boot-environments-explained/),可实现原子更新、多系统并存与快速回滚
启动环境与 Android 系统的 A/B 分区具有相似的设计理念,其核心功能包括 原子更新 、 双系统并存 以及 快照 与 回滚
如果仅从 FreeBSD 系统备份与还原的角度理解启动环境,可以将正在使用的系统视为“正常世界” 借鉴一种物理学观点:世界每时每刻都在按不同的事件选择分支,那些我们未做选择的事件所产生的分支世界即为可能世界 因此,正常世界始终是最新、最完整的;而可能世界只能用于测试,其本身是有缺陷的 尽管启动管理在理论上允许这种操作,即使将其还原到正常世界,也只是回到正常世界的时间线,而不是用可能世界替代正常世界 可能世界也可视作“正常世界”,只是我们拣选了 FreeBSD 的某个特定版本或部署作为标准
使用 ZFS 快照等技术可以在一个 ZFS 文件系统中实现多套完全独立的操作系统,例如 FreeBSD 14.3-RELEASE、FreeBSD 15.0-RELEASE、Gentoo Linux 等,它们彼此互不干扰
启动环境还可以实现所谓的“不可变系统”,并且在实现不可变性方面比传统方法更彻底。利用此功能可以直接完整地替换操作系统
查看环境
首先查看可升级的 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 存储池功能标志。所有存储池都采用功能标志格式化,每个存储池均启用了所有受支持且请求的功能。” 说明 ZFS 存储池无需更新。上述命令仅具有预览作用
本身无法实现更新。如需更新,命令如下:
$ zpool upgrade ZFS池名
启动环境基本用法
默认安装中 zroot/ROOT/default 是默认的启动环境
创建一个 ZFS 快照示例:
$ zfs snap zroot/ROOT/default@new # 为 zroot/ROOT/default 文件系统创建快照 new
使用刚创建的快照生成一个克隆文件系统:
$ zfs clone zroot/ROOT/default@new zroot/ROOT/new # 基于 zroot/ROOT/default@new 快照创建一个新的可写 ZFS 克隆文件系统 zroot/ROOT/new
生成的克隆文件系统可以作为启动环境
可以使用工具 bectl 列出所有 ZFS 启动环境(Boot Environments):
$ bectl list BE Active Mountpoint Space Created 0915 - - 4.00M 2023-09-19 19:44 13.2-RELEASE-p2_2023-09-13_141111 - - 29.0M 2023-09-13 14:11 new - - 432K 2023-09-20 15:17 default NR / 40.8G 2023-04-10 10:06
在 Active 列中
- N: Now 表示当前正在使用的启动环境
- R: Reboot 表示下次启动时默认使用的启动环境
- T: Temporary 表示仅在下一次启动时临时使用一次的环境(通过 bectl activate -t 设置)
三者可组合出现(如 NR、NT、RT、NRT)
bectl 工具可以改变下次使用的启动环境
- 使用 -t 标志将临时激活一个启动环境(仅一次)
- 使用 -T 标志则清除临时启动配置
在启动 FreeBSD 时,启动菜单里选 8,也可以改变启动环境
激活 ZFS 启动环境 new,下一次启动将使用该环境:
$ bectl activate new Successfully activated boot environment new
再次用 bectl list 查看所有 ZFS 启动环境,观察 Active 列的变化:
$ bectl list BE Active Mountpoint Space Created 0915 - - 4.00M 2023-09-19 19:44 13.2-RELEASE-p2_2023-09-13_141111 - - 29.0M 2023-09-13 14:11 new R / 2.84M 2023-09-20 15:17 default N - 40.8G 2023-04-10 10:06
在启动菜单中选择 new 启动环境,或使用 bectl activate new 切换到 new 启动环境
使用 df 查看挂载的根目录文件系统,确认已经切换为 zroot/ROOT/new。列出当前文件系统的磁盘使用情况:
$ df Filesystem 1K-blocks Used Avail Capacity Mounted on zroot/ROOT/new 110611616 42612156 67999460 39% / devfs 1 1 0 100% /dev /dev/gpt/efiboot0 266176 1872 264304 1% /boot/efi fdescfs 1 1 0 100% /dev/fd
如果需要切换回 zroot/ROOT/default 启动环境,可在启动菜单中选择 default,或使用 bectl activate default 切换到 default 启动环境
| Next: 性能调优 | Previous:委托管理 | Home: ZFS文件系统 |