Grub的一些操作随记

来自三线的随记
Admin讨论 | 贡献2025年4月17日 (四) 18:45的版本 (创建页面,内容为“=== 列出全部启动项(包括submenu) === grep -E "^(\s*menuentry |\s*submenu )" /boot/grub/grub.cfg 例如: root@sit1:/etc/apt/sources.list.d# grep -E "^(\s*menuentry |\s*submenu )" /boot/grub/grub.cfg menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a6097def-7c8d-4ed3-91c4-83e0916f1a03' { submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-a6097def-7c8d-4ed3-91c…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

列出全部启动项(包括submenu)

grep -E "^(\s*menuentry |\s*submenu )" /boot/grub/grub.cfg

例如:

root@sit1:/etc/apt/sources.list.d# grep -E "^(\s*menuentry |\s*submenu )" /boot/grub/grub.cfg

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
	menuentry 'Ubuntu, with Linux 5.15.0-113-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-113-generic-advanced-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
	menuentry 'Ubuntu, with Linux 5.15.0-113-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-113-generic-recovery-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
	menuentry 'Ubuntu, with Linux 5.15.0-105-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-105-generic-advanced-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
	menuentry 'Ubuntu, with Linux 5.15.0-105-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-105-generic-recovery-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
	menuentry 'Ubuntu, with Linux 5.15.0-94-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-94-generic-advanced-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {
	menuentry 'Ubuntu, with Linux 5.15.0-94-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-94-generic-recovery-a6097def-7c8d-4ed3-91c4-83e0916f1a03' {

grub-set-default

通过 grub-set-default 0 或者 grub-set-default "gnulinux-5.15.0-105-generic-advanced-a6097def-7c8d-4ed3-91c4-83e0916f1a03" 或者 grub-set-default "Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-105-generic" 均可以实现在不编辑文件的情况下设置启动项

grub-set-default 会操作 /boot/grub/grubenv 并写入 saved_entry 变量

但是 saved_entry 变量生效依赖 GRUB_DEFAULT=saved (man grub-set-default 中有提到)

Set the default boot menu entry for GRUB.  This requires setting GRUB_DEFAULT=saved in /etc/default/grub.

通过修改 /etc/default/grub 实现指定启动项

关联配置项是 GRUB_DEFAULT , 例如 GRUB_DEFAULT="1 > 2"

虽然这里 "1 > 2" 可以有空格,但是推荐写法还是 GRUB_DEFAULT="1>2"

修改 /etc/default/grub 以后需要执行 update-grub 以更新 grub 配置

当然,同理 GRUB_DEFAULT 也可以写为 GRUB_DEFAULT=gnulinux-5.15.0-105-generic-advanced-a6097def-7c8d-4ed3-91c4-83e0916f1a03 这样更稳妥