CentOS 7 默认启动内核必须通过 grub2-set-default 设置 saved_entry 并执行 grub2-mkconfig -o /boot/grub2/grub.cfg 生效,手动修改 grub.cfg 无效;若不生效,需确认 menuentry 字符串完全匹配、GRUB_DEFAULT=saved 未被注释、且云平台未覆盖引导配置。

CentOS 7 的默认启动内核不能靠改 /etc/grub.conf 或直接编辑 /boot/grub2/grub.cfg 生效——那个文件是自动生成的,手动改完重启就没了。
grub2-set-default 后不生效?先确认 saved_entry 是否写对
很多人执行了 grub2-set-default 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' 却没效果,根本原因是引号里的字符串必须和 grep ^menuentry /boot/grub2/grub.cfg 输出的**完整 menuentry 行开头完全一致**(包括空格、括号、点号位置)。
- 用
grep ^menuentry /boot/grub2/grub.cfg查出所有项,复制那一整行从menuentry '到第一个'之间的内容(不含引号) - 不要自己拼写,比如把
el7.x86_64写成el7或漏掉末尾的7 (Core)都会失败 - 验证是否写入:运行
grub2-editenv list,输出应为saved_entry=xxx,且xxx必须和你复制的字符串一字不差
用数字索引设置更稳妥,但要注意顺序不是“看起来的顺序”
执行 grep ^menuentry /boot/grub2/grub.cfg 后,显示顺序是从 0 开始编号的,但这个顺序和 GRUB 启动菜单里看到的顺序**不一定一致**——因为 rescue entry(救援模式)可能被插在中间或末尾,而 grub2-set-default 0 指的是配置文件里第一个 menuentry 出现的位置,不是菜单里最上面那个。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 建议先用
awk -F"'" '/^menuentry/ {print NR-1 ": " $2}' /boot/grub2/grub.cfg快速列出带编号的可选内核名 -
grub2-set-default 0设置后,grub2-editenv list显示的是saved_entry=0,不是内核名;这种模式下即使内核名变动也不影响设置 - 如果系统启用了
GRUB_DEFAULT=saved(默认就是),那数字索引才有效;检查/etc/default/grub确认这一行没被注释或改成其他值
修改后必须更新 grub.cfg 才能生效
grub2-set-default 只改环境变量,不生成新配置。CentOS 7 不会自动重写 /boot/grub2/grub.cfg,必须手动触发。
- 运行
grub2-mkconfig -o /boot/grub2/grub.cfg - 注意路径必须是
/boot/grub2/grub.cfg,写成/boot/grub/grub.cfg或漏掉-o参数都会静默失败 - 如果提示
error: cannot find a device for /boot,说明/boot分区没挂载或路径不对;先mount | grep boot确认挂载状态
某些云平台(如 Linode、AWS EC2)根本不读取 saved_entry
即使你 grub2-set-default 和 grub2-mkconfig 全做了,重启后还是旧内核——大概率是云厂商控制台覆盖了 GRUB 配置。
- Linode 要在后台 Host Settings → Boot Settings 里勾选 “GRUB 2” 并保存,否则它强制用自己内置的引导器
- AWS EC2 使用 PV-GRUB 或 EFI 引导时,
grub2配置完全不生效,得用aws ec2 modify-instance-attribute --instance-id ... --attribute kernel --value ...(已弃用)或换 AMI - 验证方式:重启前运行
ls /proc/sys/kernel/osrelease记下当前内核,重启后立刻uname -r对比,若不变,基本就是平台级限制
真正起作用的只有三步:匹配好 menuentry 字符串(或用数字)、写入 saved_entry、重生成 grub.cfg。其它任何“改配置文件”“删旧内核”操作都是辅助手段,不是必需环节。

















