GRUB 不显示所有操作系统

GRUB 不显示所有操作系统

我目前使用的是 Arch,Gentoo 位于单独的分区中。grub-mkconfig -o /boot/grub/grub.cfg(在 Arch 上)返回:

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux-zen
Found initrd image: /boot/intel-ucode.img /boot/initramfs-linux-zen.img
Found fallback initrd image(s) in /boot: initramfs-linux-zen-fallback.img
Found Windows Boot Manager on /dev/nvme0n1p1@/efi/Microsoft/Boot/bootmgfw.efi
Found Gentoo/Linux on /dev/nvme0n1p9
done

不过,启动菜单中没有 Gentoo 的条目,而 Windows 则有一个条目。也没有 Gentoo 条目/boot/grub/grub.cfg。我在这里错过了什么吗?

谢谢!!

答案1

您需要确保运行时真正安装了 gentoo 分区grub-mkconfig。以下工具的输出有助于确定这一点:

  • lsblk
  • mount
  • df

如果您需要深入挖掘,请在一个终端窗口中跟踪日志日志,同时在另一个终端窗口中以 root 身份运行 os-prober。

窗口 1:sudo journalctl -fn0

窗口2:sudo os-prober

grub-mkconfig命令使用 os-prober 实用程序来查找其他操作系统,并将 os-prober 日志记录到 Arch 上的日志中,这样就可以提供您所需的所有信息,以准确找出为什么找不到 gentoo 的原因因为分区已实际安装。

答案2

如果你把 arch 安装在一个驱动器上,而不是安装了 gentoo 分区的驱动器上,那么只有 grub-install /dev/sdX (X 是驱动器号)显然找不到 gentoo。

;基本上你必须 grub 安装多个驱动器。

答案3

基于http://codepad.org/zFCNfwoK评论中提到的输出...

os-prober发现 Gentoo 已打开/dev/nvme0n1p9,但显然下一步是linux-boot-prober.它将运行位于 中的测试脚本/usr/lib/linux-boot-probes

看起来/usr/lib/linux-boot-probes/mounted/90fallback应该能够检测到 Gentoo 的内核和 initramfs,如果它们位于文件系统boot的根目录或子目录中/dev/nvme0n1p9,假设文件系统类型是 GRUB 可以读取的类型。但是 Gentoo 可以通过几种可能的方式安装在 UEFI 上,其中一些方式会将 kernel+initramfs 放置到 EFI 系统分区上,这就是/dev/nvme0n1p1您的情况。

至少在我的 Debian 10 上,看起来os-prober可能需要更新才能涵盖更多 UEFI 安装案例。

请跑efibootmgr -v。 Gentoo 是否为自己生成了 NVRAM 启动项?它可以用来找出 Gentoo 的内核(或引导加载程序,如果它使用内核而不是依赖于内核中的 EFI 存根)的位置。

(一个想法:有人可能会编写一个在 UEFI 系统上运行的脚本os-prober,该脚本将逐步遍历所有 NVRAM 注册的引导加载程序,并用于file查明指向的引导文件是否看起来像 Linux 内核。这应该涵盖相当多的内容使用内核的 EFI 存根而不是单独的引导加载程序的情况。)

相关内容