我正在尝试双引导 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 /
答案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
,然后将数字移动到所需的顺序即可。
(我发现最好不要更改BootOrder
with中列出的引导选项总数efibootmgr
,以防您有一个奇怪的 UEFI 固件实现。)