使用 grub2 链式加载 syslinux

使用 grub2 链式加载 syslinux

我创建了一个 syslinux/isolinux 混合 CD iso,可以根据需要启动旧版 bios 或 eufi。旧版 bios 部分运行良好,已经使用了很多年。我使用的是最新版本 (6.0.3) 的 syslinux。我使用从 rhel7 bood CD 中获取的 rhel7 efiboot.img 来启动 eufi 部分,只是作为测试。我能够在具有 uefi bios 的 VM 中启动此 CD iso。

这会让我进入 grub2 shell,这是预期的行为,因为我尚未创建可用的 grub.cfg(只是创建了映像文件附带的默认 grub.cfg)。所以至少我能够以 uefi 模式启动此 CD。

我正在尝试通过 grub2 shell 链式加载 syslinux.efi,以便查明我是否可以链式加载 syslinux(以及如何加载),然后查看它是否可以加载我用于旧式 BIOS 的菜单。

我尝试过各种 grub2 命令组合,但无论我怎么尝试,总是会出现此错误。搜索此错误并没有提供太多有用的信息

grub> set root='(cd0)'
grub> chainloader /syslinux/efi/syslinux.efi
grub> boot
Failed to locate root device to prep for file operations & ADV initialization
error: unknown error
grub>

我想知道这是否是 grub2 或 syslinux.efi 文件的问题,或者是完全不同的东西。

我认为我正在使用的 efiboot.img 不会有问题,因为它来自已知可以与 uefi 一起使用的 CD。

请注意,我认为“chainloader”命令将该文件视为 grub2 可能用来加载的文件。如果我使用其他文件或不存在的文件,则会收到以下错误:

grub> chainloader /isolinux/efi/libmenu.c32
error: cannot load image.
grub> chainloader /isolinux/efi/doesnotexist
error: file 'isolinux/efi/doesnotexist' not found.

编辑于 2019 年 8 月 9 日

我相信这在 syslinux 的当前版本 (6.03) 下实际上是不可能的。我采取的解决方法是使用 rhel7 启动映像并复制 EFI 目录,并以此为基础创建可启动的混合 CD,该 CD 可在 uefi 模式和传统 bios 模式下启动。要创建启动菜单,只需根据您的需要调整 EFI/BOOT/grub.cfg 文件即可。我认为这实际上使用了 gummiboot/systemd-boot。我使用相同的方法来配置 uefi 网络启动。

相关内容