我目前使用的是 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 存根而不是单独的引导加载程序的情况。)