麒麟OS中需通过命令行解析GRUB配置:一、查GRUB_DEFAULT值及saved_entry;二、grep menuentry获菜单序号;三、用grubby --info=ALL展平查看实际启动项;四、检查GRUB_TIMEOUT等隐藏设置;五、GRUB命令行手动验证内核文件。

如果您在麒麟OS中需要确认GRUB引导菜单中实际列出的操作系统条目、默认启动项或菜单顺序,但无法在开机时观察到完整菜单,则需通过命令行解析底层配置文件。以下是查看GRUB启动项的具体操作步骤:
一、查看GRUB配置中定义的默认启动项编号
GRUB使用数字索引标识菜单项,默认启动项由GRUB_DEFAULT参数控制,其值可能为数字序号、saved或标题字符串。该设置直接影响开机时自动选中的条目。
1、打开终端,执行以下命令读取主配置文件中的默认项设置:
cat /etc/default/grub | grep GRUB_DEFAULT
2、若输出为GRUB_DEFAULT=0,则表示默认启动第一个菜单项(索引从0开始);若为GRUB_DEFAULT=saved,则需进一步检查saved_entry状态。
3、验证当前保存的默认项:
grub2-editenv list | grep saved_entry
二、列出GRUB生成的完整菜单项及其序号
grub.cfg是GRUB实际加载的二进制化菜单配置,其中menuentry语句定义了每个可启动项。直接解析该文件可获得与开机时完全一致的菜单结构和顺序。
1、执行命令提取所有menuentry行并编号显示:
grep -n "menuentry" /boot/grub2/grub.cfg | sed 's/^/ /' | nl -w2 -s'. '
2、若系统为UEFI模式,路径应为/boot/efi/EFI/kylin/grub.cfg,需替换上述命令中的文件路径。
3、每行开头数字为grub.cfg中对应menuentry所在行号,后续数字为人工编号的菜单序号,序号从0开始计数,与GRUB_DEFAULT数值直接对应。
三、查看当前生效的启动项顺序(含子菜单展开)
部分menuentry包含submenu或动态生成逻辑(如“Advanced options for Kylin”),仅靠grep无法反映真实展开层级。使用grubby工具可获取运行时解析后的扁平化菜单列表。
1、列出所有已注册的内核启动项(含恢复模式):
grubby --info=ALL | grep -E "^kernel|^initrd|^title" | paste -d' ' - - - | nl -w2 -s'. '
2、确认某具体menuentry是否被标记为默认:
grubby --default-kernel
3、注意:grubby结果中的kernel路径必须存在于/boot目录下,否则该条目在启动时将不可用。
四、检查GRUB菜单是否被隐藏或超时设为0
即使菜单项存在,若GRUB_TIMEOUT被设为0或GRUB_HIDDEN_TIMEOUT启用,用户将无法看到菜单界面,系统会直接启动默认项。需确认该行为是否为主动配置而非异常。
1、查看超时设置:
grep -E "GRUB_TIMEOUT|GRUB_HIDDEN_TIMEOUT" /etc/default/grub
2、若GRUB_TIMEOUT=0且无GRUB_HIDDEN_TIMEOUT,表示菜单强制跳过;若GRUB_HIDDEN_TIMEOUT存在,则需检查其值及GRUB_HIDDEN_TIMEOUT_QUIET设置。
3、修改后必须执行update-grub才能使新超时值写入grub.cfg。
五、手动验证某菜单项能否正常加载内核与initramfs
当菜单项存在但启动失败时,可通过GRUB命令行临时加载对应内核与initramfs文件,验证文件路径与完整性,排除因文件缺失或路径错误导致的菜单项失效。
1、重启进入GRUB菜单,按c键进入命令行模式。
2、执行ls命令列出所有设备分区:
ls
3、逐一分区探测/boot目录是否存在vmlinuz与initramfs文件:
ls (hd0,gpt2)/boot/
4、确认路径后,手动加载内核与镜像:
linux (hd0,gpt2)/boot/vmlinuz-5.4.18-142-generic root=/dev/sda5
initrd (hd0,gpt2)/boot/initramfs-5.4.18-142-generic.img
5、若出现“file not found”错误,说明该菜单项引用的文件路径不正确或文件已被删除。

















