ZFS 启动环境中的其他 FreeBSD 版本
发布时间:2021/10/19
作者:𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗
FreeBSD 12.3-PRERELEASE 的首批快照终于 可用 了。这意味着我们能在一个新的 ZFS 启动环境中尝试它们,而无需打扰当前运行的 13.0-RELEASE 系统。我们无法像平常那样从当前 ZFS 启动环境创建新的启动环境并将其升级到新版本,因为 12.3 的主版本比 13.0 还要旧(译注:旧版 FreeBSD 不识别新版的 ZFS)。
在 FreeBSD 发布流程中,这有点悖论:当 12.3-RELEASE 发布时,它可能包含一些比今年早些时候发布的 13.0-RELEASE 更新的提交和功能。当然,并非所有提交到 HEAD 的内容都会自动进入 12-STABLE 或 13-STABLE,但大多数都会。只有最大的变更会被限制在 14.0-RELEASE,当然,这大概会在 2022 年中期其发布流程进行时出现。
关于 FreeBSD 上的 ZFS 文件系统,有一点需要注意。人们常常将“真正的” ZFS 启动环境与它的替代品混淆,比如 Btrfs 快照或 Ubuntu 使用 zsysctl(8) 命令管理的快照。不幸的是,它们只是快照,并非完整的可写克隆(或完整独立的 ZFS 数据集)。它们可以冻结系统状态,从而在更新软件包后能够恢复到工作配置,但你无法像创建另一个独立的 ZFS 启动环境那样,安装其他独立版本的系统作为新的 ZFS 数据集。
创建新的 ZFS 数据集
host # beadm list
BE Active Mountpoint Space Created
13.0.w520 NR / 12.8G 2021-09-14 17:27
13.0.w520.safe - - 1.2G 2021-10-18 10:01
host # zfs list -r zroot/ROOT
NAME USED AVAIL REFER MOUNTPOINT
zroot/ROOT 12.8G 96.8G 88K none
zroot/ROOT/13.0.w520 12.8G 96.8G 11.6G /
zroot/ROOT/13.0.w520.safe 8K 96.8G 11.1G /
host # zfs create -o mountpoint=/ -o canmount=off zroot/ROOT/12.3
host # beadm list
BE Active Mountpoint Space Created
13.0.w520 NR / 12.8G 2021-09-14 17:27
13.0.w520.safe - - 1.2G 2021-10-18 10:01
12.3 - - 96.0K 2021-10-18 13:14安装 FreeBSD 12.3-PRERELEASE
安装与主机相同的 Packages
使用 pkg prime-list,我们可以获取当前运行系统上手动安装的所有 pkg(8) 软件包。你也可以省略此步骤,或者只安装你需要的软件包,而不是全部安装。
如我们所见,在 FreeBSD 13.0-RELEASE 系统中安装的一些软件包,目前在 FreeBSD 12.3-PRERELEASE 系统的 pkg(8) “latest” 分支中不可用。这种情况有时会发生,例如某些软件包构建失败——但你可以假设这些软件包在一周左右会重新可用,因为 pkg(8) 软件包会在 “latest” 分支中进行重建。
接下来我们将移除缺失的软件包,并重命名一些在 FreeBSD 12.x 版本中名称可能不同的软件包。
一个小时左右后,我们的软件包已经安装完成。
复制配置文件
现在你可以重启到一个干净且未配置的 FreeBSD 系统,但你也可以从当前正在使用的安装中复制配置文件。以下是我复制的文件。
首先是来自基本系统 /etc 和 /boot 目录的文件。
接下来是已安装包在 /usr/local/etc 目录下的配置文件。
添加用户并设置密码
现在你应该添加常规用户,并为该用户和 root 账户设置密码。
重启进入新的 ZFS 启动环境
现在你可以退出该 ZFS 启动环境的 chroot(8),然后重启。在 FreeBSD loader(8) 菜单中选择 12.3 启动环境。
测试新系统
12.3-PRERELEASE 系统对我来说启动正常。我能够登录并像平常一样使用系统。需要注意的一点是 ZFS 池。我有另一个启用了 zstd 压缩的新 ZFS 池,但我无法导入该 ZFS 池,因为 FreeBSD 12.3-PRERELEASE 使用的不是 OpenZFS 2.0,而是 FreeBSD 内部的旧版本 ZFS。
请记住这一点……但你也可以从 FreeBSD Ports 安装更新的 OpenZFS,这正是我们接下来要做的。
接下来我们需要修改 /boot/loader.conf 文件。
重启并再次尝试后,我成功导入了那个更新的 ZFS 池。
希望你会觉得这篇指南有用。
欢迎随时提出你的建议。
更新 1 – 安装更新版本时的注意事项
本指南撰写时,我尝试在之前使用 FreeBSD 13.0 的系统上安装 FreeBSD 12.3,因此无需更新 bootcode。我刚在同一台 13.0 系统上尝试安装 13.1,这时需要执行以下两个步骤来更新 bootcode。
UEFI
对于 UEFI 分区,你需要从 13.1 安装中复制 /boot/loader.efi 文件,即 /var/tmp/13.1 目录。使用的命令如下。
BIOS
对于以传统 BIOS 模式启动的系统,你需要使用以下 gpart(8) 命令。
由于 FreeBSD 通常安装为 BIOS+UEFI 启动模式兼容,因此这两个步骤都需要执行。
最后更新于
这有帮助吗?