使用自定义引导加载程序 ID 安装 grub,例如“MyUbuntu”

使用自定义引导加载程序 ID 安装 grub,例如“MyUbuntu”

我能够使用默认引导加载程序 ID 重新安装 grub”Ubuntu

但如果我使用自定义名称,如“Ubuntu“我无法成功安装 grub。

在启动良好的 Ubuntu 18.04 上测试安装:

1:删除现有的grub:

rm -r /boot/efi/EFI/*

2:安装新的grub:

grub-install --target=x86_64-efi --bootloader-id=MyUbuntu /dev/sda

2:更新grub:

update-grub

系统现在启动到 Grub 控制台。EFI 可以在启动菜单中正常看到新的启动项。

在此处输入图片描述 在此处输入图片描述

刚刚看了一下/boot/grub/grub.cfg,它仍然显示: menuentry 'Ubuntu' --class ubuntu.....

答案1

在我遇到systemd-boot作为引导加载程序,我从未回头看过 GRUB。 systemd-boot在我看来,它更加稳定,配置方式也更好。我说的“稳定”是指它不像 GRUB 那样脆弱。GRUB 很容易被破坏。只要在机器上添加一个新磁盘就可能给你带来大麻烦(因为可能有相同的引导加载程序 ID,而你无法更改等等)。

唯一的缺点systemd-boot是缺乏安全启动支持,但这对我来说不是问题,并且你的内核必须位于 EFI 分区,而不是根分区,就像 GRUP 的情况一样。

systemd-boot我重新获得了对启动过程的完全控制权……是的

它应该是默认的引导加载程序,而不是 GRUB。

更新, 如何操作(Debian/Ubuntu):(
这是一个相当肤浅的指南,但我希望它能帮助你入门。其他来源:阿里云免费桌面..自述..

1:首先将内核文件从根分区(例如/boot/vmlinuz-4.9.0-8-amd64/boot/initrd.img-4.9.0-8-amd64)复制到 EFI 分区。您可以将其放在您选择的子文件夹中,或者如果您愿意,甚至可以放在根文件夹中。

2:许多指南都说您需要访问 EFI 变量,但我不确定是否需要。但要测试您是否有,请运行efivar --list
如果缺少,请安装:apt install efivar

3: 安装systemd-boot加载程序到 EFI 分区:(bootctl --path=/mnt/efi install使用您自己的已安装 EFI 分区的路径)

4:将文件编辑/mnt/efi/loader/loader.conf为类似以下内容:

timeout 5
# default 6a9857a393724b7a981ebb5b8495b9e-*

(还没有弄清楚如何在文件中使用自动添加的 UUID,所以我只是将其标记出来)

5:每个文件对应/mnt/efi/loader/entries/*.conf于启动项中的systemd-boot菜单。因此,要添加当前操作系统,请创建一个如下所示的文件:

title      Debian 9 :-)
linux      /debian9/vmlinuz-4.9.0-6-amd64
initrd     /debian9/initrd.img-4.9.0-6-amd64
options    root=UUID=084917b7-8be2-4e86-838d-f771a9902e08`

(修改您在步骤 1 中复制的内核文件的路径。将 UUID 修改为根分区的文件系统 UUID(使用 Linux 命令lsblk -o name,uuid

基本信息:
启动控制将在你的 EFI 分区中安装两个引导加载程序文件:

../BOOT/BOOTX64.EFI
../systemd/systemd-bootx64.efi

这些文件是相同的。主板上的 EFI bios 必须引导/指向其中一个。可以直接在 BIOS 中执行此操作,也可以使用 Linux 命令efibootmgr....

要添加新的启动项,只需创建一个/mnt/efi/loader/entries/*.conf指向正确内核文件和根分区的新文件。

内核文件必须位于 EFI 分区 (FAT32) 上。EFI
分区的大小必须相应调整。我认为 Debian/Ubuntu 等操作系统的内核文件大约为 50-60MB。因此,如果您有两个安装,则需要 120MB。

答案2

作为gdeff 提及要使用自定义方式安装 Grub --bootloader-id,也可以使用选项--no-uefi-secure-boot。例如:

grub-install                \
  --target=x86_64-efi       \
  --no-uefi-secure-boot     \
  --bootloader-id=MyUbuntu  \
  /dev/sda

另外,请确保您的系统上已禁用安全启动。

解释

grub-install如果您想更好地理解、、和 SecureBoot之间的交互,您只需要阅读下面(不幸的是很长的)解释grubx64.efigrub.cfg

  • SecureBoot 将仅启动.efi由 Microsoft 加密签名的文件。
  • 在 Ubuntu 系统上,该文件/boot/efi/EFI/ubuntu/grubx64.efi通常来自以下两个地方之一:
  • 选项 1: grubx64.efi是 Canonical 提供的静态、不变、Microsoft 签名、与 SecureBoot 兼容的“二进制 blob”Grub 引导加载程序。这是默认选项。
  • 选项 2: grubx64.efi运行 时会在您的系统上创建grub-install。在这种情况下,grubx64.efi未签名,因此与 SecureBoot 不兼容。

使用选项 1 (Canonical 提供,兼容 SecureBoot grubx64.efi):

  • 通常会有两个grub.cfg文件。
  • 第一grub.cfg阶段/boot/efi/EFI/ubuntu/grub.cfg
  • 第二grub.cfg阶段/boot/grub/grub.cfg
  • 第 1 阶段文件包含查找和读取第 2 阶段文件所需的grub.cfg信息。grubx64.efigrub.cfg
  • 无法更改阶段 1grub.cfg文件的路径。更改此路径将需要更改其本身。更改将使签名无效,从而导致其与 SecureBoot 不兼容。/boot/efi/EFI/ubuntu/grub.cfggrubx64.efigrubx64.efi

采用选项 2(定制grubx64.efi):

  • 没有第一阶段grub.cfg文件,因为......
  • 定制的grubx64.efi引导加载程序为了查找和读取阶段 2grub.cfg文件(/boot/grub/grub.cfg)所需的所有配置信息都直接嵌入在定制grubx64.efi文件本身中。
  • 这是可能的,因为定制的grubx64.efi引导加载程序与 SecureBoot 不兼容,因此不需要由 Microsoft 签名。

如果你跑grub-install --bootloader_id=没有 --no-uefi-secure-boot, 然后:

  • grub-install将使用 Microsoft 签名的、由 Canonical 提供的grubx64.efi文件。(这是上面的选项 1。)
  • grubx64.efi文件和定制的 phase-1grub.cfg文件将安装在:/boot/efi/EFI/$bootloader_id/
  • 但是,在启动时,grubx64.efi文件将尝试读取/boot/efi/EFI/ubuntu/grub.cfg(因为此路径无法更改)。
  • 如果/boot/efi/EFI/ubuntu/grub.cfg不存在,则启动将失败。
  • 如果/boot/efi/EFI/ubuntu/grub.cfg确实存在,但来自同一系统上不同的 Ubuntu 安装,则启动可能会失败,或者grubx64.efi可能会启动其他 Ubuntu 系统而不是所需的 Ubuntu 系统。
  • 另外:在这种情况下(即--no-uefi-secure-boot不存在),可以说:grub-install应该生成一个错误(或者至少是一个大声的警告)而不是默默地安装一个很可能配置错误的引导加载程序。

或者,如果你运行grub-install --no-uefi-secure-boot, 然后:

  • grub-install将创建一个定制的(未签名的)grubx64.efi文件。
  • 中将没有第一阶段grub.cfg文件/boot/efi/EFI/$bootloader_id/
  • grubx64.efi文件本身能够找到并读取grub.cfg位于的第 2 阶段文件/boot/grub/grub.cfg

正如该答案顶部所提到的,如果您使用--no-uefi-secure-boot,您(当然)需要确保您的系统上的 SecureBoot 已关闭。

答案3

我使用了一个简单的解决方法。运行后grub-install,不带任何参数--bootloader-id运行grub-install。它将创建一个 ubuntu 条目。如果您愿意,可以删除它,但现在您的 id 将“神奇地”工作。非常烦人,似乎是一个老错误。希望我有所帮助。

相关内容