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