我的电脑上安装了 Ubuntu 19.04、Windows 10 和 Fedora 29。
在 Ubuntu 中,运行sudo update-grub
结果如下:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.0.0-13-generic
Found initrd image: /boot/initrd.img-5.0.0-13-generic
Found linux image: /boot/vmlinuz-4.18.0-18-generic
Found initrd image: /boot/initrd.img-4.18.0-18-generic
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Found Fedora 29 (Workstation Edition) on /dev/mapper/fedora-root
Adding boot menu entry for EFI firmware configuration
done
我认为它看起来不错,它可以检测 Windows 启动管理器和 Fedora 29,并设置一个 grub 菜单,让我在启动时在不同的操作系统之间进行选择。
我的问题是 Fedora 需要一些特殊配置才能解决一些图形驱动程序问题。具体来说,rd.driver.blacklist=nouveau modprobe.blacklist=nouveau
需要为该 grub 菜单项添加选项。
我可以通过手动编辑文件来解决这个问题/boot/grub/grub.cfg
,但下次运行时更改会被覆盖update-grub
,所以这不是一个好的解决方案。此外,/boot/grub/grub.cfg
我正在编辑的文件以注释“请勿编辑此文件”开头,这也表明我可能不应该编辑它。
我的问题是:如何为sudo update-grub
在 Ubuntu 中运行时生成的 Fedora grub 条目添加一些额外的启动选项?
该文件中有一些选项/etc/default/grub
可供使用update-grub
,例如我可以在那里选择 GRUB_TIMEOUT,它工作正常,但据我所知,该文件不允许我为其他操作系统指定启动选项,只能为 Ubuntu 本身指定启动选项。
为了进一步说明我的意思,自动生成的/boot/grub/grub.cfg
文件(由 创建update-grub
)包含如下所示的部分,指定如果选择该 grub 菜单选项,Fedora 将如何启动:
menuentry 'Fedora 29 (Workstation Edition) (on /dev/mapper/fedora-root)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-6398dc3c-28e3-4947-ad82-d9defe5d9a28' {
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b00e70c6-820f-4615-b95d-c933eaea0d3f
else
search --no-floppy --fs-uuid --set=root b00e70c6-820f-4615-b95d-c933eaea0d3f
fi
linux /vmlinuz-5.0.9-200.fc29.x86_64 root=/dev/dm-2
initrd /initramfs-5.0.9-200.fc29.x86_64.img
}
我希望上面的内容看起来略有不同,rd.driver.blacklist=nouveau modprobe.blacklist=nouveau
在以 开头的行末尾添加选项linux
。有什么方法可以update-grub
做到这一点吗?
我确实看到了建议这里关于编辑/etc/grub.d/40_custom
文件,但该解决方案意味着手动编写整个菜单项,因此当 Fedora 中的内核版本发生变化时,它不会适应。由创建的自动生成的菜单项的update-grub
优点是它提供了最新的 Fedora 内核,我想使用它并在自动生成的菜单项中的“linux”行中添加一些内容。可以这样做吗?如果可以,怎么做?
答案1
这是我的不太优雅的解决方案。
打开
/etc/grub.d/30_os-prober
进行编辑。找到定义的行
LPARAMS
,并将其值更改为您想要在 grub 菜单项中的 linux 行末尾附加的任何值。包括所有所需的参数(包括 root 值),并留有适当的间距。作为预防措施,保留原始的 LPARAMS 行,但将其注释掉。运行 update-grub。
此过程将把您的添加内容作为参数附加到所探测的每个 Linux 操作系统。
肯定存在通过添加自定义逻辑来实现此目的的更具体的方法/etc/grub.d/30_os-prober
,但我不知道如何做。