唯一可靠持久的方式是修改 /etc/default/grub 中的 grub_timeout 并执行 grub2-mkconfig -o /boot/grub2/grub.cfg(legacy)或 /boot/efi/efi/centos/grub.cfg(uefi),否则修改无效。

直接改 /etc/default/grub 里的 GRUB_TIMEOUT,再运行 grub2-mkconfig 生效 —— 这是唯一可靠、持久的方式。
修改 /etc/default/grub 中的 GRUB_TIMEOUT
这是唯一推荐的修改入口。CentOS 7 使用 GRUB2,所有用户级配置都应通过这个文件管理,而不是直接动生成的 cfg 文件。
-
GRUB_TIMEOUT=5是默认值,单位为秒;改成GRUB_TIMEOUT=30就是 30 秒等待 - 设为
0表示不显示菜单、直接启动默认项(注意:此时按住Shift或Esc可临时唤出菜单) - 若想隐藏菜单但保留手动唤出能力,可加一行:
GRUB_TIMEOUT_STYLE="hidden" - 修改前务必备份:
cp /etc/default/grub /etc/default/grub.bak
必须运行 grub2-mkconfig 才能生效
改完 /etc/default/grub 后,grub.cfg 不会自动更新 —— 它只是模板生成的结果,不重生成就等于没改。
- Legacy BIOS 系统执行:
grub2-mkconfig -o /boot/grub2/grub.cfg - UEFI 系统通常要指定 EFI 路径:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg(路径可能因厂商或安装方式不同为redhat或fedora) - 执行后建议检查输出里有没有
done或Generating grub configuration file字样,避免静默失败 - 别跳过这步去直接改
/boot/grub2/grub.cfg—— 下次内核升级或yum update会把它覆盖掉
验证是否生效 & 常见失效原因
重启后没看到新 timeout?大概率是以下某个环节出了问题。
- 没执行
grub2-mkconfig,或者命令里写错了输出路径(比如漏了-o参数) - UEFI 系统改了
/boot/grub2/grub.cfg却没动/boot/efi/EFI/centos/grub.cfg,而实际加载的是后者 -
GRUB_TIMEOUT_STYLE设为hidden时,timeout 仍会倒计时,但菜单不可见 —— 这不是 bug,是设计行为 - 某些 OEM 预装系统(如戴尔、HP)可能在
/etc/grub.d/下有自定义脚本覆盖GRUB_TIMEOUT,需检查/etc/grub.d/00_header或类似文件
真正容易被忽略的是:GRUB2 的 timeout 行为依赖于终端输出能力。如果 GRUB_TERMINAL_OUTPUT="console" 但实际硬件不支持 console 输出(比如某些虚拟机串口配置异常),timeout 可能卡住或跳过 —— 此时需配合 GRUB_TERMINAL="console" 一并检查。











