我想在 grub 菜单屏幕上添加文本启动模式选项。如何创建此菜单项?
答案1
在我的研究中,有两种方法可以做到这一点:
方法 1
破解10_linux
脚本/etc/grub.d/
并插入文本启动菜单项的生成代码
优点:
- 为所有已安装的内核版本生成文本启动菜单项
- 安装/清除内核时处理新的或多余的菜单项
缺点:
- 需要深入了解 shell 脚本
- 脚本源文件可能因 grub 版本的不同而有所差异
- 如果 grub 包更新覆盖了修改后的脚本,则需要重新进行编辑
方法 2
使用指定脚本添加自定义 grub 菜单项/etc/grub.d
优点:
- 最简单、最不复杂的
- 没有被覆盖的机会,所以你只需做一次
缺点:
- 仅当您希望每个安装的内核版本都有文本启动菜单项时:
- 工作量大,维护难度大
- 清除旧内核版本时留下多余的菜单项
在这个简短的步骤中,我将使用它,method #2
因为这是最容易解释的,并且我们将仅为您使用的最新内核映像创建文本启动菜单项。
您首先需要的是已为最新内核生成的菜单项。我们将复制并使用它作为我们自定义菜单项的基础,并进行少许修改。为此,您需要查看文件
/boot/grub/grub.cfg
。找到指向 Ubuntu 上最新内核的第一个菜单项节。如果您与其他 Linux 发行版进行双启动,请特别注意,以免将其与它们的菜单项混淆。找到后,复制整个 menuentry 节并将其粘贴到
/etc/grub.d/40_custom
文件中。它可能看起来像下面这样。让我们以此为例:menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a4e6d610-122e-42e2-8497-39eae02816e8' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt2' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 a4e6d610-122e-42e2-8497-39eae02816e8 else search --no-floppy --fs-uuid --set=root a4e6d610-122e-42e2-8497-39eae02816e8 fi linux /boot/vmlinuz-3.8.0-31-generic root=UUID=a4e6d610-122e-42e2-8497-39eae02816e8 ro quiet splash $vt_handoff initrd /boot/initrd.img-3.8.0-31-generic }
现在,在保存文件之前,您需要在此节中编辑一些内容:
- 菜单项标题。将
menuentry
行中的“Ubuntu”更改为“Ubuntu(文本模式)” linux
行中的 vmlinuz 文件的路径。 在行末/boot/vmlinuz-3.8.0-31-generic
用grub 启动参数替换。用/vmlinuz
linux
quiet splash
text
- 行中的 initrd 映像路径
initrd
。替换/boot/initrd.img-3.8.0-31-generic
为/initrd.img
- 菜单项标题。将
vmlinuz
我们在和行中都进行替换的原因initrd
是为了利用 / 中的符号链接,该符号链接指向/boot
dir 中的最新版本,以便我们的自定义菜单项始终可以指向最新的内核,并且在引入新内核时不需要进行更改。就这样。执行
sudo update-grub
生成自定义菜单,就大功告成了。