centos 7修改默认启动内核需先用grep ^menuentry /boot/grub2/grub.cfg查看可选内核列表并编号,再用grub2-set-default设目标(推荐用完整menuentry名称),必须执行grub2-editenv list验证saved_entry是否更新,最后确保grub_default=saved且必要时运行grub2-mkconfig -o /boot/grub2/grub.cfg生效。

直接改 grub2-set-default 就能生效,但必须配合 grub2-editenv list 验证,否则容易误以为改成功了,实际还是旧内核启动。
怎么查当前有哪些内核可选
CentOS 7 的内核列表藏在自动生成的 /boot/grub2/grub.cfg 里,不能手动改这个文件。正确做法是:
- 运行
grep ^menuentry /boot/grub2/grub.cfg,每行就是一个可启动项,顺序从 0 开始编号 - 注意:
menuentry行里带(rescue)的是救援模式,通常不作为日常默认项 - 如果输出里有重复或残缺的 menuentry(比如缺右大括号),说明 grub.cfg 可能被异常修改过,先
grub2-mkconfig -o /boot/grub2/grub.cfg重建
设置默认内核用名字还是数字
两种方式都行,但行为不同:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 用数字(如
grub2-set-default 0):按grep ^menuentry输出的**行号索引**设,默认是 0(最上面那个) - 用完整 menuentry 名字(如
grub2-set-default 'CentOS Linux (5.10.0-xxx.el7.x86_64) 7 (Core)'):必须一字不差,包括括号、空格、点号,大小写敏感 - 推荐优先用名字——因为内核升级后行号可能变(比如新内核插在最前),而名字是稳定的
为什么改完不生效
常见原因不是命令没跑,而是没触发持久化或环境冲突:
-
grub2-set-default只写入/boot/grub2/grubenv,但某些云平台(如 Linode、AWS EC2 使用 PVGRUB)会忽略它,只认后台控制台设置 - 执行完必须验证:
grub2-editenv list看saved_entry=后面是不是你设的值;uname -r是当前运行内核,不能反映下次启动项 - 如果系统启用了
GRUB_DEFAULT=saved(默认就是),那改saved_entry才有效;如果被改成GRUB_DEFAULT=0这类固定值,grub2-set-default就无效 - 别漏掉
grub2-mkconfig——虽然 CentOS 7 通常自动触发,但手动升级内核后建议补一句:grub2-mkconfig -o /boot/grub2/grub.cfg
真正麻烦的不是命令本身,而是 grubenv 文件权限不对、云平台接管引导、或者名字抄错一个空格——这些细节不验证就重启,十次有八次白忙。










