3.5 手动安装双系统(后安装 FreeBSD)
本文以 FreeBSD-14.2-RELEASE-amd64-disc1.iso 为例,演示在 UEFI 环境下,安装 FreeBSD 14.2 RELEASE 与 Windows 11 24H2 双系统。
技巧
本文示例要求先安装其他操作系统(如 Windows),再安装 FreeBSD。
简单方法(无众多数据集)
注意
以此部分所述方法,在使用 ZFS 时,只会创建一个名为
zroot的存储池(zpool),并在其中创建一个直接挂载到/的名为root的数据集。不会像自动安装那样创建zroot/ROOT/default以及众多的数据集。你可以在安装后创建数据集并进行替换操作,但若希望初始布局就与自动安装相同,请跳转至本节“Shell 分区”部分。
首先需要在硬盘上为 FreeBSD 预留空间。该空间不一定位于硬盘末尾,中间位置亦可,因为典型的 Windows 安装中最后一个分区(本例为 nda0p4)通常是恢复分区。
分区完成后,在 FreeBSD 下查看,结果如下:
# gpart show
=> 34 419430333 nda0 GPT (200G)
34 2014 - free - (1.0M)
2048 204800 1 efi (100M) # EFI 分区
206848 32768 2 ms-reserved (16M) # MSR 分区
239616 207992832 3 ms-basic-data (99G) # 此为 C 盘(NTFS 数据分区)。此处已为其后的 FreeBSD 预留了约 100G 空间。
417947648 1478656 4 ms-recovery (722M) # 恢复分区
419426304 4063 - free - (100G)你应关闭安全启动和快速启动。或者,也可通过 Windows 设置 → 更新与安全 → 恢复 → 高级启动,选择从 U 盘设备启动。然后正常引导 FreeBSD 安装程序,直至进入分区选择界面。

此处选择 Manual
技巧
其实这里调用的是软件
sade(sysadmins disk editor,系统管理员磁盘编辑器),bsdconfig中的分区模块亦调用此工具。
此处可查看硬盘分区情况。图中仅有一块硬盘,包含一个 300M 的 EFI 系统分区、一个 16M 的 MSR 分区、一个 64G 的 Windows 系统分区(即 C 盘)以及未显示的空闲空间。直接选择 Create(创建)。

此处在第一行输入分区类型(即下方会列出的 Filesystem type)。如需添加 swap 分区,请在此步骤首先添加,后添加难以控制分区大小。在添加 UFS 或 ZFS 分区时,需在 Mountpoint 处填写 /,表示将该分区挂载到根目录。Label 是 FreeBSD 的卷标(gptlabel),用于方便识别分区,可根据需要填写或留空。此处使用 ZFS,不添加 swap 分区,并且填入卷标 zroot。

使用 Tab 键 将焦点移动到 OK,然后按回车键确认。

此处会警告 ZFS 分区可能无法启动,但经实测可以正常启动。选择 Yes 忽略此警告:

注意
请将 Windows 创建的 300M EFI 系统分区的挂载点设置为
/boot/efi。
选择 Finish(完成)

选择 Commit(确认)

之后会进入正常安装的流程。安装完成后:
进入系统后可以看到,仅有一个 root 数据集。可以手动将数据集改为自动安装的样子,亦可参照下文在安装时进入 shell 进行分区。
Shell 分区
仍进行到分区选择界面,此时选择 Shell

之后将进入终端(TTY):

执行以下命令。
加载 ZFS 内核模块
配置 ZFS 对齐方式(只影响新创建的硬盘分区)
技巧
参数
12表示 2^12 = 4096 字节(4KB)的扇区大小。默认参数(可通过命令sysctl vfs.zfs.vdev.min_auto_ashift查看)是9,即 2^9 = 512 字节。
思考题
若使用 NVMe 硬盘,新装系统(UEFI+GPT,无 freebsd-boot 分区)的该默认参数通常为 12。但 4K 对齐究竟对齐的是什么?因为 SSD 并无传统机械硬盘的物理扇区概念。
创建分区
查看分区情况
挂载临时文件系统准备安装
创建 ZFS 池
创建 ZFS 池。
选项说明如下:
-o altroot=/mnt将其临时挂载至 /mnt;-O compress=lz4启用 lz4 压缩(可换为 zstd 等);-O atime=off关闭访问时间记录;-m none不设置挂载点;/dev/gpt/zroot为刚创建的分区。
创建 ZFS 数据集
技巧
上述参数参考自 bsdinstall(8) 的默认配置。安装后,也可通过命令
zfs get exec,setuid,mountpoint查看相关属性。具体代码位于/usr/src/usr.sbin/bsdinstall/scripts/zfsboot。
修改文件夹权限
将 /mnt/tmp 和 /mnt/var/tmp 的权限设置为 1777(粘滞位),以确保临时目录权限正确:
设置交换分区到 fstab
fstab配置 swap 分区。注意将 /dev/nda0p5 替换为实际的交换分区设备名,可使用 gpart show nda0 命令进行确认:
技巧
\t是制表符(Tab)的转义字符(意味着按了一下 TAB 键),用于对齐字段,使用空格亦可达到相同效果。也可使用ee /tmp/bsdinstall_etc/fstab命令手动编辑该文件并写入如下格式的行:下同。
设置启动项与 UEFI
①:
\n代表 Unix/Linux 系统中的换行符。Windows 文本文件的行尾通常是\r\n(回车 + 换行)。此命令效果等同于使用ee /tmp/bsdinstall_etc/rc.conf编辑该文件并添加一行zfs_enable="YES"。
完成
至此,我们便手动创建了一套与自动安装程序基本相同的 ZFS 数据集结构(自动安装通常还会创建独立的 /home/用户名 数据集,此处未包含)。
参考文献
最后更新于
这有帮助吗?