Skip to content

21.5 阿里云轻量应用服务器安装 FreeBSD(UEFI 和 GPT 分区表) ​

本节演示在阿里云轻量应用服务器上通过 UEFI + GPT 方式安装 FreeBSD,以 Rocky Linux 9 为中间宿主系统完成部署。

21.5.1 服务器环境 ​

Rocky Linux 9

将服务器系统重置为 Rocky Linux 9。该发行版在服务器市场占据主流地位,多数服务商均提供支持。

21.5.1.1 救援登录 ​

配置救援登录。

Rocky Linux 9

本节所述大部分操作通过 VNC 连接(救援登录)完成。

Rocky Linux 9

为便于使用,可将救援登录临时设置为默认登录方式。

Rocky Linux 9

救援登录界面如上所示。可通过右上角的“复制命令”将较长的命令复制至终端执行。

21.5.1.2 验证服务器是否处于 UEFI 环境 ​

本节针对 UEFI 启动环境和 GPT 分区表,因此必须首先确认服务器是否使用 UEFI 启动环境与 GPT 分区表。以下提供多种方法供参考。

  • 通过系统固件判断当前系统是以 UEFI 还是 BIOS 模式启动:
sh
# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
UEFI
  • 通过 UEFI 启动工具判断启动模式:
sh
# efibootmgr
BootCurrent: 0003
Timeout: 0 seconds
BootOrder: 0006,0000,0001,0002,0003,0004,0005
Boot0000* UiApp
Boot0001* UEFI Floppy
Boot0002* UEFI Floppy 2
Boot0003* UEFI Misc Device
Boot0004* UEFI PXEv4 (MAC:00163E45BC81)
Boot0005* EFI Internal Shell
Boot0006* rocky

21.5.1.3 服务器的磁盘分区情况 ​

  • 通过文件系统类型与磁盘使用情况判断(同时请读者注意 /dev/vda2 挂载于 /boot/efi,这表明系统正使用 UEFI 模式):
sh
# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs          tmpfs     447M     0  447M   0% /dev/shm
tmpfs          tmpfs     179M  2.8M  176M   2% /run
efivarfs       efivarfs  256K  7.4K  244K   3% /sys/firmware/efi/efivars
/dev/vda3      xfs        30G  3.4G   27G  12% /
/dev/vda2      vfat      100M  7.1M   93M   8% /boot/efi	# 表明系统正在使用 UEFI 模式
tmpfs          tmpfs      90M     0   90M   0% /run/user/0
  • 通过文件系统静态挂载配置判断:
sh
# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon May 26 09:36:59 2025
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=a1a902bf-090a-4942-b533-c016a4e1c142 /                       xfs     defaults 0 0
UUID=638D-9E50          /boot/efi               vfat    defaults,uid=0,gid=0,umask=077,shortname=winnt 0 2
  • 查看块设备的 UUID 和文件系统类型:
sh
# blkid
/dev/vda2: SEC_TYPE="msdos" UUID="638D-9E50" TYPE="vfat" PARTUUID="a4ab187d-a07f-4f62-ac3e-c4e35548fcba"
/dev/vda3: LABEL="root" UUID="a1a902bf-090a-4942-b533-c016a4e1c142" TYPE="xfs" PARTUUID="4a488c1d-987b-4242-9b74-4b453717e917"
/dev/vda1: PARTUUID="6ce991dd-7936-4b15-b0f9-10fd95a4393c"
  • 探测指定块设备的文件系统信息:
sh
# blkid -p /dev/vda1
/dev/vda1: PART_ENTRY_SCHEME="gpt" PART_ENTRY_UUID="6ce991dd-7936-4b15-b0f9-10fd95a4393c" PART_ENTRY_TYPE="21686148-6449-6e6f-744e-656564454649" PART_ENTRY_NUMBER="1" PART_ENTRY_OFFSET="2048" PART_ENTRY_SIZE="2048" PART_ENTRY_DISK="253:0"

BIOS Boot 分区用于兼容传统 BIOS 启动。

21.5.1.4 查看系统主机名及系统信息 ​

sh
# hostnamectl
 Static hostname: iZuf6796zmyoxqo7fzn665Z
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: 37ef1ea9b706405ea6df432d1348dc03
         Boot ID: 33fa5e31444449efb3888ceca163022e
  Virtualization: kvm
Operating System: Rocky Linux 9.5 (Blue Onyx)
     CPE OS Name: cpe:/o:rocky:rocky:9::baseos
          Kernel: Linux 5.14.0-503.40.1.el9_5.x86_64
    Architecture: x86-64
 Hardware Vendor: Alibaba Cloud
  Hardware Model: Alibaba Cloud ECS
Firmware Version: 0.0.0

21.5.1.5 查看网络信息 ​

  • 显示所有网络接口及其 IP 地址信息:
sh
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:16:3e:45:bc:81 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.24.0.80/18 brd 172.24.63.255 scope global dynamic noprefixroute eth0
       valid_lft 1892159248sec preferred_lft 1892159248sec
    inet6 fe80::216:3eff:fe45:bc81/64 scope link
       valid_lft forever preferred_lft forever
  • 显示系统的路由表:
sh
# ip route show
default via 172.24.63.253 dev eth0 proto dhcp src 172.24.0.80 metric 100
172.24.0.0/18 dev eth0 proto kernel scope link src 172.24.0.80 metric 100
  • 列出所有 PCI 总线及其设备信息:
sh
# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Communication controller: Red Hat, Inc. Virtio console
00:04.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:05.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:06.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon

21.5.2 通过裸磁盘镜像安装 FreeBSD ​

阿里云轻量应用服务器支持通过裸磁盘镜像方式安装 FreeBSD,操作前请务必注意以下警告。

警告

此操作将丢失所有数据,请先行完成数据备份再操作。经过测试,操作后,快照可能无法正确回滚,但自定义镜像可间接还原。

下载并写入 FreeBSD ZFS 镜像到 /dev/vda:

sh
# wget -qO- https://mirrors.nju.edu.cn/freebsd/releases/VM-IMAGES/15.0-RELEASE/amd64/Latest/FreeBSD-15.0-RELEASE-amd64-zfs.raw.xz | xzcat | dd of=/dev/vda bs=4M status=progress

参数说明:

参数说明
wget -qO- URL-q 静默模式,不显示下载过程;-O- 将下载内容输出到标准输出(stdout)
xzcat解压 xz 格式文件,并将解压后的内容输出到标准输出
dd of=/dev/vda将输入写入 /dev/vda 设备(整块磁盘,不是某个分区)
bs=4M设置块大小为 4 MB,提高写入效率
status=progress显示 dd 的写入进度

写入 FreeBSD ZFS 镜像到整块硬盘

随后在阿里云管理控制台中依次选择“更多操作”和“重启”。

强制重启实例

勾选“强制重启实例”这一选项。

重启实例

执行强制重启以进入 FreeBSD。

根据读者反馈与实际测试,在半虚拟化平台上安装或升级 FreeBSD 时可能会遇到故障,例如阿里云的 VirtIO-BLK 存储设备驱动的问题。

初次启动的 FreeBSD 系统

此时,需在 FreeBSD 系统启动时,在启动器菜单界面(上图所示界面),按下 ESC 键进入命令提示符“OK”。

调整可调参数

请在该界面输入 set kern.maxphys=65536,设置内核最大物理 I/O 大小为 65536 字节(大块 I/O 有时会触发驱动或缓存问题),按回车键确认,再输入 boot 并按回车键方可正常启动。

随后正常执行安装流程,选择 ZFS 分区方式。

安装 FreeBSD 系统

待 FreeBSD 系统完全启动后,在引导加载程序配置文件中永久设置最大 I/O 缓冲区大小:

sh
# echo "kern.maxphys=65536" >> /boot/loader.conf

如果不进行上述设置,系统下次开机时仍可能停留在引导界面。

接下来列出 FreeBSD 系统磁盘分区表及分区信息:

sh
root@freebsd:~ # gpart show
=>      34  62914486  vtbd0  GPT  (30G)
        34       348      1  freebsd-boot  (174K)
       382     66584      2  efi  (33M)
     66966   2097152      3  freebsd-swap  (1.0G)
   2164118  60750402      4  freebsd-zfs  (29G)

观察发现,系统已自动扩展磁盘容量。

查看 FreeBSD 系统网络接口信息:

sh
root@freebsd:~ # ifconfig
vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=ec07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS>
	ether 00:16:3e:45:bc:81
	inet 172.24.0.80 netmask 0xffffc000 broadcast 172.24.63.255
	inet6 fe80::216:3eff:fe45:bc81%vtnet0 prefixlen 64 scopeid 0x1
	media: Ethernet autoselect (10Gbase-T <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet 127.0.0.1 netmask 0xff000000
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
	groups: lo
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

可通过 ping 常用网站,验证网络连接状态。

显示内核启动信息和内核日志:

sh
root@freebsd:~ # dmesg
---<<BOOT>>---
Copyright (c) 1992-2025 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC amd64
FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
VT(efifb): resolution 800x600
CPU: Intel(R) Xeon(R) Platinum (2499.96-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x50654  Family=0x6  Model=0x55  Stepping=4
  Features=0x1f83fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2,SS,HTT>
  Features2=0xfffa3203<SSE3,PCLMULQDQ,SSSE3,FMA,CX16,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,TSCDLT,AESNI,XSAVE,OSXSAVE,AVX,F16C,RDRAND,HV>
  AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
  AMD Features2=0x121<LAHF,ABM,Prefetch>
  Structured Extended Features=0xd19f07ab<FSGSBASE,TSCADJ,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,AVX512F,AVX512DQ,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,AVX512CD,AVX512BW,AVX512VL>
  XSAVE Features=0xf<XSAVEOPT,XSAVEC,XINUSE,XSAVES>
  TSC: P-state invariant
Hypervisor: Origin = "KVMKVMKVM"
real memory  = 1073741824 (1024 MB)
avail memory = 929538048 (886 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: <BOCHS  BXPCAPIC>
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
FreeBSD/SMP: 1 package(s) x 1 core(s) x 2 hardware threads
random: registering fast source Intel Secure Key Seed
random: fast provider: "Intel Secure Key Seed"
arc4random: WARNING: initial seeding bypassed the cryptographic random device because it was not yet seeded and the knob 'bypass_before_seeding' was enabled.
ioapic0 <Version 1.1> irqs 0-23
Launching APs: 1
random: entropy device external interface
kbd1 at kbdmux0
efirtc0: <EFI Realtime Clock>
efirtc0: registered as a time-of-day clock, resolution 1.000000s
kvmclock0: <KVM paravirtual clock>
Timecounter "kvmclock" frequency 1000000000 Hz quality 975
kvmclock0: registered as a time-of-day clock, resolution 0.000001s
smbios0: <System Management BIOS> at iomem 0x3dbcc000-0x3dbcc01e
smbios0: Entry point: v2.1 (32-bit), Version: 2.8, BCD Revision: 2.8
aesni0: <AES-CBC,AES-CCM,AES-GCM,AES-ICM,AES-XTS>
acpi0: <BOCHS BXPCFACP>
acpi0: Power Button (fixed)
acpi0: Sleep Button (fixed)
cpu0: <ACPI CPU> on acpi0
atrtc0: <AT realtime clock> port 0x70-0x71,0x72-0x77 irq 8 on acpi0
atrtc0: registered as a time-of-day clock, resolution 1.000000s
Event timer "RTC" frequency 32768 Hz quality 0
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <24-bit timer at 3.579545MHz> port 0xb008-0xb00b on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci_link4: BIOS IRQ 10 for 0.1.INTA is invalid
pci_link3: BIOS IRQ 11 does not match initial IRQ 10
pci_link2: BIOS IRQ 11 does not match initial IRQ 10
pci_link1: BIOS IRQ 10 does not match initial IRQ 11
pci0: <ACPI PCI bus> on pcib0
isab0: <PCI-ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel PIIX3 WDMA2 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xc060-0xc06f at device 1.1 on pci0
ata0: <ATA channel> at channel 0 on atapci0
ata1: <ATA channel> at channel 1 on atapci0
uhci0: <Intel 82371SB (PIIX3) USB controller> port 0xc040-0xc05f irq 11 at device 1.2 on pci0
usbus0: controller did not stop
usbus0 on uhci0
usbus0: 12Mbps Full Speed USB v1.0
pci0: <bridge> at device 1.3 (no driver attached)
vgapci0: <VGA-compatible display> mem 0x80000000-0x81ffffff,0x82001000-0x82001fff at device 2.0 on pci0
vgapci0: Boot video device
virtio_pci0: <VirtIO PCI (legacy) Console adapter> port 0xc020-0xc03f mem 0x82000000-0x82000fff irq 11 at device 3.0 on pci0
virtio_pci1: <VirtIO PCI (legacy) Block adapter> mem 0x800000000-0x800000fff,0x800001000-0x800001fff at device 4.0 on pci0
vtblk0: <VirtIO Block Adapter> on virtio_pci1
vtblk0: 30720MB (62914560 512 byte sectors)
virtio_pci2: <VirtIO PCI (legacy) Network adapter> mem 0x800002000-0x800002fff,0x800003000-0x800003fff at device 5.0 on pci0
GEOM: vtbd0: the secondary GPT header is not in the last LBA.
vtnet0: <VirtIO Networking Adapter> on virtio_pci2
vtnet0: Ethernet address: 00:16:3e:45:bc:81
vtnet0: netmap queues/slots: TX 1/4096, RX 1/2048
000.000850 [ 452] vtnet_netmap_attach       vtnet attached txq=1, txd=4096 rxq=1, rxd=2048
virtio_pci3: <VirtIO PCI (legacy) Balloon adapter> port 0xc000-0xc01f irq 10 at device 6.0 on pci0
vtballoon0: <VirtIO Balloon Adapter> on virtio_pci3
acpi_syscontainer0: <System Container> port 0xaf00-0xaf1f on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
fdc0: <floppy drive controller> port 0x3f2-0x3f5,0x3f7 irq 6 drq 2 on acpi0
fdc0: does not respond
device_attach: fdc0 attach returned 6
uart: ns8250: UART FCR is broken (0x1)
uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
uart0: console (115200,n,8,1)
attimer0: <AT timer> at port 0x40 on isa0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
attimer0: non-PNP ISA device will be removed from GENERIC in FreeBSD 16.
Timecounter "TSC-low" frequency 1250000111 Hz quality 1000
Timecounters tick every 10.000 msec
ugen0.1: <Intel UHCI root HUB> at usbus0
ZFS filesystem version: 5
uhub0 on usbus0
ZFS storage pool version: features support (5000)
uhub0: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
Trying to mount root from zfs:zroot/ROOT/default []...
random: unblocking device.
uhub0: 2 ports with 2 removable, self powered
ugen0.2: <QEMU QEMU USB Tablet> at usbus0
usbhid0 on uhub0
usbhid0: <QEMU QEMU USB Tablet, class 0/0, rev 2.00/0.00, addr 2> on usbus0
hidbus0: <HID bus> on usbhid0
Dual Console: Serial Primary, Video Secondary
intsmb0: <Intel PIIX4 SMBUS Interface> irq 9 at device 1.3 on pci0
intsmb0: intr IRQ 9 enabled revision 0
smbus0: <System Management Bus> on intsmb0
hms0: <QEMU QEMU USB Tablet> on hidbus0
hms0: 3 buttons and [XYW] coordinates ID=0
vtcon0: <VirtIO Console Adapter> on virtio_pci0
lo0: link state changed to UP
vtnet0: link state changed to UP

21.5.3 通过 mfsBSD 间接安装 FreeBSD ​

mfsBSD 作为精简的 FreeBSD 内存盘镜像,支持 UEFI 和 ZFS 环境,可用于安装 FreeBSD 或充当急救盘等。mfsBSD 的下载地址为:mfsBSD and mfslinux。

警告

请勿选择任何带后缀的版本,如 special edition 或 mini edition。参见故障排除部分。

通过 WinSCP 将 mfsBSD ISO 镜像传输至 Rocky Linux:

WinSCP 传输文件

将 mfsBSD ISO 镜像写入 /dev/vda(块大小 4 MB,并显示进度):

sh
# dd if=mfsbsd-14.2-RELEASE-amd64.iso of=/dev/vda bs=4M status=progress
25+1 records in
25+1 records out
105928704 bytes (106 MB, 101 MiB) copied, 0.206646 s, 513 MB/s

强制重启实例,启动到 mfsBSD。进入启动菜单界面时,参照上节配置 kern.maxphys,否则无法正确识别硬盘。

警告

不可使用精简系统 mfsbsd-mini-14.2-RELEASE-amd64.iso 代替,无法调整可调参数 kern.maxphys,进而造成启动失败。

mfsbsd-mini 启动界面

手动指定可调参数后仍然失败。

mfsbsd-mini 启动界面

完全启动后,输入密码登录到 root 账户,默认密码为 mfsroot。

观察 mfsBSD 磁盘分区情况:

sh
root@mfsbsd:~ # gpart show
=>      34  62914493  vtbd0  GPT  (30G) [CORRUPT]
        34      2014         - free -  (1.0M)
      2048      2048      1  bios-boot  (1.0M)
      4096    204800      2  efi  (100M)
    208896  62705631      3  linux-data  (30G)

=>      34  62914493  iso9660/MFSBSD  GPT  (30G) [CORRUPT]
        34      2014                  - free -  (1.0M)
      2048      2048               1  bios-boot  (1.0M)
      4096    204800               2  efi  (100M)
    208896  62705631               3  linux-data  (30G)

=>      34  62914493  diskid/DISK-uf69bteajghre1t7oe0z  GPT  (30G) [CORRUPT]
        34      2014                                    - free -  (1.0M)
      2048      2048                                 1  bios-boot  (1.0M)
      4096    204800                                 2  efi  (100M)
    208896  62705631                                 3  linux-data  (30G)

可见,大部分分区已被标记为 [CORRUPT],会影响系统安装,因此必须先修复 GPT 分区表:

sh
root@mfsbsd:~ # gpart recover vtbd0	# 恢复 vtbd0 磁盘的分区表信息
vtbd0 recovered
root@mfsbsd:~ # gpart show # 查看修复分区表后的磁盘信息
=>      40  62914487  vtbd0  GPT  (30G)
        40      2008         - free -  (1.0M)
      2048      2048      1  bios-boot  (1.0M)
      4096    204800      2  efi  (100M)
    208896  62705631      3  linux-data  (30G)

=>      40  62914487  iso9660/MFSBSD  GPT  (30G)
        40      2008                  - free -  (1.0M)
      2048      2048               1  bios-boot  (1.0M)
      4096    204800               2  efi  (100M)
    208896  62705631               3  linux-data  (30G)

=>      40  62914487  diskid/DISK-uf69bteajghre1t7oe0z  GPT  (30G)
        40      2008                                    - free -  (1.0M)
      2048      2048                                 1  bios-boot  (1.0M)
      4096    204800                                 2  efi  (100M)
    208896  62705631                                 3  linux-data  (30G)

21.5.3.1 UFS 安装 ​

执行 bsdinstall 开始安装,流程可参见本节其他相关内容。

UFS 安装

安装后,使用 JuiceSSH 连接 FreeBSD 机器:

UFS 安装

21.5.3.2 ZFS 安装 ​

在 Shell 界面,执行以下命令,手动加载 ZFS 内核模块:

sh
# kldload zfs

无任何信息输出则加载成功。

还可通过以下命令验证 ZFS 模块的加载情况:

sh
# kldstat | grep zfs

如果有相关输出,则可继续输入命令 bsdinstall 以进入正常安装流程。

本次实验的机器仅有 1 GB 内存,在 mfsBSD 占用约 100 MB 后,可用内存不足 800 MB。因此指定 ZFS 安装会报错“Distribution extract failed”(分发文件解压失败):

Distribution extract failed

查看实际错误信息,按 Ctrl + C 键退回到 Shell 界面,通过以下命令观察:

sh
# dmesg

…………无关输出已经省略…………

ZFS storage pool version: features support (5000)
pid 1151 (zpool) is attempting to use unsafe AIO requests - not logging anymore
pid 1562 (distextract), jid 0, uid 0, was killed: failed to reclaim memory

“failed to reclaim memory”表示内存回收失败。解压进程 1562 被强制终止,这是内存不足所致。

待进一步测试,感兴趣的读者也可以在测试后提交 PR。

21.5.4 故障排除与未竟事宜 ​

本节实际操作中尝试了若干方法,但最终只有两种方法相对成功。为了便于有意探索的读者进行研究,未完成的方法在此处列出,供后续研究参考。

21.5.4.1 安装过程中报错 sysctl: unknown oid 'vfs.zfs.min_auto_ashift' ​

分析报错信息:从字面看,该参数用于设置 ZFS 4K 对齐,报错指出该参数是未知的。因此首先将问题定位到 ZFS 模块。

通常是由于未预先手动加载 ZFS 内核模块引发的。

解决方法为按照上文所述,执行命令 kldload zfs 手动加载内核模块。

这可能是一个长期存在但难以复现的 Bug,参见:FreeBSD Project. Bug 249157 - installer reports sysctl: unknown oid 'vfs.zfs.min_auto_ashift' when ZFS module not loaded[EB/OL]. [2026-03-26]. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=249157.

21.5.4.2 文件系统不支持在线缩小 ​

EXT2、EXT3、EXT4 和 XFS 文件系统均不支持在线缩小(Btrfs 支持在线缩小,但可能存在稳定性问题)。目前对此尚无通用解决方案。

21.5.4.3 找不到 UEFI 启动项,启动后直接进入 UEFI Shell ​

找不到 UEFI 启动项

确认所选镜像确实支持 UEFI 启动,例如 mfslinux 和 TinyCore-current.iso 不支持 UEFI 启动。

21.5.4.4 找不到根分区 ​

应将镜像写入整块磁盘(例如 /dev/vda),而非单个分区(例如 /dev/vda2),否则可能出现如下错误:

未写入整块磁盘,写入了 EFI 分区

即使手动指定根分区,仍可能出现如下错误:

未写入整块磁盘,写入了 EFI 分区

21.5.4.5 通过 Ventoy 安装 FreeBSD ​

Ventoy 是新一代多系统启动 U 盘解决方案,其项目官网地址为 Ventoy。

基本思路是通过内存盘系统将 Ventoy 写入整块硬盘,随后将 Ventoy 创建的较大容量的磁盘分区挂载到内存盘,再将 FreeBSD 系统写入该磁盘分区。

随后强制重启实例,启动到 Ventoy 进行系统安装。

21.5.4.5.1 Ventoy 使用方法 ​

从南京大学镜像站下载 Ventoy 的 Linux 压缩包:

sh
# wget https://mirrors.nju.edu.cn/github-release/ventoy/Ventoy/Ventoy%201.1.10%20release/ventoy-1.1.10-linux.tar.gz

在当前目录解压 Ventoy 的文件和目录:

sh
# tar xvf ventoy-1.1.10-linux.tar.gz
# ls	# 列出所有文件
ventoy-1.1.10  ventoy-1.1.10-linux.tar.gz

安装 Ventoy 到硬盘:

sh
# cd ventoy-1.1.10/	# 进入 Ventoy 目录
# ls	# 列出 Ventoy 的文件和目录
boot                    README          VentoyGUI.aarch64   VentoyPlugson.sh
CreatePersistentImg.sh  tool            VentoyGUI.i386      VentoyVlnk.sh
ExtendPersistentImg.sh  ventoy          VentoyGUI.mips64el  VentoyWeb.sh
plugin                  Ventoy2Disk.sh  VentoyGUI.x86_64    WebUI
# sh Ventoy2Disk.sh -I -g /dev/vda	# 执行安装

Ventoy 安装界面

Ventoy2Disk.sh 参数说明:

  • -I:强制安装
  • -g:使用 GPT 分区表

通过命令来验证 Ventoy 安装情况:

验证 Ventoy 安装

读者可通过 Linux 系统安装 Ventoy —— 命令行界面 了解更多信息。

21.5.4.5.2 使用 Ventoy LiveCD 写入 Ventoy ​

Ventoy LiveCD 下载地址为 安装包。

Ventoy LiveCD 并非 Ventoy 本体,而是用于安装 Ventoy 的内存盘系统镜像。参见:Ventoy 团队. Ventoy LiveCD 使用说明[EB/OL]. [2026-03-26]. https://www.ventoy.net/cn/doc_livecd.html.

在使用 dd 将镜像写入整块硬盘后,强制重启实例,Ventoy LiveCD 可以正常启动。

Ventoy LiveCD 启动界面

在配置选项中允许所有类型的磁盘。

Ventoy 配置选项

将 Ventoy 安装到整块磁盘中。

Ventoy 安装到磁盘

强制重启实例后,系统可以正确启动到 Ventoy。

Ventoy 启动菜单

Ventoy 目前不支持在线下载 ISO 镜像文件。

因此,该方法无法继续。

需要使用其他内存盘在启动 Ventoy 之前将镜像写入硬盘。

21.5.4.5.3 使用 TinyCorePure64 写入 Ventoy ​

TinyCorePure64 属于 Core 项目,该系统高度模块化,支持社区自定义构建。

TinyCorePure64 能够在启动后完全载入内存,同时重启后也将丢失所有数据。

TinyCorePure64 下载地址为 x86 Pure 64,进入页面后点击“Core Pure 64 Latest Build”选择“TinyCorePure64-16.2.iso”或类似版本进行下载。

注意

切勿错误地下载“CorePure64”,CorePure64 并不支持 UEFI 启动环境。

sh
# dd if=TinyCorePure64-16.2.iso of=/dev/vda bs=4M status=progress conv=fdatasync

警告

dd 写入块设备将覆盖磁盘上所有现有数据,操作不可逆。请反复确认 of= 参数指定的设备路径正确无误。

强制重启实例以启动到 TinyCorePure64。

启动到 TinyCorePure64

选择最后一项“corew”,因为默认图形界面(tc)通过 VNC 执行命令时可能出现异常。同时,其图形用户界面下无法运行图形界面的 Ventoy,这是因为 libc 格式不兼容。

观察分区情况:

TinyCorePure64 分区情况

详细查看:

TinyCorePure64 分区详情

TinyCorePure64 是精简发行版,缺少许多 Ventoy 所需工具,因此需要手动安装。

配置 Tiny Core Linux 镜像源地址,指定使用网易开源镜像站作为下载源:

sh
# echo http://mirrors.163.com/tinycorelinux/ > /opt/tcemirror

安装 exFAT 工具、分区工具、FAT 文件系统工具、Linux 工具集及证书组件:

sh
$ tce-load -wi exfat-utils parted dosfstools util-linux openssl ca-certificates

注意

该包管理器无法在 root 权限下运行。

参照上述章节内容,将 Ventoy 安装到整块磁盘上。随后挂载 Ventoy 生成的磁盘到内存盘。

使用指定用户代理从镜像站下载 FreeBSD 15.0 Bootonly ISO 镜像至 Ventoy:

sh
# wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://mirrors.nju.edu.cn/freebsd/releases/ISO-IMAGES/15.0/FreeBSD-15.0-RELEASE-amd64-bootonly.iso

强制重启实例到 Ventoy。

Ventoy 启动菜单

在引导菜单中设置可调参数 kern.maxphys 后,继续启动 FreeBSD 系统。

列出磁盘分区情况:

磁盘分区情况

磁盘为只读状态,无法执行任何操作,包括删除分区表、格式化或使用 dd 写零。

上述操作均提示错误如下:

只读磁盘报错

因此无法执行任何安装操作。

21.5.5 附录:可能会用到的实用命令 ​

卸载 EFI 分区示例:

sh
# umount /dev/vda2

将 EFI 分区重新格式化为 FAT32 文件系统:

警告

mkfs.vfat 将格式化指定分区,分区上现有数据将永久丢失。请确认设备路径正确无误。

sh
# mkfs.vfat -F 32 /dev/vda2
mkfs.fat 4.2 (2021-01-31)

查看 /dev/vda2 分区的文件系统类型:

sh
# blkid /dev/vda2
/dev/vda2: UUID="35FB-D455" TYPE="vfat" PARTUUID="a4ab187d-a07f-4f62-ac3e-c4e35548fcba"

21.5.6 参考文献 ​

  • Ventoy. Ventoy — A New Bootable USB Solution[EB/OL]. [2026-04-17]. https://www.ventoy.net. Ventoy 项目主页,新一代多系统启动 U 盘解决方案,支持直接从 ISO 镜像启动。
  • FreeBSD Project. FreeBSD 15.0-RELEASE Release Notes[EB/OL]. [2026-04-17]. https://www.freebsd.org/releases/15.0R/relnotes/. FreeBSD 15.0 发行说明,包含 VirtIO 驱动改进与内核可调参数变更。