EFI 和 GRUB2 在哪里获取二进制文件以及如何挂载启动系统

EFI 和 GRUB2 在哪里获取二进制文件以及如何挂载启动系统

UEFI 和 GRUB2


有谁知道可以获取二进制文件(bootia32.efi 和 bootx64.efi)来启动 grub2 的网站...
还有 GRUB2 二进制文件...以及关于此的良好教程帮助...

我想制作一个类似这样的多重启动盘......

EFI
    \BOOT
        \bootia32.efi
        \bootx64.efi
        \<grub-binaries>
        \<grub-background-image>
        \<grub-configuration-file>

    \AndroidX86v6
    \Microsoft
    \Ubuntu
    \Tails
    \Kali
    ...

答案1

名称bootx64.efibootia32.efi指的是 EFI 后备引导加载程序。此程序可以任何事物-- GRUB、Windows 引导加载程序、EFI shell、恶意软件等。因此,您不应该用该名称搜索程序;相反,您应该用程序的实际名称(问题中的 GRUB)搜索程序,然后在引导介质上将其重命名为EFI\BOOT\bootx64.efiEFI\BOOT\bootia32.efi(取决于平台)。事实上,如果您要安装到计算机的内置硬盘上,您可能根本不应该使用该名称 - 相反,您应该依靠 EFI 自己的内置引导管理器来记住要启动的二进制文件的名称。(例外情况是您的固件严重损坏,因为有些固件仍然如此。)boot{arch}.efi文件名最初专门用于可引导的可移动磁盘,例如用于操作系统安装程序和紧急恢复工具;但它们也用于内部硬盘上的最后手段引导加载程序 - 例如,当 NVRAM 条目已损坏时。

至于你问题的主要部分,GRUB 二进制文件往往是由各个发行版构建的;据我所知,没有针对 EFI 的“GRUB”二进制文件的官方来源。获取AGRUB 二进制文件用于安装使用它的 Linux 发行版。它通常会安装为/boot/efi/EFI/{distname}/grubx64.efi,其中{distname}是发行版使用的代码,比如ubuntuUbuntu 或fedoraFedora。但请注意,简单地移动和重命名此二进制文件可能不起作用,因为它可能有指向其配置文件的硬编码路径。如果目标计算机也使用安全启动,则需要将或shimx64.efi文件重命名shim.efi为后备文件名,并grubx64.efi使用该名称将复制到与 Shim 相同的目录中。如果要安装到一台计算机上,则无需费心移动或重命名 GRUB;只需正常安装,它就会接管启动过程 - 至少直到您安装下一个发行版或某些东西重新配置启动顺序为止。

对于具有多个 Linux 发行版的系统,GRUB 可能有点麻烦。这是因为 GRUB 依赖于复杂的配置文件来创建其启动选项菜单,并且该配置文件在安装 GRUB 的发行版中维护。当您只安装一个 Linux 发行版时,这可以正常工作,但是对于多个发行版,您必须在 GRUB 的发行版中更新它,以便显示从您的 Linux 发行版安装的新内核其他发行版。另一种方法是从一个 GRUB 链式加载另一个 GRUB,这种方法效果可能更好,但在启动时会比较麻烦。

另一种方法是使用涉及不太复杂配置的启动管理器。我自己的重新索引可以做到这一点;它在每次启动时都会检测 Linux 内核,因此一旦设置完成,它就可以启动最新的内核,而无需更改其自身的配置。其他引导加载程序(如 SYSLINUX 和 ELILO)需要在集中配置文件中进行 GRUB 样式的配置,但该文件更简单,因此更易于手动维护。如果您在可移动磁盘上使用这些工具中的任何一个,则需要将其复制到boot{arch}.efi文件名中。

所有这些还有许多其他注意事项和怪癖,但如果不了解您的预期用途和硬件,我就无法在这里详述它们,除非写一本小书。您可能需要查看以下一个或多个网站以获取更多信息:

答案2

如果您只是想使用 grub 进行 UEFI PXE 启动或 UEFI HTTP 启动,您可以在这里获取预构建的二进制文件,而无需任何安装: https://images.maas.io/ephemeral-v3/stable/bootloaders/uefi/amd64/20230222.0/

shim-signed.tar.xz
grub2-signed.tar.xz

解压后你将得到

bootx64.efi
grubx64.efi

然后准备一个TFTP服务器和HTTP服务器来为它们提供服务,并通过TFTP/HTTP准备grub/grub.cfg。

我已经成功使用上述方法。

还有另一个方便的地方让您无需任何安装即可获得它们。 http://archive.ubuntu.com/ubuntu/dists/jammy/main/uefi/grub2-amd64/current/

(你可以将 jammy 改为 focal 或 bionic)

...
grubnetx64.efi
grubnetx64.efi.signed
grubx64.efi
grubx64.efi.signed

我没有试过,我猜是grubnetx64.efi.signed指的网络版本grubx64.efi.signed。但我不清楚*.efi.signed 和 *.efi 的区别。

并且可以在这里找到 bootx64.efi http://archive.ubuntu.com/ubuntu/dists/jammy/main/signed/shim-amd64/current/,将解压后的文件重命名为bootx64.efi即可。

相关内容