3.1 安装双系统(先安装 FreeBSD)
本节介绍在同一物理设备上部署 FreeBSD 与 Windows 双系统,先安装 FreeBSD,再安装 Windows。
3.1.1 安装 FreeBSD 14.2-RELEASE
首先安装 FreeBSD 14.2-RELEASE 系统,未作特别说明时均采用默认设置与参数。


技巧
如果在此处设置
P Partition Scheme为GPT (UEFI)而非其他(仅较早的计算机才需选择GPT (BIOS+UEFI)等选项),后续分区与系统更新过程更为简便,同时可实现 4K 对齐。

此处需要设置较大的临时交换分区,该数值应为计划中的交换分区与 Windows 系统分区容量之和。如此设置是为了后续安装 Windows 时能够直接使用这部分空间,避免额外分区操作。在本节中,交换分区(swap)大小为 8 GB,其余 200 GB 空间预留给 Windows。请修改 S Swap Size 的大小。

列出系统磁盘分区情况:
# gpart show
=> 9 639659 cd0 MBR (1.2G)
9 639659 - free - (1.2G)
=> 9 639659 iso9660/14_2_RELEASE_AMD64_CD MBR (1.2G)
9 639659 - free - (1.2G)
=> 40 629145520 nda0 GPT (300G)
40 532480 1 efi (260M)
532520 1024 2 freebsd-boot (512K)
533544 984 - free - (492K)
534528 436207616 3 freebsd-swap (208G)
436742144 192401408 4 freebsd-zfs (92G)
629143552 2008 - free - (1.0M)显示交换分区和交换文件的使用情况(单位为 MB/GB):
# swapinfo -mh
Device Size Used Avail Capacity
/dev/nda0p3 208G 0B 208G 0%可以看到交换分区的大小是所设定的 208 GB(其中 200 GB 预留给 Windows 操作系统)。
编辑 /etc/fstab 文件,在 swap 对应行的行首添加 # 注释该行。本例中该行是第三行,以避免系统启动时挂载此交换分区,为后续安装 Windows 作准备:
# Device Mountpoint FStype Options Dump Pass#
/dev/gpt/efiboot0 /boot/efi msdosfs rw 2 2
#/dev/nda0p3 none swap sw 0 03.1.2 安装 Windows 11
FreeBSD 安装完成后,安装 Windows 系统。
插入 Windows 启动盘,设置 BIOS 从该启动盘启动,开始安装 Windows。此时系统会识别到这块硬盘上的现有分区结构,只需要使用之前预留的空间。

在分区时,删除(Delete Partition)整个 208 GB 的交换分区(本例中为“磁盘 0 分区 3”),因为这部分空间正是为 Windows 预留的。

然后点击创建分区(Create Partition),如果提示出错,点击刷新(Refresh)。Windows 安装程序会自动在未分配空间上创建所需的分区,包括 MSR 分区、系统分区和恢复分区。
然后选中 208 GB 的“磁盘 0 未分配空间”,点击“下一步”安装。

3.1.3 还原交换分区(swap)
Windows 安装完成后,还原 FreeBSD 的交换分区。此前预留了 208 GB 空间,其中 8 GB 用于交换分区。接下来使用工具 DiskGenius。

打开 DiskGenius,压缩 C 盘,释放 8 GB 的未分配空间。Windows 系统安装完成后,C 盘占用了之前预留的大部分空间,只需从 C 盘末尾压缩出 8 GB 即可。

将这 8 GB 空间格式化为 FreeBSD Swap partition 类型,然后点击“保存更改”。此步骤将新创建的交换分区标记为 FreeBSD 可以识别的类型。


回到 FreeBSD,查看磁盘分区情况:
# gpart show
=> 34 629145533 nda0 GPT (300G)
34 6 - free - (3.0K)
40 532480 1 efi (260M)
532520 1024 2 freebsd-boot (512K)
533544 984 - free - (492K)
534528 32768 3 ms-reserved (16M)
567296 417953792 4 ms-basic-data (199G)
418521088 16777216 5 freebsd-swap (8.0G)
435298304 1441792 6 ms-recovery (704M)
436740096 2048 - free - (1.0M)
436742144 192401408 7 freebsd-zfs (92G)
629143552 2015 - free - (1.0M)可以看到,nda0p5(分区 5)即为新建的交换分区。接下来测试启用指定交换分区 /dev/nda0p5:
# swapon /dev/nda0p5未产生错误,亦无任何提示,表明操作成功,系统已经可以正常识别并使用这个新的交换分区。
编辑 /etc/fstab 文件,在 swap 对应行的行首删去注释符号 #,并将分区改为正确的值。本例中的配置如下第三行:
# Device Mountpoint FStype Options Dump Pass#
/dev/gpt/efiboot0 /boot/efi msdosfs rw 2 2
/dev/nda0p5 none swap sw 0 0重启后再次查看当前交换分区情况:
# swapinfo -mh
Device Size Used Avail Capacity
/dev/nda0p5 8.0G 0B 8.0G 0%列出系统中所有 ZFS 池及其状态:
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zroot 91.5G 922M 90.6G - - 0% 0% 1.00x ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 922M 87.8G 96K /zroot
zroot/ROOT 919M 87.8G 96K none
zroot/ROOT/default 919M 87.8G 919M /
zroot/home 224K 87.8G 96K /home
zroot/home/ykla 128K 87.8G 128K /home/ykla
zroot/tmp 104K 87.8G 104K /tmp
zroot/usr 288K 87.8G 96K /usr
zroot/usr/ports 96K 87.8G 96K /usr/ports
zroot/usr/src 96K 87.8G 96K /usr/src
zroot/var 668K 87.8G 96K /var
zroot/var/audit 96K 87.8G 96K /var/audit
zroot/var/crash 96K 87.8G 96K /var/crash
zroot/var/log 188K 87.8G 188K /var/log
zroot/var/mail 96K 87.8G 96K /var/mail
zroot/var/tmp 96K 87.8G 96K /var/tmp