3.12 阿里云轻量应用服务器安装 FreeBSD(UEFI 和 GPT 分区表)
本文在实际操作中尝试了若干方法,但最终只有两种方法相对成功。为了便于有意探索的读者进行研究,未完成的方法将在“未竟事项”部分列出。
服务器环境

首先将服务器重置为 Rocky Linux 9,该发行版在服务器市场占据主流地位,通常由大多数厂商提供。
救援登录

本文描述的大部分操作通过 VNC 连接(救援登录)进行。

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

救援登录如上所示。可通过右上角的“复制命令”将较冗长的命令复制到系统内部。
验证服务器是否处于 UEFI 环境
本文针对 UEFI 启动环境和 GPT 分区表,因此必须首先确认服务器是否处于该环境。由于不同服务器环境存在差异,本节提供多种方法供读者参考。
通过系统固件判断当前系统是以 UEFI 还是 BIOS 模式启动:
通过 UEFI 启动项管理工具判断启动模式:
服务器的磁盘分区情况
通过文件系统类型与磁盘使用情况(同时请读者注意
/boot/efi)判断:
通过文件系统静态挂载配置判断:
查看块设备的 UUID 和文件系统类型:
探测指定块设备的文件系统信息:
BIOS Boot 分区用于兼容传统 BIOS 启动。
查看系统主机名及系统信息
查看网络信息
显示所有网络接口及其 IP 地址信息:
显示系统的路由表:
列出所有 PCI 总线及其设备信息:
通过裸磁盘映像安装 FreeBSD
警告
你将丢失所有数据,请做好备份工作再进行。经过测试,操作后,快照将可能无法正确回滚,但是自定义镜像可间接还原。
下载并写入 FreeBSD ZFS 镜像到 /dev/vda:
参数说明:
wget -qO- URL:-q静默模式,不显示下载过程;-O-将下载内容输出到标准输出(stdout)xzcat:解压 xz 格式文件,并将解压后的内容输出到标准输出dd of=/dev/vda:将输入写入/dev/vda设备,注意不是某个分区,是对整块磁盘进行写入。bs=4M:设置块大小为 4MB,提高写入效率status=progress:显示 dd 的写入进度

随后使用阿里云网页上的“更多操作”,再选择里面的“重启”

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

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

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

请在该界面输入 set kern.maxphys=65536,设置内核最大物理 I/O 大小为 65536 字节,大块 I/O 有时会触发驱动或缓存问题,并按回车键进行确认,再输入 boot 按回车键方可正常启动。
随后正常执行安装流程即可,选择 ZFS 分区方式。

待 FreeBSD 系统完全启动后:在引导加载器配置文件中永久性设置最大 I/O 缓冲区大小:
如果不进行上述设置,系统下次开机时仍可能卡在引导界面。
再列出 FreeBSD 系统磁盘分区表及分区信息:
观察发现,系统已自动扩展磁盘容量。
再查看 FreeBSD 系统网络接口信息:
可通过 ping 常用网站,确认网络连接正常。
显示内核启动信息和内核日志:
通过 mfsBSD 间接安装 FreeBSD
mfsBSD 是一款精简的 FreeBSD 内存盘映像,支持 UEFI 和 ZFS 环境。可用于安装 FreeBSD,充当急救盘等。mfsBSD 的下载地址为:mfsBSD and mfslinux。
警告
请勿选择任何带后缀的版本,如
special edition或mini edition。参见故障排除部分。
通过 WinSCP 将 mfsBSD ISO 镜像传入 Rocky Linux:

将 mfsBSD ISO 镜像写入 /dev/vda(块大小 4MB,并显示进度):
强制重启实例,启动到 mfsBSD。在启动到启动项菜单界面时,参照上节配置 kern.maxphys,否则将无法正确识别硬盘。
警告
不可使用精简系统
mfsbsd-mini-14.2-RELEASE-amd64.iso进行代替,将无法调整可调参数kern.maxphys,进而造成启动失败。
手动指定可调参数后仍然失败。
完全启动后,输入密码登录到 root 账户,密码是 mfsroot。
观察 mfsBSD 磁盘分区情况:
注意到,大部分分区都被标记为了 [CORRUPT],这会影响系统的安装。因此必须先修复 GPT 分区表:
UFS 安装
执行 bsdinstall 开始安装即可,流程可参见本章其他相关文章。

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

ZFS 安装
在 Shell 界面,执行以下命令,手动加载 zfs 内核模块:
无任何信息输出则加载成功。
还可以用以下命令验证 zfs 模块的加载情况:
如果有相关输出,则可以继续输入命令 bsdinstall,继续正常的安装流程。
本次实验的机器仅有 1G 内存,在 mfsBSD 占用约 100M 后,可用内存只有不到 800M。因此指定 ZFS 安装会报错“Distribution extract failed”(分发文件解压失败):

让我们来看看实际发生了什么,按 Ctrl + C 键,退回到 Shell 界面,通过以下命令观察:
“failed to reclaim memory”表示内存回收失败。解压进程 1562 被强制终止,显然是内存不足导致的。
待进一步测试,感兴趣的读者也可以在测试后提交 PR。
故障排除与未竟事项
安装过程中报错 sysctl: unknown oid 'vfs.zfs.min_auto_ashift'
sysctl: unknown oid 'vfs.zfs.min_auto_ashift'分析报错信息:从字面理解,这是一个设置 zfs 4k 对齐的可调参数,报错指出该参数是未知的。因此首先将问题定位到 zfs 模块。
通常是由于未预先手动加载 zfs 内核模块引发的。
解决方法,按照上文所述,执行命令 kldload zfs 手动加载内核模块。
这可能是一个长期存在但难以复现的 Bug,参见 Bug 249157 - installer reports sysctl: unknown oid 'vfs.zfs.min_auto_ashift' when ZFS module not loaded。
文件系统不支持在线压缩
EXT2、EXT3、EXT4、Btrfs 和 XFS 文件系统均不支持在线压缩。目前对此尚无解决方案。
找不到 UEFI 启动项,启动后直接进入 UEFI Shell

确认所选镜像确实支持 UEFI 启动,例如 mfslinux 和 TinyCore-current.iso 不支持 UEFI 启动。
找不到根分区
应将镜像写入整个磁盘(例如 /dev/vda),而非单个分区(例如 /dev/vda2),否则可能出现如下错误:

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

通过 Ventoy 安装 FreeBSD
Ventoy 是新一代多系统启动 U 盘解决方案,其项目官网地址为 Ventoy。
基本思路是通过内存盘系统将 Ventoy 写入整个硬盘,然后将 Ventoy 创建的容量较大的磁盘分区挂载到内存盘,再将 FreeBSD 系统写入该磁盘分区。
随后强制重启实例,启动到 Ventoy 进行系统安装。
Ventoy 使用方法
从南京大学镜像站下载 Ventoy 的 Linux 压缩包:
在当前目录解压 Ventoy 的文件和目录:
安装 Ventoy 到硬盘:

Ventoy2Disk.sh 参数说明:
-I:强制安装-g:使用 GPT 分区表
通过命令来验证 Ventoy 安装情况:

读者可通过 Linux 系统安装 Ventoy —— 命令行界面了解更多信息。
使用 Ventoy LiveCD 写入 Ventoy
Ventoy LiveCD 下载地址为 安装包。
Ventoy LiveCD 并非 Ventoy 本体,而是一种用于安装 Ventoy 的内存盘系统映像。参见 Ventoy LiveCD 使用说明。
在使用 dd 将镜像写入整块硬盘后,强制重启实例,Ventoy LiveCD 可以正常启动。

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

将 Ventoy 安装到整块磁盘中。

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

Ventoy 目前不支持在线下载 ISO 镜像文件。
于是我们陷入了一种困境。
因此,需要使用其他内存盘在启动 Ventoy 之前,将镜像写入硬盘。
使用 TinyCorePure64 写入 Ventoy
TinyCorePure64 属于 Core 项目,该项目旨在提供高度模块化的系统,同时支持社区自定义构建。
TinyCorePure64 能够在启动后完全载入内存,同时重启后亦将丢失所有数据。
TinyCorePure64 下载地址是 x86 Pure 64,进入页面后点击“Core Pure 64 Latest Build”选择“TinyCorePure64-16.2.iso”或类似版本下载即可。
注意
不要错误地下载“CorePure64”,CorePure64 并不支持 UEFI 启动环境。
强制重启实例以启动到 TinyCorePure64。

选择最后一项“corew”,因为默认图形界面(tc)在通过 VNC 执行命令时可能出现异常。同时,其 GUI 下无法运行 Ventoy GUI,这是由于 libc 格式不兼容所致。
观察分区情况:

详细看看:

由于 TinyCorePure64 是精简发行版,缺少许多 Ventoy 所需工具,因此需要手动安装。
配置 Tiny Core Linux 镜像源地址,指定使用网易开源镜像站作为下载源:
安装 exFAT 工具、分区工具、FAT 文件系统工具、Linux 工具集及证书组件:
技巧
该包管理器无法在 root 权限下运行。
参照上述章节内容,将 Ventoy 安装到整块磁盘上。然后挂载 Ventoy 生成的磁盘到内存盘。
使用指定用户代理从镜像站下载 FreeBSD 15.0 Bootonly ISO 镜像至 Ventoy:
强制重启实例到 Ventoy。

在引导菜单中设置可调参数 kern.maxphys 后,继续启动 FreeBSD 系统。
列出磁盘分区情况:

磁盘处于只读状态,无法进行任何操作,包括删除分区表、格式化或使用 dd 写零。
均报错如下:
因此无法执行任何安装操作。
附录:可能会用到的实用命令
卸载 EFI 分区示例:
将 EFI 分区重新格式化为 FAT32 文件系统:
查看 /dev/vda2 分区的文件系统类型:
最后更新于

