Skip to content

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

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

安装前,请在原有的 Linux 系统中查看 IP 地址和子网掩码。

可使用命令 ip addrip route show 查看网关信息及最大传输单元(MTU)数值,同时注意子网和 CIDR 表示法。

由于部分服务器未启用 DHCP 服务,可能需要手动配置 IP。

3.6.1 视频教程

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

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

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

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

警告

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

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

需要下载 img 格式的 mfsBSD 镜像,可提前下载后通过 WinSCP 上传至服务器;若直接在服务器上下载,可能耗时较长(约两小时)。

3.6.3 取消隐藏的 GRUB 菜单

目前大多数 Linux 发行版的 GRUB 菜单默认隐藏,需开机时按 Esc 键调出,但该操作有时会直接进入 BIOS 设置界面。

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

bash
# grub2-editenv - unset menu_auto_hide

3.6.4 使用 mfsLinux 写入 mfsBSD

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

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

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

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

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

技巧

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

GRUB 命令行界面

在启动此 initrd 后,不会加载硬盘上的原系统,而是自行配置网络并启动 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 镜像
# dd if=mfsbsd-se-14.2-RELEASE-amd64.img of=/dev/vda # 请确认你的硬盘设备是否为 /dev/vda
# reboot # 重启系统

技巧

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

3.6.5 安装 FreeBSD

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

例如 https://mirrors.ustc.edu.cn/freebsd/releases/amd64/15.0-RELEASE/https://mirrors.nju.edu.cn/freebsd/snapshots/amd64/16.0-CURRENT/

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

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

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

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

3.6.6 故障排除与未竟事宜

3.6.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 命令报错

3.6.6.2 LVM 逻辑卷

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

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

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

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

3.6.6.4 未成功的方案

3.6.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 等命令。

3.6.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 内核镜像
initrd (hd0,gpt2)/bsd.iso          # 指定初始 RAM 磁盘映像
boot                               # 输入 boot 后回车以启动系统

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

3.6.6.4.3 方案三

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

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

3.6.6.4.4 方案四

直接写入 EFI 分区。

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

3.6.6.4.5 方案五

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

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

3.6.6.4.6 方案六

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

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

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

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

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

3.6.7 参考文献