独立 Grub2 EFI 安装 - grub.cfg 放置位置?

独立 Grub2 EFI 安装 - grub.cfg 放置位置?

我正在尝试在独立模式下将 Grub2 用作 EFI 系统上的启动管理器。(唯一的永久硬盘上有 OS X;Linux 和 Windows 驱动器有时可能存在,有时也可能不存在,因此采用独立模式。)

我正在使用 SuperGrub2Disk,它是一个 EFI 可执行文件,据我所知,在此模式下,Grub2 的可执行文件有一个嵌入式磁盘映像,它将其挂载到其根分区,里面有它自己的配置文件的副本。

我想用外部 grub.cfg 覆盖或修改此配置文件。我尝试将其放在 grub EFI 可执行文件旁边或 ESP 分区的根目录中,但无法识别。我还尝试通过以下命令从 grub 命令行加载它:

configfile (hd3,gpt1)/grub.cfg

除了清除屏幕之外,这似乎没有任何效果 - 即使配置文件确实存在,正如 ls 所确认的那样。

有人能告诉我是否有办法将外部配置文件与 EFI 独立 blob 一起使用吗?

答案1

GRUB 2 二进制文件包含对其配置文件的硬编码引用。我并没有真正关注所有细节,但据我所知,在 AMD64/x86-64 系统上有两个适用于 Ubuntu 的 EFI GRUB 2 二进制文件:

  • grub2-efi-amd64-- 这是在计算机上使用的 GRUB 2 版本不是使用安全启动。据我了解,二进制文件本身链接到你的计算机中来自软件包中包含的预编译组件的二进制文件。生成的二进制文件引用grub.cfgLinux 安装/boot/grub目录中的文件。因此,您无法grubx64.efi在另一台计算机上使用从此软件包安装的二进制文件,因为该二进制文件是针对创建它的计算机定制的。
  • grub2-efi-amd64-signed-- 此版本的 GRUB 2 在 Canonical 系统上编译和链接,因此可以使用安全启动密钥对其进行签名。要求对二进制文件进行签名的一个副作用是它无法针对您的系统进行自定义,因此,此版本的 会grubx64.efi与 的二进制文件在同一个目录中查找grub.cfg。在 Ubuntu 系统上,此grub.cfg文件会搜索/boot/grub/grub.cfg,但原则上可以对其进行自定义以执行其他操作。

因此,您不能使用未签名的 GRUB 2 二进制文件;如果您想使用原版 Ubuntu GRUB 2 二进制文件,则必须使用签名的二进制文件。或者,您可以构建自己的二进制文件,如所述这里,以及其他地方。

不过,就你的情况而言,我认为 GRUB 2 并不是最佳选择。改装(现已废弃)以及我的分叉,rEFInd,具有动态扫描可用引导加载程序的功能。因此,如果您将 rEFIt 或 rEFInd 安装到您的内部磁盘 EFI 系统分区 (ESP)并将操作系统的引导加载程序放在各自的可移动介质上,rEFIt/rEFInd 将为您提供启动这些操作系统的选项,前提是且仅当插入了适当的磁盘时。但是,此行为将取决于对引导加载程序的正确管理,将每个引导加载程序放在其各自磁盘的 ESP 上;如果您的引导加载程序都存储在内部磁盘的 ESP 上,rEFIt/rEFInd 将始终显示不起作用的操作系统选项,就像 GRUB 2 一样。无论哪种情况,使用 rEFIt 或 rEFInd 都将避免深入研究手动 GRUB 2 配置的麻烦。

答案2

我希望 GRUB UEFI 映像能够读取并执行位于同一目录中的 grub.cfg,它们通常都存储在 ESP 上,但我对 Mac 设置了解不多。(另一方面,嵌入式配置的功能非常有限。)

也许自己创建 GRUB 映像而不使用嵌入式配置可以让您更进一步找到解决方案,这些帖子可能会有所帮助:

答案3

可以创建一个独立的 GRUB 2 UEFI 应用程序,其中包含一个独立的 GRUB 2 安装,该安装可读取与应用程序二进制文件位于同一目录中的配置文件。

这个过程是Arch Linux wiki 中描述了,但可以在任何分布上进行(只要路径进行相应调整)。

相关内容