如何控制其他操作系统自动生成的 grub 条目?

如何控制其他操作系统自动生成的 grub 条目?

我的电脑上安装了 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

这是我的不太优雅的解决方案。

  1. 打开/etc/grub.d/30_os-prober进行编辑。

  2. 找到定义的行LPARAMS,并将其值更改为您想要在 grub 菜单项中的 linux 行末尾附加的任何值。包括所有所需的参数(包括 root 值),并留有适当的间距。作为预防措施,保留原始的 LPARAMS 行,但将其注释掉。

  3. 运行 update-grub。

此过程将把您的添加内容作为参数附加到所探测的每个 Linux 操作系统。

肯定存在通过添加自定义逻辑来实现此目的的更具体的方法/etc/grub.d/30_os-prober,但我不知道如何做。

相关内容