两个 Grub 引导加载程序或 grub 菜单。我该如何解决?

两个 Grub 引导加载程序或 grub 菜单。我该如何解决?

我正在尝试双引导 Arch 和 Ubuntu linux,似乎不知何故最终出现了两个 grub 菜单,当我在 grub 提示符下键入 exit 时,会出现第二个菜单。更奇怪的是,首先显示的 grub 菜单确实有 Arch linux 的引导条目,但它试图在 /dev/sde 上查找我的系统上不存在的 uuid。 Ubuntu 条目启动正常。

不知道为什么,但我发现 grub 是 Linux 中最令人困惑的方面之一。

安装 archlinux 后我运行

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ArchLinux --recheck

为 Th3 添加标志然后运行,grub-mkconfig -o /boot/grub/grub.cfg

我该如何解决这个问题,为什么我最终会得到一个奇怪的配置?

我认为所有其他相关信息都在下面,但如果我错过了任何内容,请告诉我。

树的输出:

/boot/efi/
|-- EFI
|   |-- ArchLinux
|   |   `-- grubx64.efi
|   |-- BOOT
|   |   |-- BOOTX64.EFI
|   |   |-- fbx64.efi
|   |   `-- mmx64.efi
|   `-- ubuntu
|       |-- BOOTX64.CSV
|       |-- grub.cfg
|       |-- grubx64.efi
|       |-- mmx64.efi
|       `-- shimx64.efi
`-- System\ Volume\ Information
    |-- AadRecoveryPasswordDelete
    `-- ClientRecoveryPasswordRotation

我添加的启动媒体布局 [Ubuntu**]。

lsblk /dev/nvme0n1
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 476.9G  0 disk 
|-nvme0n1p1 259:1    0   487M  0 part /boot/efi
|-nvme0n1p2 259:2    0 274.4G  0 part [Ubuntu**]
|-nvme0n1p3 259:3    0 122.1G  0 part [SWAP]
`-nvme0n1p4 259:4    0    80G  0 part /

启动时出现的第一个 grub 菜单 第一个菜单

Arch linux 条目不起作用 不良拱门入口

退出第一个 grub 实例 退出第一个菜单

第二个 grub 菜单实例?! 第二个 Grub 菜单

答案1

这是因为当大多数 efi BIOS 可以使用 efistub 引导 Linux 内核时,不需要使用 grub。 Efistub 只是直接启动 Linux 内核。

https://wiki.archlinux.org/title/EFISTUB

您也可以继续使用 grub,但正如您所发现的,每个 grub 只擅长引导其特定操作系统(Ubuntu 或 arch),而无需进一步调试以使其中一个 grub 正确找到两者的内核路径和设置。

答案2

第一个 GRUB 菜单来自 Ubuntu 的 GRUB,它是 GRUB 版本 2.04。由于shimx64.efi安装在 Ubuntu 的 ESP 目录中,Ubuntugrubx64.efi可能是完全独立的版本,因为安全启动不允许 GRUB 加载模块(因为 GRUB 模块使用 ELF 二进制格式,而不是安全启动固件可以理解的 PE32+,并且所以可以通过它进行签名检查)。

也许您的 Arch 安装使用了 GRUB 2.04 无法识别的文件系统类型,但 Arch 自己的 GRUB(版本 2.06)可以读取它。在这种情况下,最好使用 Arch 的 GRUB 作为主引导项,并创建一个自定义引导项,使其读取 Ubuntu 的引导项,grub.cfg从而显示 Ubuntu 的 GRUB 菜单。然后,您可以使用该菜单项来启动 Ubuntu,每当 Ubuntu 获得内核更新时,它都可以grub.cfg照常更新,即使 Ubuntu GRUB 的其余部分实际上根本没有被使用。

运行efibootmgr -v:您应该看到有一个 Ubuntu 的启动项和另一个 Arch 的启动项。有了它,efibootmgr -o您应该能够重新排列引导顺序,使 Arch 的 GRUB 成为第一个尝试的引导顺序。只需查看输出BootOrder中的现有设置efibootmgr -v,然后将数字移动到所需的顺序即可。

(我发现最好不要更改BootOrderwith中列出的引导选项总数efibootmgr,以防您有一个奇怪的 UEFI 固件实现。)

相关内容