我有一个 Linux 设置,使用 GRUB 以 UEFI 模式启动。我想尝试 OpenBSD,但不幸的是它还不支持 GPT 或 UEFI,因此我使用传统 MBR 表对驱动器进行分区,并使用其安装 CD 将 OpenBSD 安装到该磁盘。
然后我尝试以典型的 GRUB 方式链式加载 OpenBSD 引导加载程序:
menuentry "OpenBSD" {
insmod part_msdos
insmod chain
set root=(hd1,4)
chainloader +1
}
但我遇到了“无效的 EFI 文件路径”。
首次以 EFI 模式启动后,是否可以链式加载 BIOS 引导程序?我可以回到在主板的启动菜单中选择要从中启动的驱动器,但 GRUB 菜单项显然更可取。
答案1
据我所知,没有。而你能使用 MBR 分区磁盘在 UEFI 中,您不能使用 BIOS (MBR) 格式的引导加载程序,因为它们需要在几乎“全新”的系统中运行,而不是在 UEFI 准备的环境中运行。因此 GRUB.efi 甚至不会尝试启动一个;它只要求您提供 .efi 路径。
答案2
你不能用 GRUB 做你想做的事,但是你能至少对于大多数基于 UEFI 的计算机来说,可以通过至少两种其他方式执行此操作:
- 您可以使用固件的内置启动管理器。通常,您可以在启动过程的早期通过功能键访问它。它应该提供用于启动您已安装的任何 EFI 模式启动程序(例如 GRUB,可能通过以您的发行版命名的选项)和其他一些程序(例如外部媒体、网络启动和 BIOS/CSM/传统模式启动的选项)的选项。不过,显示的内容在不同的机器上会有很大差异。
- 你可以使用我的rEFInd 启动管理器。您需要在 Linux 中安装它,然后编辑文件
refind.conf
:取消注释该scanfor
行并确保这hdbios
是其中一个选项。您可能还需要取消注释该uefi_deep_legacy_scan
选项,但这取决于您的固件。如果生成了太多选项,您可以使用该选项修剪列表dont_scan_volumes
。您可以使用 USB 闪存驱动器版本尝试它而不安装它,但您需要编辑其refind.conf
文件。
请注意,这两个选项都依赖于固件是否具有灵活的兼容性支持模块 (CSM)。大多数基于 UEFI 的现代系统都有这样的 CSM,但一些(大多数是较旧的)实现实际上是在 BIOS 之上构建 UEFI,而不是为 UEFI 提供 CSM。这些较旧的系统无法如此轻松地切换。