应优先使用完整菜单项名称而非编号,因centos 7/8中纯数字索引(如0)常导致saved_entry写入失败或grub忽略;必须从/etc/grub2.cfg提取含括号与空格的完整标题字符串,用双引号包裹后执行sudo grub2-set-default,并立即用grub2-editenv list验证saved_entry是否匹配。

grub2-set-default 用名称还是编号?
必须用完整菜单项名称,不能只填数字索引。CentOS 7/8 的 grub2-set-default 在多数实际环境中对纯数字(如 0 或 1)支持不稳定——它会写入 saved_entry=0 到 /boot/grub2/grubenv,但 GRUB 实际加载时可能忽略该值,仍按配置文件中第一个 menuentry 启动。
正确做法是:从 /etc/grub2.cfg 中提取完整标题字符串,包括括号和空格,原样传给 grub2-set-default。例如:
sudo grub2-set-default "CentOS Linux (5.10.38-21.hl05.el7.x86_64) 7 (Core)"
- 名称必须与
grub2.cfg中menuentry后的字符串完全一致(区分大小写、空格、括号) - 如果名称含单引号或特殊字符,用双引号包裹更安全
- 执行后立即验证:
grub2-editenv list应显示saved_entry=...匹配你设置的名称
为什么 grub2-mkconfig -o /boot/grub2/grub.cfg 必须执行?
因为 grub2-set-default 只修改运行时环境变量(/boot/grub2/grubenv),不改生成的菜单结构。而 /etc/grub2.cfg 是由 grub2-mkconfig 根据 /etc/default/grub 和 /etc/grub.d/ 下脚本动态生成的。如果你删过内核、更新过 kernel 包,旧的 grub2.cfg 里可能已不含你指定的菜单项——此时即使 saved_entry 正确,GRUB 也会 fallback 到第一个可用项。
所以每次修改前,先确认目标内核仍在菜单中;修改后必须运行:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- 输出中应出现
Found linux image: /boot/vmlinuz-...对应你要设为默认的内核 - 若提示
error: syntax error或跳过某内核,说明该内核文件已被删除但残留配置,需先清理 rpm 包再重生成 - 不要手动编辑
/boot/grub2/grub.cfg—— 它是自动生成的,下次grub2-mkconfig会覆盖
grubby --set-default 更可靠?
是的。grubby 直接操作 GRUB 配置底层逻辑,比 grub2-set-default 更鲁棒,尤其在多内核、带 rescue 条目或标题含特殊字符时。它通过内核路径(如 /boot/vmlinuz-5.10.38-21.hl05.el7.x86_64)定位,不依赖字符串匹配。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
步骤如下:
sudo grubby --default-kernel<br>sudo grubby --info=ALL | grep -A 5 "title="
- 先用
grubby --default-kernel确认当前默认内核路径 - 再用
grubby --info=ALL找到目标内核的kernel=行,复制其完整路径 - 执行:
sudo grubby --set-default /boot/vmlinuz-5.10.38-21.hl05.el7.x86_64 - 验证:
sudo grubby --default-kernel应返回刚设的路径
注意:grubby 默认不修改 grubenv,但会直接写入 GRUB 配置生效,且重启后持久有效。
远程服务器没界面,怎么确认下次启动真用了新内核?
不能只信 grub2-editenv list 或 grubby --default-kernel 的输出——它们只说明“设置了”,不代表“能加载”。真正验证方式只有两个:
- 重启后立刻执行
uname -r,结果必须与你设定的目标内核版本完全一致 - 开机过程中(如有串口或带外控制台),观察 GRUB 菜单高亮是否停在你设的条目上;若自动跳过、闪退或卡在 logo,大概率是该内核 initramfs 损坏或驱动缺失
最容易被忽略的一点:某些云平台(如 AWS EC2、阿里云 ECS)使用自定义 initramfs 或禁用部分内核模块,即使本地测试正常,上线后也可能因缺少 virtio_net 或 xen_blkfront 导致网络或磁盘不可用——务必在同环境预演一次冷启动。










