当前位置:首页 > 虚拟主机 > 正文

Grub2配置怎么修改启动顺序,grub2配置文件在哪里?

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 文件,追加独立菜单项,例如手动添加一个内存测试工具:

Grub2配置怎么修改启动顺序,grub2配置文件在哪里? 第1张

赋予执行权限后重新生成配置即可生效,此方法同样适用于引导 ISO 镜像或备用内核。

主题与字体

GRUB2 支持通过 GRUB_THEME 变量指定主题文件,也可用 GRUB_BACKGROUND 设置背景图片。建议使用 16 位色深的 PNG 或 TGA 格式图片,避免兼容性问题。

常见故障排查与修复方案

开机进入 grub rescue 模式

这是引导文件损坏或分区变动后的典型症状,解决方案:

  1. 使用 ls 命令枚举所有磁盘分区,找到 Linux 根分区。
  2. 依次执行 set root=(hd0,msdos1) 与 set prefix=(hd0,msdos1)/boot/grub。
  3. 加载正常模块:insmod normal,然后输入 normal 进入菜单。
  4. 进入系统后,重新执行 grub-install /dev/sda 修复引导。

引导菜单不显示

检查 /etc/default/grub 中的 GRUB_TIMEOUT_STYLE 是否误设为 hidden,同时确认 GRUB_HIDDEN_TIMEOUT 是否遗留旧配置。推荐统一使用

GRUB_TIMEOUT_STYLE=menu 避免歧义

Grub2配置怎么修改启动顺序,grub2配置文件在哪里? 第2张

性能调优与安全加固

降低开机等待时间

对于单系统服务器,建议设置:

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 设备路径失效。

Grub2配置怎么修改启动顺序,grub2配置文件在哪里? 第3张

解决方案:通过西西云管理控制台的 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 还是多系统引导丢失?欢迎在评论区分享你的故障排查经历,我们一起探讨更优的解决方案,如果本文对你有所帮助,不妨收藏转发,让更多运维伙伴少走弯路。

0