GRUB2 是当今绝大多数 Linux 发行版默认使用的引导加载程序,其配置核心逻辑是:永远不要直接编辑生成的 grub.cfg 文件,而是通过修改 /etc/default/grub 与 /etc/grub.d/ 目录下的脚本,再执行 grub-mkconfig 命令重新生成配置,遵循这一原则,才能避免系统升级后配置被覆盖、引导项丢失等灾难性问题,确保服务器与个人电脑的稳定启动。
GRUB2 配置文件体系与工作流程
理解 GRUB2 的配置架构,是进行任何高级定制的前提。
- 主配置文件:/boot/grub/grub.cfg 是最终生效的文件,由系统自动生成,包含全部菜单项与启动参数,不建议手动修改。
- 环境变量文件:/etc/default/grub 是用户最常编辑的入口,控制超时时间、默认启动项、内核参数等核心行为。
- 脚本目录:/etc/grub.d/ 包含多个可执行脚本,按数字前缀顺序执行,共同拼接出完整的 grub.cfg,00_header 读取环境变量,10_linux 自动探测内核,30_os-prober 检测其他操作系统。
- 生成命令:在 Ubuntu/Debian 系使用
update-grub,在 CentOS/RHEL 系使用grub2-mkconfig -o /boot/grub2/grub.cfg,两者本质相同。
核心配置项逐一详解
默认启动项与等待时间
这是最常用的配置区域,直接影响开机体验。
GRUB_DEFAULT=0 # 默认启动第一个菜单项,也可用 saved 记住上次选择 GRUB_TIMEOUT=5 # 菜单等待 5 秒,设为 0 则直接启动,设为 -1 则永久等待 GRUB_TIMEOUT_STYLE=menu # 可选 hidden 或 countdown,用于静默启动
内核启动参数注入
在 GRUB_CMDLINE_LINUX_DEFAULT 中追加参数,可优化系统行为,例如设置串口控制台:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"
多系统引导配置
安装 os-prober 并启用后,GRUB2 可自动识别 Windows 或其他 Linux 发行版。
GRUB_DISABLE_OS_PROBER=false
注意:UEFI 安全启动模式下,部分发行版(如 Ubuntu 22.04+)默认关闭此功能,需手动开启并重新生成配置。
自定义菜单项与主题美化
编写自定义引导脚本
在 /etc/grub.d/ 下创建 40_custom 文件,追加独立菜单项,例如手动添加一个内存测试工具:
menuentry "Memtest86+" {
linux /memtest86+.bin
}
赋予执行权限后重新生成配置即可生效,此方法同样适用于引导 ISO 镜像或备用内核。
主题与字体
GRUB2 支持通过 GRUB_THEME 变量指定主题文件,也可用 GRUB_BACKGROUND 设置背景图片。建议使用 16 位色深的 PNG 或 TGA 格式图片,避免兼容性问题。
常见故障排查与修复方案
开机进入 grub rescue 模式
这是引导文件损坏或分区变动后的典型症状,解决方案:
- 使用
ls命令枚举所有磁盘分区,找到 Linux 根分区。 - 依次执行
set root=(hd0,msdos1)与set prefix=(hd0,msdos1)/boot/grub。 - 加载正常模块:
insmod normal,然后输入normal进入菜单。 - 进入系统后,重新执行
grub-install /dev/sda修复引导。
引导菜单不显示
检查 /etc/default/grub 中的 GRUB_TIMEOUT_STYLE 是否误设为 hidden,同时确认 GRUB_HIDDEN_TIMEOUT 是否遗留旧配置。推荐统一使用

GRUB_TIMEOUT_STYLE=menu 避免歧义。
性能调优与安全加固
降低开机等待时间
对于单系统服务器,建议设置:
GRUB_DEFAULT=0 GRUB_TIMEOUT=2 GRUB_TIMEOUT_STYLE=countdown
配合 GRUB_HIDDEN_TIMEOUT_QUIET=true,可在不牺牲手动干预能力的前提下加速启动。
设置 GRUB 密码保护
防止未授权用户进入单用户模式修改 root 密码,使用 grub-mkpasswd-pbkdf2 生成加密口令,然后将以下内容追加到 00_header:
set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.10000.xxxxx
注意:启用密码后,任何菜单项编辑与命令行操作都需要认证,请妥善保管密码。
UEFI 安全启动与签名验证
在 UEFI 环境下,确保 shim 与内核签名有效,部分发行版要求开启 Secure Boot 时关闭第三方驱动模块,如需使用 Nvidia 闭源驱动,请通过 mokutil 导入签名密钥。
酷番云服务器实战经验
以酷番云高性能云服务器为例,我们在为客户部署多节点集群时,曾遇到批量重启后部分节点卡在 GRUB 菜单的问题,排查发现:云主机的虚拟磁盘在迁移后,设备标识从 /dev/vda 变为 /dev/sda,导致旧的 grub.cfg 中 root 设备路径失效。
解决方案:通过酷番云管理控制台的 VNC 终端进入救援模式,挂载根分区后,使用 grub2-mkconfig -o /boot/grub2/grub.cfg 重新生成配置,并在 /etc/default/grub 中添加:
GRUB_DISABLE_OS_PROBER=false
同时建议在云服务器中配置 GRUB 串口重定向,便于在无显示器的环境下通过命令行远程排查引导故障:

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8" GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
经验要点:云服务器与物理机不同,磁盘设备名可能在迁移、快照恢复后发生漂移,定期备份 /boot/grub2/grub.cfg,并在每次内核升级后执行引导配置生成命令,是避免远程失联的关键防线。
相关问答模块
GRUB2 引导项很多,如何精简只保留当前系统?
将 /etc/grub.d/ 下不需要的脚本移除执行权限,chmod -x /etc/grub.d/30_os-prober,并注释掉 GRUB_DISABLE_OS_PROBER=false 中的相关行,同时检查 10_linux 中是否残留旧内核,使用 apt autoremove --purge 清理旧内核镜像,最后重新生成配置即可。
修改 grub.cfg 后系统无法启动怎么办?
不必惊慌,GRUB2 本身具备容错能力,重启进入 GRUB 菜单后按 e 编辑启动项,在内核引导行末尾添加 init=/bin/bash 直接进入 shell,挂载根分区后恢复原始配置或重新生成,如果连菜单都无法进入,可使用系统安装盘的 Rescue 模式,或通过 Live CD 环境 chroot 修复。日常维护中,务必在修改配置前备份原文件,并保留一个可用的备用内核启动项。
互动与延伸讨论
GRUB2 的配置体系看似繁琐,但只要掌握了“修改源文件 + 重新生成”这一核心思想,便不再神秘,你在实际配置过程中遇到过哪些棘手问题?是内核 panic 还是多系统引导丢失?欢迎在评论区分享你的故障排查经历,我们一起探讨更优的解决方案,如果本文对你有所帮助,不妨收藏转发,让更多运维伙伴少走弯路。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/737368.html

