必须将grub_default设为saved,再用grub2-set-default指定索引或标题,最后执行grub2-mkconfig生效;否则设置无效。

在麒麟系统中通过命令行修改GRUB默认启动项,是运维人员日常维护多内核环境或切换救援内核的必备操作。直接编辑/boot/grub2/grub.cfg会被后续update-grub覆盖,必须通过grub2-set-default配合配置文件生效机制来完成。
确认当前GRUB配置是否支持saved模式
执行 grep GRUB_DEFAULT /etc/default/grub,检查输出是否为 GRUB_DEFAULT=saved。如果不是,需先用 sudo sed -i 's/GRUB_DEFAULT=.*/GRUB_DEFAULT=saved/' /etc/default/grub 修改,并运行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg 生效。否则后续所有 grub2-set-default 命令均无效。
【GRUB_DEFAULT必须设为saved,否则设置不生效】
查看当前可用的启动菜单项
方法一:解析grub.cfg获取标题列表
运行 awk -F\' '/menuentry / {print $2}' /etc/grub2.cfg | sed 's/^[[:space:]]*//; s/[[:space:]]*$//',输出类似:Kylin V10 SP3 (5.10.0-1098.ky10.x86_64) 10 (Core)Kylin V10 SP3 (4.19.90-52.27.ky10.x86_64) 10 (Core)Kylin V10 SP3 (0-rescue-8a3b2c1d4e5f6g7h8i9j0k1l2m3n4o5p)
方法二:使用grubby快速列出
运行 sudo grubby --info=ALL | grep "^title" | cut -d'=' -f2,结果更简洁,但可能漏掉 rescue 条目。
设置默认启动项
第一步:用索引号设置(推荐新手)
例如将第一个菜单项设为默认,执行 sudo grub2-set-default 0。索引从0开始计数,与上一步输出顺序严格对应。
第二步:用完整标题设置(精准但易错)
复制上一步中某行完整标题(含括号和空格),用单引号包裹后执行,如:sudo grub2-set-default 'Kylin V10 SP3 (4.19.90-52.27.ky10.x86_64) 10 (Core)'。注意标题中任意字符差异(比如多一个空格)都会导致失败。
第三步:验证设置结果
运行 sudo grub2-editenv list,输出中应包含 saved_entry=0 或对应标题字符串。若显示 saved_entry= 后为空,说明前两步未成功。
立即生效并测试
执行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg 重新生成配置文件。这一步不可省略,否则重启后仍走旧逻辑。
重启系统,观察GRUB菜单高亮项是否为你刚设置的条目。若未变化,检查是否遗漏了第一步的 GRUB_DEFAULT=saved 配置。











