在 EFI 机器上从 GRUB4DOS 启动 ISO 映像

在 EFI 机器上从 GRUB4DOS 启动 ISO 映像

我无法从 USB 棒加载 GRUB2 的 ISO 映像(非发行版),但找到了启动 GRUB4DOS 并从那里加载映像的方法。然而,它并不总是有效,问题是为何没有

环境及加载流程:

我们需要有 EFI 机器、USB 棒、启动 ISO、GRUB2 和 GRUB4DOS。最后三个在 USB 棒上。启动:USB -> EFI 加载程序 -> GRUB2 -> GRUB4DOS -> ISO 映像

配置文件

要启动 GRUB4DOS,我使用 grub.cfg 中的以下内容:

菜单项“image.iso”{linux /syslinux/grub.exe --config-file="/menu.lst"}

我的 menu.lst 在这里:

超时 20

默认 0

标题图像.iso

查找--set-root--ignore-floppies--ignore-cd //image.iso

映射--heads = 0 --sectors-per-track = 0 //image.iso (hd32)

地图——钩子

链式装载机 (hd32)

这与传统机器完美兼容。

但是,当我进入 GRUB4DOS 时,我没有看到带有 image.iso 的菜单,我只看到 GRUB 命令行。这意味着我的 menu.lst 没有加载。

为什么会这样?

背景和想法

  1. 我认为 GRUB4DOS 无法将我的 USB 记忆棒识别为设备。我尝试了 find 命令,得到了 (hd0,0)、(hd0,1)、(hd0,2)、(rd)。当我尝试将 root 设置为这些设备中的任何一个时,我没有看到 fat 文件系统,就像 Legacy 机器一样。根设备是 (hd0,0),它具有 ntfs 文件系统,应该与 Windows 一起分区。
  2. EFI 机器仅支持 GRUB2,所以我无法立即启动 GRUB4DOS。
  3. 请不要提出这样的建议,因为我的图像没有内核。例如,你可以想象你加载了 HDAT2 或 Hiren 的启动 CD。

    菜单项“Blancco Blancco5.iso”{

    设置 isofile="/image.iso"

    环回循环$isofile

    设置根=(循环)

    linux /isolinux/vmlinuz isofile=$isofile splash quiet

    initrd /isolinux/initrd

    }

答案1

我认为问题在于,您的 GRUB4DOS 版本需要使用 BIOS 固件而不是 UEFI 固件运行。这很重要,因为它们各自提供访问磁盘的服务,但与这些固件类型的通信方式不同。所以是的,GRUB2 可以启动/执行 GRUB4DOS,但 GRUB4DOS 需要使用 BIOS 服务(例如 int 13)来访问磁盘,而 UEFI 不以这种方式提供磁盘服务(请参阅 UEFI 规范)。我不确定为什么 GRUB4DOS 甚至可以枚举您的磁盘。

GRUB4DOS 现在支持 UEFI。您可以找到版本这里。这应该允许您从等式中移除 GRUB2(尽管从 GRUB2 链式加载它可能总体上可以提供更大的灵活性)。

答案2

无论如何,GRUB4DOS 无法在 EFI 环境中工作。它需要 BIOS!

相关内容