在 Red Hat Enterprise Linux 9 (RHEL 9) 中,GRUB2 作为默认的引导加载程序,其核心原理和配置方式与主流 Linux 发行版保持一致,但更强调企业级环境下的稳定性与安全性。以下是对其关键方面的详解:
GRUB2 在 RHEL 9 中的核心组成与工作流程
1. 引导阶段:RHEL 9 的启动过程遵循 GRUB2 的标准多阶段加载机制。
* Stage 1:BIOS 或 UEFI 固件将控制权交给位于磁盘 MBR 或 EFI 系统分区 (ESP) 中的 GRUB2 第一阶段引导程序。
* Stage 1.5 / Stage 2:第一阶段加载核心映像 (core.img),该映像包含必要的文件系统驱动模块(如 ext4、xfs),使其能够访问 /boot 分区。随后,core.img加载位于 /boot/grub2/目录下的第二阶段引导程序。
* 配置加载:第二阶段引导程序读取并解析 /boot/grub2/grub.cfg配置文件,生成启动菜单并引导选定的操作系统内核。
2. 关键配置文件:/boot/grub2/grub.cfg是 GRUB2 的核心配置文件,它由 grub2-mkconfig工具自动生成,基于 /etc/default/grub 和 /etc/grub.d/目录下的脚本。重要提示:直接编辑 grub.cfg是不推荐的,因为系统更新会覆盖你的修改。正确的做法是修改其源文件。
* /etc/default/grub:此文件定义了全局默认设置,例如:
* GRUB_DEFAULT=0:设置默认启动项(0 表示第一个菜单项)。
* GRUB_TIMEOUT=5:设置启动菜单超时时间(秒)。
*GRUB_CMDLINE_LINUX="rhgb quiet":传递给 Linux 内核的默认参数(如 `rhgb` 代表“红色帽子图形引导”,`quiet` 减少启动信息)。
* /etc/grub.d/:此目录包含生成 grub.cfg 的脚本,例如 10_linux用于自动生成 Linux 内核启动项,40_custom用于添加自定义启动项。
常见配置与管理操作
1. 修改默认启动项或超时时间:
* 编辑 /etc/default/grub文件,修改 GRUB_DEFAULT或GRUB_TIMEOUT的值。
* 保存文件后,必须运行sudo grub2-mkconfig -o /boot/grub2/grub.cfg命令来重新生成 grub.cfg文件,使更改生效。
2. 添加自定义启动项:
* 编辑 /etc/grub.d/40_custom 文件,在文件末尾添加一个 menuentry块。例如,为一个旧版内核添加启动项:
```bash
menuentry 'RHEL 9 (Old Kernel)' {
set root='(hd0,2)'
linux /vmlinuz-5.14.0-xxx root=/dev/sda2 ro rhgb quiet
initrd /initramfs-5.14.0-xxx.img
}
```
* 修改完成后,同样运行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg使更改生效。
3. 使用 GRUB2 命令行进行故障排除:
* 在启动时,当 GRUB2 菜单出现时,按 `c` 键进入命令行模式。
* 在此模式下,可以手动加载内核和初始化内存盘来启动系统,是解决引导失败问题的强大工具。例如:
```
grub> set root=(hd0,2)
grub> linux /vmlinuz-5.14.0-xxx root=/dev/sda2 ro
grub> initrd /initramfs-5.14.0-xxx.img
grub> boot
```
与 RHEL 9 特性的关联
RHEL 9 的 GRUB2 配置与系统其他组件紧密集成,例如:
* 安全启动 (Secure Boot):RHEL 9 默认支持 UEFI 安全启动,GRUB2 会与系统密钥配合,确保只加载经过签名的引导组件,增强了系统安全性。
* Stratis 文件系统:作为 RHEL 9 引入的本地存储管理工具,Stratis 文件系统可以作为 /boot 分区的文件系统,GRUB2 的模块化设计使其能够支持并从 Stratis 文件系统中加载内核。
总而言之,RHEL 9 中的 GRUB2 提供了稳定、安全且高度可配置的引导环境。通过理解其配置文件的生成机制和管理命令,可以有效地进行系统引导管理与故障排除。