如果系统崩溃需要进入 Rescue(救援)模式,本地硬盘上有没有 EFI 分区,对“能否进入救援模式”没有任何影响,但它会极大地改变你“如何修复系统”的流程。
在评估它是否有帮助之前,我们需要厘清救援模式的工作原理。
1. 救援模式是怎么启动的?
当你从服务商面板点击“进入救援模式”时,宿主机(比如你的 bhyve 环境)会完全绕过你本地硬盘的引导扇区或 EFI 分区。它会通过网络(PXE)或挂载一个虚拟的 Live CD 镜像(比如基于 Debian 的救援系统)直接加载到内存中启动。
因此,在系统出问题、硬盘无法引导的最坏情况下,EFI 分区帮不上忙,它自己往往就是需要被修复的那个对象。
2. 在 Rescue 模式下修复系统:EFI 与 BIOS 的对决
当你成功进入基于内存的救援系统,并通过 SSH 连进去准备修硬盘时,EFI 分区不仅不会让你更轻松,反而会增加操作步骤。
场景 A:传统的 BIOS/Legacy 引导 (使用 BIOS 引导保留区)
如果你按照之前的设定,建了一个 2M 的 BIOS 引导区,修复 GRUB 非常简单粗暴:
- 挂载根目录:
mount /dev/sda1 /mnt - 挂载 /boot(如果是独立分区):
mount /dev/sdaX /mnt/boot - 挂载虚拟文件系统:
for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt$i; done - 切换环境:
chroot /mnt - 一键修复:直接运行
grub-install /dev/sda,GRUB 会自动找到那个 2M 的保留区并写入引导代码。 - 更新菜单:
update-grub。搞定重启。
场景 B:UEFI 引导 (拥有独立的 EFI 分区)
如果你的系统是 UEFI 引导,修复流程会多出几个容易踩坑的环节:
- 挂载根目录和 /boot:同上。
- 额外挂载 EFI 分区:你必须明确知道哪个是 EFI 分区(通常格式为 vfat),并将其挂载到正确的挂载点:
mount /dev/sda15 /mnt/boot/efi(如果漏了这一步,或者挂载点错了,修复直接失败)。 - 挂载虚拟文件系统和
chroot:与上面相同,但有时还需要额外挂载/sys/firmware/efi/efivars才能让引导加载程序正确识别 UEFI 环境。 - 指定 Target 修复:你需要运行
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian。一旦参数输错,主板就找不到启动项。
3. 为什么在你的 VPS 环境下,没有 EFI 反而可能是好事?
结合你之前在 VNC 和终端里遇到的“黑屏”、“看不到 GRUB”、“安装向导隐藏 EFI 选项”等折腾经历,你的宿主机环境(bhyve)在处理串行控制台和 UEFI 固件的兼容性上,表现得极其“倔强”。
在这样的环境下:
- 容错率低:UEFI 依赖主板 NVRAM 中的启动项变量(efivars)。如果虚拟机发生迁移或服务商重置了底层配置,NVRAM 可能会被清空,导致即便 EFI 分区完好,系统也无法引导(变成了一块找不到启动项的“砖头”)。
- BIOS 更具鲁棒性:传统的 BIOS 引导不依赖主板 NVRAM 变量。只要那块硬盘(
sda)的开头有 GRUB 引导代码(放在那个 2M 的 BIOS boot area 里),无论怎么迁移,宿主机只要读这块盘,系统就能被强行拉起来。
总结
对于一台没有物理显示器、VNC 经常罢工、且宿主机控制权完全在服务商手里的云服务器来说,EFI 分区在灾难恢复时只会增加操作复杂度,而传统的 BIOS 引导结构(配合 GPT 分区表和 BIOS 引导保留区)在盲操和救援时是最皮实、最不容易出错的。