导读:本期聚焦于孙悟空创作的《RHEL系统如何配置Grub2引导加载器?进阶管理与故障恢复详解》,敬请观看详情。Grub2是RHEL系统的引导加载器,负责在开机时加载内核并移交控制权。掌握Grub2的配置方法,是RHEL进阶学习中绕不开的一环。本文将深入讲解Grub2的核心配置文件结构,包括grub.cfg与/etc/default/grub的关系、grub2-mkconfig命令的生成流程,以及grub-set-default设置默认启动项的方式。同时介绍内核参数调整、引导加密、密码保护等实用技巧,最后针对忘记root密码、引导损坏等常见故障,给出完整的救援恢复方案,帮助你从原理到实战全面吃透Grub2。

Linux系统开机过程的第一个关键环节就是引导加载器。在RHEL 7及其之后的版本中,Grub2全面取代了老旧的Grub(GRUB Legacy),成为默认的引导程序。相比第一代Grub,Grub2采用模块化设计,配置文件由脚本自动生成,支持更多的文件系统、更灵活的启动项管理以及更强大的脚本能力。很多运维人员在日常工作中只知道改配置后执行grub2-mkconfig,却并不清楚背后到底发生了什么,一旦遇到引导损坏、忘记root密码等问题就手足无措。这篇文章就从原理到实操,把Grub2的配置体系完整梳理一遍。

RHEL系统如何配置Grub2引导加载器?进阶管理与故障恢复详解

一、Grub2的配置文件体系:直接编辑grub.cfg为什么是错误做法

Grub2的配置体系与传统认知有很大差异。很多初学者接手RHEL后第一件事就是打开/boot/grub2/grub.cfg准备修改,结果发现文件头部赫然写着一行警告:不要编辑这个文件,它由/etc/grub.d/中的模板和/etc/default/grub自动生成。这是Grub2与Grub Legacy最本质的区别之一。

整个配置体系分为三层。第一层是/etc/default/grub,这是管理员主要打交道的文件,存放GRUB_TIMEOUT、GRUB_CMDLINE_LINUX等全局变量;第二层是/etc/grub.d/目录,里面是一组可执行脚本,比如10_linux负责生成当前系统的内核启动项,30_os-prober负责探测其他操作系统,40_custom用于添加自定义启动项;第三层才是最终产物/boot/grub2/grub.cfg。执行grub2-mkconfig时,系统会依次运行/etc/grub.d/下的脚本,把输出汇总写入grub.cfg。如果手工编辑grub.cfg,下次内核升级或执行生成命令后,你的修改会被无提示地覆盖掉。

看一个典型的/etc/default/grub内容:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

其中几个参数需要重点理解。GRUB_TIMEOUT控制引导菜单的等待秒数,设为-1表示无限等待;GRUB_DEFAULT=saved配合GRUB_SAVEDEFAULT=true可以实现记忆上次启动项的功能;GRUB_CMDLINE_LINUX则是传给内核的启动参数,修改后必须重新生成配置。值得一提的是,在较新的RHEL版本中引入了BLS(Boot Loader Specification),启动项信息被拆分到/boot/loader/entries/目录下,由GRUB_ENABLE_BLSCFG=true控制是否启用,这也是很多人发现grub.cfg里内核条目变少的原因。

二、修改配置的正确流程与常用实战操作

理解了配置体系,实际操作就变得清晰了。标准流程是:编辑/etc/default/grub,然后执行生成命令。在UEFI系统上,输出路径要精确指定:

# BIOS 系统执行
grub2-mkconfig -o /boot/grub2/grub.cfg

# UEFI 系统执行(注意路径不同)
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

# 修改默认启动内核(先列出所有启动项)
awk -F\' '$1=="menuentry " || $1=="submenu " {print i++ " : "$2}' /boot/grub2/grub.cfg

# 设置第0项为默认启动项
grub2-set-default 0
grub-editenv list

日常运维中有几个高频需求。第一个是调整内核参数,比如临时关闭SELinux测试、开启调试级别的日志,都可以在GRUB_CMDLINE_LINUX里追加参数后重新生成配置。第二个是删除多余内核后清理启动菜单,RHEL默认保留多个旧内核,清理/boot下的旧内核文件后再执行grub2-mkconfig,菜单项会自动减少。第三个是添加自定义启动项,正确做法是在/etc/grub.d/40_custom中追加menuentry块,而不是直接改grub.cfg。

密码保护是另一个实用场景。服务器如果不希望任何人都能进入单用户模式,可以给Grub2菜单设置密码。注意Grub2使用的是PBKDF2加密口令,先生成加密串再写入配置:

# 生成加密口令,记录输出的 pbkdf2 串
grub2-mkpasswd-pbkdf2

# 写入自定义配置文件(不要直接写入 /etc/grub.d/01_users 以外的地方)
cat >> /etc/grub.d/01_users <<'EOF'
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.xxxxx
EOF

# 重新生成配置使其生效
grub2-mkconfig -o /boot/grub2/grub.cfg

设置完成后,进入编辑模式或引导任意启动项都需要验证身份。需要注意的是,密码文件/etc/grub.d/01_users权限应收紧,避免加密串泄露。

三、引导故障救援:忘记root密码与grub.cfg损坏的恢复

Grub2知识最考验人的时刻是引导出问题的时候。最常见的两个场景:忘记root密码,以及误删或损坏grub.cfg导致系统无法启动。

忘记root密码的恢复流程如下:重启系统,在Grub2菜单界面按e键进入编辑模式,找到以linux开头的行,将ro rhgb quiet替换为rw rd.break,按Ctrl+x以修改后的参数启动。进入紧急shell后执行如下操作:

# /sysroot 此时以只读挂载,已通过 rw 参数切换,重新以可写方式挂载
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
sh-4.4# passwd root
sh-4.4# touch /.autorelabel
sh-4.4# exit
switch_root:/# exit

这里有两个细节容易踩坑。一是如果SELinux处于Enforcing模式,改完密码必须创建/.autorelabel标记文件,否则重启后无法登录;二是使用rd.break时初始挂载是只读的,务必先remount为rw。

如果grub.cfg本身损坏甚至整个引导分区丢失,就需要借助RHEL安装介质救援。用安装光盘或ISO启动后选择Troubleshooting,进入Rescue模式,系统会尝试把根文件系统挂载到/mnt/sysimage。之后执行chroot并重建引导:

# 进入救援环境后的恢复步骤
chroot /mnt/sysimage

# 重建 grub.cfg 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

# BIOS 系统重装引导代码到磁盘
grub2-install /dev/sda

# UEFI 系统没有 grub2-install,重新安装 EFI 引导相关包即可
rpm -Uvh --force /mnt/install/BaseOS/Packages/grub2-efi-*.rpm /mnt/install/BaseOS/Packages/shim-*.rpm

重建过程中要注意磁盘设备名的确认,用lsblk核对引导所在的磁盘,grub2-install必须指向整块磁盘(如/dev/sda)而不是具体分区。对于使用LVM的系统,rescue环境下可能需要先执行vgchange -ay激活逻辑卷才能找到根分区。

总结来看,Grub2的管理核心思想就是配置与产物分离:所有改动都落在/etc/default/grub/etc/grub.d/,通过grub2-mkconfig统一生成,而不是直接触碰grub.cfg。掌握这套机制,再加上密码重置和引导重建两套救援流程,日常遇到的绝大多数引导问题都能从容应对。建议在生产环境改动前,先用grub2-mkconfig -o /tmp/test-grub.cfg把结果输出到临时文件检查一遍,确认无误再覆盖正式配置,这是最稳妥的操作习惯。

Grub2配置RHEL引导加载器grub2-mkconfig修改时间:2026-09-05 22:02:57

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/51171.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。