github编辑

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

本文在实际操作中尝试了若干方法,但最终只有两种方法相对成功。为了便于有意探索的读者进行研究,未完成的方法将在“未竟事项”部分列出。

服务器环境

Rocky Linux 9

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

救援登录

Rocky Linux 9

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

Rocky Linux 9

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

Rocky Linux 9

救援登录如上所示。可通过右上角的“复制命令”将较冗长的命令复制到系统内部。

验证服务器是否处于 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 ZFS 镜像到整块硬盘

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

强制重启实例

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

重启实例

执行强制重启以进入 FreeBSD。

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

初次启动的 FreeBSD 系统

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

调整可调参数

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

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

安装 FreeBSD 系统

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

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

再列出 FreeBSD 系统磁盘分区表及分区信息:

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

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

可通过 ping 常用网站,确认网络连接正常。

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

通过 mfsBSD 间接安装 FreeBSD

mfsBSD 是一款精简的 FreeBSD 内存盘映像,支持 UEFI 和 ZFS 环境。可用于安装 FreeBSD,充当急救盘等。mfsBSD 的下载地址为:mfsBSD and mfslinuxarrow-up-right 备份arrow-up-right

警告

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

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

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

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

警告

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

mfsbsd-mini 启动界面

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

mfsbsd-mini 启动界面

完全启动后,输入密码登录到 root 账户,密码是 mfsroot

观察 mfsBSD 磁盘分区情况:

注意到,大部分分区都被标记为了 [CORRUPT],这会影响系统的安装。因此必须先修复 GPT 分区表:

UFS 安装

执行 bsdinstall 开始安装即可,流程可参见本章其他相关文章。

UFS 安装

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

UFS 安装

ZFS 安装

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

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

还可以用以下命令验证 zfs 模块的加载情况:

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

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

Distribution extract failed

让我们来看看实际发生了什么,按 Ctrl + C 键,退回到 Shell 界面,通过以下命令观察:

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

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

故障排除与未竟事项

安装过程中报错 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 loadedarrow-up-right

文件系统不支持在线压缩

EXT2、EXT3、EXT4、Btrfs 和 XFS 文件系统均不支持在线压缩。目前对此尚无解决方案。

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

找不到 UEFI 启动项

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

找不到根分区

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

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

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

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

通过 Ventoy 安装 FreeBSD

Ventoy 是新一代多系统启动 U 盘解决方案,其项目官网地址为 Ventoyarrow-up-right 备份arrow-up-right

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

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

Ventoy 使用方法

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

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

安装 Ventoy 到硬盘:

Ventoy2Disk.sh 参数说明:

  • -I:强制安装

  • -g:使用 GPT 分区表

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

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

使用 Ventoy LiveCD 写入 Ventoy

Ventoy LiveCD 下载地址为 安装包arrow-up-right 备份arrow-up-right

Ventoy LiveCD 并非 Ventoy 本体,而是一种用于安装 Ventoy 的内存盘系统映像。参见 Ventoy LiveCD 使用说明arrow-up-right 备份arrow-up-right

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

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

将 Ventoy 安装到整块磁盘中。

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

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

于是我们陷入了一种困境。

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

使用 TinyCorePure64 写入 Ventoy

TinyCorePure64 属于 Core 项目arrow-up-right 备份arrow-up-right,该项目旨在提供高度模块化的系统,同时支持社区自定义构建。

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

TinyCorePure64 下载地址是 x86 Pure 64arrow-up-right 备份arrow-up-right,进入页面后点击“Core Pure 64 Latest Build”选择“TinyCorePure64-16.2.iso”或类似版本下载即可。

注意

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

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

启动到 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 分区的文件系统类型:

最后更新于