centos 7 的 /boot/grub2/grub.cfg 由 grub2-mkconfig 自动生成,不可直接编辑;菜单顺序由 /etc/grub.d/10_linux 按内核文件时间戳倒序生成,可通过 grub2-set-default 设定默认项并执行 grub2-mkconfig -o /boot/grub2/grub.cfg 更新生效。

grub2 中 menuentry 顺序由 /boot/grub2/grub.cfg 自动生成,不能直接编辑
CentOS 7 的 grub.cfg 是自动生成的,手动改它会被下次 grub2-mkconfig 覆盖。你看到的菜单顺序,本质是内核包安装顺序 + grubby 或 kernelopts 配置共同决定的,不是靠拖动文本行调整。
-
/boot/grub2/grub.cfg只读,修改后重启可能失效甚至无法引导 - 真正控制显示顺序的是
/etc/grub.d/10_linux脚本里对内核的扫描逻辑:它按vmlinuz-文件时间戳倒序排列(新内核排前面) - 如果你发现旧内核反而排在最前,大概率是因为那个内核的
vmlinuz文件时间戳比新内核还新(比如手动复制、rpm 重装异常等)
想让某个内核固定显示在第一位,用 grub2-set-default + grub2-mkconfig 组合
显示顺序 ≠ 启动顺序,但你可以通过“设为默认 + 重建配置”间接影响视觉排序——因为 GRUB 默认把 saved_entry 对应项高亮并置顶显示(部分主题下)。
- 先查可用内核名:
grep ^menuentry /boot/grub2/grub.cfg - 设为默认启动项(用完整 menuentry 名):
grub2-set-default "CentOS Linux (5.10.0-1.el7.elrepo.x86_64) 7 (Core)" - 强制重生成配置(关键!否则菜单不刷新):
grub2-mkconfig -o /boot/grub2/grub.cfg - 验证:
grub2-editenv list应显示saved_entry=...,且重启后该条目高亮
彻底调整 menuentry 文字顺序:改 /etc/grub.d/10_linux 并重建
如果必须让 A 内核文字排在 B 内核上面(不管时间戳),唯一可靠方式是干预生成逻辑。注意:这属于高级操作,需备份。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 备份原脚本:
cp /etc/grub.d/10_linux /etc/grub.d/10_linux.bak - 编辑
/etc/grub.d/10_linux,找到类似version_sort或ls -t排序的行(通常在linux_entry()上方) - 把排序逻辑改成按内核版本号正序(如
sort -V)或硬编码优先级(例如用case匹配特定vmlinuz路径提前输出) - 执行:
grub2-mkconfig -o /boot/grub2/grub.cfg - 风险提示:系统升级 kernel 包后,
10_linux可能被覆盖,需重新应用修改
Linode、AWS 等云平台用户特别注意:grub2-set-default 失效是常态
很多云厂商(尤其是 Linode、DigitalOcean)的虚拟化层完全接管了启动流程,grub.cfg 和 grub2-set-default 修改无效。界面里选的内核才是真实生效的。
- Linode:必须进后台 → “Edit Profile” → “Kernel” → 手动选一个已安装的内核版本
- AWS EC2:AMI 启动时绑定内核,运行中无法切换;要换内核得重打 AMI 或用
grubby --set-default(仅限支持的实例类型) - 验证是否真生效:
uname -r输出必须和你期望的内核一致,否则说明底层没走 GRUB
真正起作用的永远是 grub2-mkconfig 生成的结果,而不是你眼睛看到的那几行文本。改完别忘了 reboot 并用 uname -r 确认,否则容易误判成功。










