安装grub用的是哪个命令?

安装grub用的是哪个命令?

我需要重新安装grub(以解决引导孔安全问题)。我不想犯错误,并且因为我不太习惯grub,我问自己是否有办法找到grub-install用于grub在机器上安装当前版本的命令。

感谢您的帮助。

环境:Grub 2、Manjaro (Arch linux)、EFI 引导

答案1

以 root 身份运行efibootmgr -v。第一行是BootCurrent: NNNNNNNN 是一个十六进制四位数字。

找到相应的“BootNNNN”行。它看起来类似于:

BootNNNN* Manjaro        HD(X,GPT,11111111-2222-3333-4444-555555555555,0x800,0x82000)/File(\...\something.efi)
  • NNNN是第一行的数字,
  • Manjaro是人类可读的启动项描述字符串(可以是任何内容),
  • X是 UEFI 固件检测到的磁盘顺序的编号,
  • 11111111-2222-3333-4444-555555555555是引导加载程序安装到的 EFI 系统分区的 PARTUUID,
  • \...\something.efiEFI 系统分区上的 Windows 样式路径名,用于标识要使用的引导加载程序文件。对于 GRUB + Secure Boot,它通常shimx64.efi或类似的东西指的是 Secure Boot shim 引导加载程序,然后它将加载同一目录中shim.efi指定的文件。grubx64.efi

EFI 系统分区可能安装为/boot/efi、 或/boot,或者根本不安装;不同的发行版在这里做的事情不同。如果它安装在/boot/efi,运行ls -l /boot/efi/EFI/BOOT/BOOTX64.efi并比较该文件的长度与由 : 标识的引导加载程序路径中的文件的长度:efibootmgr -v如果它们匹配,您就会知道您可能也应该更新后备引导加载程序。 (记住这一点——稍后会详细介绍。)

一旦知道了 PARTUUID,您就能够使用blkidlsblk -o +PARTUUID识别 EFI 系统分区(简称 ESP)对应的 Linux 设备名称。现在您将拥有重建命令所需的所有部分grub-install

然而,使用安全启动时,注册到系统 NVRAM 的第一个“启动加载程序”实际上是安全启动垫片,而不是 GRUB。你不想改变这个事实。

因此,您可能希望使用该--no-nvram选项来避免更改 NVRAM 引导变量。因此,重新安装 GRUB 的命令应该是:

grub-install --no-nvram /dev/<the disk device corresponding to your ESP partition>

如果 GRUB 当前也安装到\EFI\BOOT\BOOTX64.efiESP 上的后备引导加载程序路径中,您需要将该--force-extra-removable选项添加到grub-install命令中,因此它也会更新该选项。

请注意,如果您使用安全启动 shim 引导加载程序,则更新 ESP 上的 shim 也很重要。在重新引导系统之前,请验证 GRUB 和 ESP 上的填充程序是否具有足够新的时间戳。 2020年7月28日之后的任何事情都应该是好的。如果 shim 软件包不会自动更新 ESP 上的 shim 文件,您可以在软件包安装过程放置的任何位置找到更新的 shim,并将其复制到 ESP 上的旧 shim 上。

使用安全启动和 GRUB,ESP 的典型布局将如下所示:

  • <ESP mountpoint>/EFI/<name of distro>/grubx64.efi= 实际的 GRUB
  • <ESP mountpoint>/EFI/<name of distro>/shimx64.efi= 安全启动垫片
  • <ESP mountpoint>/EFI/BOOT/BOOTX64.efi= 垫片的后备启动副本
  • <ESP mountpoint>/EFI/BOOT/grubx64.efi= GRUB 的后备引导副本

组件的路径<name of distro>通常被认为是主引导加载程序,但如果系统因任何原因“忘记”NVRAM 设置,例如 UEFI 固件更新重置所有固件设置(又名“BIOS”),后备副本将非常有用。设置”)恢复为出厂默认值。

答案2

您不需要重新安装 GRUB 来修复此漏洞。只需更新软件包就足够了。如果 GRUB 是唯一的引导加载程序,您可能想要更新/boot/efi/EFI/Boot/BOOTX64.EFI- grub-install 不会这样做。

grub-install适用于旧式 MBR 系统,在启用 UEFI 的设备上实际上不再需要它。

为了更加确定,请检查 /boot/efi/EFI 中 grub 文件的日期。由于我不确定文件安装在哪里,请运行此命令并发布其输出

find /boot \( -iname grubx64.efi -o -iname 'shim*.efi' \)  -exec ls -l '{}' \;

相关内容