Skip to content

18.3 腾讯云轻量云安装 FreeBSD(传统引导和 MBR 分区表)

本节演示在不依赖额外安装介质的前提下,借助腾讯云轻量云已有的 Linux 系统,通过本地硬盘完成 FreeBSD 的安装与部署。

安装前,请在现有 Linux 系统中记录 IP 地址、子网掩码、网关信息以及最大传输单元(MTU)数值,并注意子网和 CIDR 表示法。可使用命令 ip addrip route show 查看相关信息。

18.3.1 视频教程

FreeBSD 中文社区. 08-腾讯云轻量云及其他服务器安装 FreeBSD[EB/OL]. [2026-04-04]. https://www.bilibili.com/video/BV1y8411d7pp.

视频内容与文字教程可能存在差异,可选择其中一种方式操作。SCP 命令可以使用图形化工具 WinSCP 替代。安装完成后,建议按照其他章节设置密钥登录并禁用密码验证,以提升安全性。

18.3.2 腾讯云轻量云及阿里云轻量应用服务器介绍

腾讯云轻量应用服务器(即腾讯云轻量云) 以及 阿里云轻量应用服务器 均未提供 FreeBSD 系统支持,只能通过特殊方法手动安装。

警告

请注意数据安全。本节操作具有一定风险,且要求具备相应的操作能力。

上述服务器的管理面板未提供 FreeBSD 镜像,因此需要采用变通方法安装。由于 FreeBSD 与 Linux 在内核及可执行文件格式上不兼容,无法在 chroot 后删除原系统来安装。安装方法为:首先在内存盘中启动 FreeBSD 系统(即先引导 mfsBSD),随后格式化硬盘并安装新系统。mfsBSD 是完全载入内存的 FreeBSD 系统,类似于 Windows PE(Preinstallation Environment)环境。

需要下载 img 格式的 mfsBSD 镜像(可从 mfsBSD 官方下载页 获取,选择 USB memstick images 中对应版本的 special edition),可提前下载后通过 WinSCP 上传至服务器;如果直接在服务器上下载,可能耗时较长(约两小时)。

18.3.3 取消隐藏的 GRUB 菜单

部分 Linux 发行版(如 Fedora、Ubuntu 23.10+)的 GRUB 菜单默认隐藏,需开机时按 Esc 键调出,但该操作有时会直接进入 BIOS 设置界面。

因此,直接取消 GRUB2 菜单的自动隐藏设置更为便捷:

bash
# grub2-editenv - unset menu_auto_hide

18.3.4 使用 mfsLinux 写入 mfsBSD

由于 FreeBSD 与 Linux 生态不同,需要先引导至一个运行在内存中的 Linux 环境,在该环境中将 mfsBSD 写入硬盘,最后通过 bsdinstall 工具完成系统安装。

在 mfsBSD 下载页面的下方,可找到 mfsLinux,即所需的 Linux 环境。由于该文件仅提供 ISO 格式,无法在当前环境下直接启动,而该环境基于 initramfs 架构,需要从中提取内核和 initramfs 文件,存放于硬盘并进行手动引导。

在典型的 Linux 系统中,initramfs 是一个打包为 cpio 归档的精简根文件系统,内含驱动程序、挂载工具以及启动初始化程序所必需的数据。开机时,引导加载程序(Bootloader)加载内核与 initramfs,随后由 initramfs 中的脚本执行启动准备,最后将控制权移交给硬盘上的初始化程序。

首先,将从该 ISO 中提取的内核和 initramfs 文件放置于根目录。重启机器并进入 GRUB 命令行界面(可在引导倒计时时按 e 键进入编辑模式,删除原有 linuxinitrd 行的内容并修改,完成后按 Ctrl+X 启动)。手动指定要启动的内核与 initramfs(可使用 Tab 键补全路径)。输入 boot 并按回车继续启动,也可按 c 键进入 GRUB 命令行模式。

sh
linux (hd0,msdos1)/vmlinuz       # 指定内核文件路径
initrd (hd0,msdos1)/initramfs.igz  # 指定初始 RAM 磁盘映像文件路径
boot # 输入 boot 后按回车继续启动

技巧

分区标识不一定是 (hd0,msdos1),请以实际情况为准。注意切勿误删过多内容导致无法辨识。

GRUB 命令行界面

在启动此 initramfs 后,不会加载硬盘上的原系统,而是自行配置网络并启动 SSH 服务器。由此获得一个运行在内存中的 Linux 系统。

此时应可通过 SSH 连接到服务器,并安全地格式化硬盘。

mfsBSD 和 mfsLinux 镜像的默认 root 密码均为 mfsroot

警告

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

sh
# cd /tmp # 切换至临时目录
# wget https://mfsbsd.vx.sk/files/images/14/amd64/mfsbsd-se-14.2-RELEASE-amd64.img # 下载 mfsBSD 镜像(URL 以官网实际提供为准)
# dd if=mfsbsd-se-14.2-RELEASE-amd64.img of=/dev/vda # 请确认硬盘设备是否为 /dev/vda
# reboot # 重启系统

技巧

建议在此处使用服务器的“快照”功能进行备份,以防后续操作失误导致重装,造成时间损失。

18.3.5 安装 FreeBSD

通过 SSH 连接服务器后,执行 kldload zfs 加载 ZFS 模块,随后运行 bsdinstall。出现图示界面时,选择 Other 并输入指定的镜像地址(地址中包含相应版本号即可,可自行更改):

例如 https://mirrors.ustc.edu.cn/freebsd/releases/amd64/15.0-RELEASE/https://download.freebsd.org/snapshots/ISO-IMAGES/16.0/

腾讯云轻量云及其他服务器安装 FreeBSD

腾讯云轻量云及其他服务器安装 FreeBSD

腾讯云轻量云及其他服务器安装 FreeBSD

  • 也可以手动下载 FreeBSD 的安装文件,以 MANIFEST 文件为例:
sh
# mkdir -p /usr/freebsd-dist # 创建目标目录
# cd /usr/freebsd-dist # 进入该目录
# fetch https://download.freebsd.org/releases/amd64/14.2-RELEASE/MANIFEST # 下载 MANIFEST 文件

18.3.6 故障排除与未竟事宜

18.3.6.1 为何不能直接使用 dd?(错误示范,仅供说明,请勿执行)

警告

以下命令仅为错误示范,切勿执行。dd 写入块设备将覆盖磁盘上所有现有数据,操作不可逆。

在正常的 Linux 系统中,若直接将 mfsBSD 的 img 镜像通过 dd 写入硬盘,重启后虽能正常加载引导程序,但可能因系统对硬盘的后续写入操作导致无法正常挂载内存盘。

下载 mfsBSD 镜像并写入 /dev/vda

sh
# wget https://mfsbsd.vx.sk/files/images/13/amd64/mfsbsd-se-13.1-RELEASE-amd64.img -O- | dd of=/dev/vda

解释:

  • | 是管道符号,将上一条命令的标准输出作为下一条命令的标准输入。
  • -O- 选项指示 wget 将文件下载并输出到标准输出;dd 在未指定 if 参数时会自动从标准输入读取数据。

直接执行此 dd 命令将提示错误,如图所示:

dd 命令报错

18.3.6.2 LVM 逻辑卷

如果云服务器使用了 LVM,需要将所有与引导相关的文件放置于 /boot 分区内,否则可能无法正确识别。

18.3.6.3 腾讯云轻量应用服务器可能无法获取 IPv6 地址

腾讯云 IPv6 地址的分配方式并非标准实现,而是采用自定义的子网方案。

腾讯云 IPv6 可能由专有服务提供,此问题尚待确认。

18.3.6.4 未成功的方案

18.3.6.4.1 方案一

在 UEFI 模式下:

sh
set iso=(hd0,gpt2)/bsd.iso          # 指定 ISO 文件路径
loopback loop $iso                  # 将 ISO 文件挂载为 loop 设备
set root=(loop)                     # 设置 GRUB 根目录为 loop 设备
chainloader /boot/loader.efi        # 加载 EFI 引导加载程序
boot # 输入 boot 后按回车继续启动

此方法失败。该操作并非将镜像挂载为内存盘,虽可引导,但 FreeBSD 启动过程中将提示错误,无法找到启动文件。

此外,UEFI 模式下,GRUB2 不提供 linux16kfreebsd 等命令。

18.3.6.4.2 方案二

在传统 BIOS 引导方式下进行。

  • 安装 syslinux

  • 需安装 syslinux 软件包以获得 MEMDISK 支持。

bash
# dnf install syslinux

警告

GRUB2 自带的 memdisk.mod 模块并非 MEMDISK。必须安装 syslinux 包才能获得 MEMDISK 工具。

  • 复制到 /boot
sh
# cp /usr/share/syslinux/memdisk /boot/

进入 GRUB 命令行:

sh
ls                                # 列出所有磁盘和分区
ls (hd0,gpt2)/                     # 列出 (hd0,gpt2) 分区下的内容。MBR 分区表下可能为 (hd0,msdosx),以实际情况为准
linux16 (hd0,gpt2)/memdisk iso     # 指定 memdisk 内核镜像
initrd16 (hd0,gpt2)/bsd.iso         # 指定初始 RAM 磁盘映像
boot                               # 输入 boot 后回车以启动系统

上述方法可能适用于 BIOS 搭配 MBR 分区表,但 GPT 分区表下测试失败。

18.3.6.4.3 方案三

缩小 Linux 的根分区(/),直接将 FreeBSD 的 img 镜像通过 dd 写入新分区。

因为 XFS 文件系统不支持在线缩小(红帽系列发行版通常采用 XFS 搭配逻辑卷管理),此方案不可行。

18.3.6.4.4 方案四

直接写入 EFI 分区。

此方案不可行,EFI 系统分区(ESP)的大小通常有限制。

18.3.6.4.5 方案五

GRUB 不支持将 ISO 镜像挂载为内存盘,但其他引导程序可能可以实现这一功能。

目前尚未找到可行的方案。

18.3.6.4.6 方案六

对于支持在线调整的文件系统,可压缩出约 2 GB 的未分配空间,创建一个 FAT32 分区,再将 img 镜像用 dd 命令写入该分区。

在 GRUB 中,使用 chainloader +1 指向 dd 操作后生成的 BSD EFI 系统分区。需注意,一般的云服务器默认可能使用文件作为交换空间(swapfile),也可尝试直接将 img 镜像 dd 到交换分区。

对于无法压缩分区的情况,可以临时购买并挂载一块数据盘,将镜像 dd 到数据盘。随后通过数据盘上的安装程序进行系统安装。安装完成后卸载并删除数据盘。

潜在的问题在于 img 镜像可能无法正确识别分区,可能需要手动指定根文件系统。

部分发行版并不使用 GRUB,此时需要考虑是安装 GRUB,还是直接通过 systemd-boot 等引导程序处理,以及可行性如何。

18.3.7 参考文献