我想创建一个可用于启动多个 iso 文件的 USB 记忆棒。我想通过 uEFI 来做到这一点。
U 盘看起来像这样:
/EFI
/bootx64.efi
/something.conf
/isos
/foo.iso
/bar.iso
...
这里/isos
保存着一堆 uEFI 可启动 iso 文件。据我了解,这些 isos 有一个/EFI/BOOT<some arch>.efi
uEFI booloader 通常会执行的文件。
驱动器上/EFI/bootx64.efi
有一些待确定的efi booloader以及/EFI/something.conf
它的配置文件。
我需要的是一些 uEFI 可执行文件,它可以以某种方式/EFI/BOOT<some arch>.efi
在 iso 文件之一中调用。我不知道这在理论上是否可行。
我知道可以使用 GRUB2 完成类似的操作,但它需要指定 linux 映像、其选项和 initrd 文件。这与另一个 iso 不同,有时,它根本不起作用。我希望通过调用/EFI/BOOT<some arch>.efi
,我不必指定这些,并且我可以有一个方法来启动任何 iso 映像。
我的问题是:是否有 uEFI 引导加载程序可以让我调用位于 iso 文件内的 EFI 可执行文件?
答案1
答案2
当直接从 ISO 启动时,一旦加载了 linux 内核,它就需要从 ISO 内部获取 squashfs。为此,Linux 内核和脚本需要将 ISO 挂载为循环设备。为此,它需要知道 ISO 文件的路径和文件名。完整路径通常在内核参数中指定,例如iso-scan/filename=/images/ubuntux64.iso
某些 Ubuntu ISO 包含一个/boot/grub/loopback.cfg
文件,并且这些文件期望 grub2 变量已预设为 ISO 文件的完整路径。
因此,对于这些 ISO 文件,我们有一种通用的方法来引导它们 - 只需使用 ISO 文件的完整路径设置 grub2 变量并运行该loopback.cfg
文件即可。
因此,可以有一个grub2.cfg
文件列出文件夹中的所有 ISO 文件/images
,并允许用户选择其中一个并启动它。唯一的问题是它们需要包含 /boot/grub/loopback.cfg
文件,而很少有非 Ubuntu ISO 会这样做!
如果只有更多的发行版开发人员在他们的 ISO 中包含一个loopback.cfg
文件,那么您想要的就可以实现!
http://www.rmprepusb.com/tutorials/136_uefi_ubuntu可能有帮助。还http://rmprepusb.blogspot.co.uk/2017/02/make-generic-grub2-boot-menu-using.html
答案3
是和不是。您可以启动到预启动环境(grub
、iPXE 等)但这样做实际上只会让事情变得复杂。大多数现场光盘都没有您正在谈论的文件 - 不完全是这样。大多数 iso 混合磁盘所做的类似于此处另一个答案中所描述的内容 - 它们安装一个映像文件,其中真正的可执行文件位于 ram 磁盘中的循环设备上,然后调用该内核。所有这些复杂性的重点应该是与 BIOS 系统的兼容性。如果这不是您所关心的,您可能会更好地从每个 iso 中提取一些文件并直接启动。在 EFI 系统上 - 因为在这种情况下固件就是您的引导加载程序。
所以你需要的是一个 FAT 格式的 U 盘。你可以挂载有问题的iso,找到他们的x86.sfs
根映像文件,找到其 initramfs 和内核(您可能需要在 iso 挂载中循环挂载另一个映像)- 就是这样。 Linux 内核是 EFI 可执行文件 - 您不需要引导加载程序,因为固件可以执行您的内核。内核的第一个根文件系统是从 initramfs 映像挂载的。接下来是 .sfs 存档。这就是它的工作原理。
这里有点模糊,但是有一个非常详细的使用 Arch Linux 安装介质执行类似操作的演练这里。
(一般情况下,该过程因分布而异)