我正在运行一台具有 GPT 的多启动笔记本电脑。操作系统包括 Windows、Fedora、Debian 和 Ubuntu。
每个发行版都试图控制计算机的启动,但每个发行版都有自己的小怪癖。例如,两个发行版的 grub 无法启动 Windows(无法启动),另一个发行版的 grub 无法启动 Fedora(无法启动),还有一个发行版的 grub 无法启动 Debian(无法启动)。
无论我清理多少次/boot
,然后sudo grub2-mkconfig -o /boot/grub2/grub.cfg
在当前操作系统和其他发行版上发布,问题仍然存在。
我发现,使用 UEFI 的加载程序可以顺利启动每个操作系统,而不会出现问题。但如果我使用固件的加载程序,我发现它仍然会将我带到包含损坏条目的 grub 菜单。
我如何禁用对 grub 菜单项的探测,以便每个发行版的 grub 只能找到自己而找不到其他的?
答案1
每个操作系统的 GRUB 所进行的探测均受到控制前系统通过 中的文件启动/etc/grub.d
。具体来说,通常有一个脚本称为 ,30_os-prober
用于控制操作系统探测过程。不过,配置起来可能相当困难。您需要在调整探测脚本后运行update-grub
或 ,grub-mkconfig
以便创建新的配置文件。
有一个名为 GRUB Customizer 的工具可以大大简化此类过程。它描述这里,以及其他地方。我自己从未使用过它,因此无法直接提供更多详细信息,但它可能值得研究。
另一个选择是放弃 GRUB,转而使用另一个用于 Linux 的 EFI 引导加载程序。我自己的重新索引可能相对容易设置和配置,因为它会在启动时扫描内核,因此每次安装新内核时都不需要重新配置。最大的问题是,安装了四个操作系统/发行版后,您的菜单最初会非常混乱,包括三个单独的 GRUB 条目。因此,您需要通过编辑refind.conf
、取消注释dont_scan_dirs
行并添加条目来清理它,以使这些多个 GRUB 条目不在列表中。您可能还需要调整图标,如所述这里。您最终仍可能会得到太多的内核条目;最好的处理方法是通过发行版的包管理器卸载未使用的内核。您可能需要mkrlconf.sh
在每个发行版中运行(rEFInd 附带的脚本)来创建一个/boot/refind_linux.conf
文件,尽管有时这并不是绝对必要的。