ZFS 启动环境中的其他 FreeBSD 版本

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 启动模式兼容,因此这两个步骤都需要执行。

最后更新于

这有帮助吗?