在 CentOS 7 的安装与配置过程中,GRUB(GRand Unified Bootloader)扮演着至关重要的角色,它是在计算机启动后加载操作系统的第一个软件,负责管理多个系统内核,并提供引导菜单,理解 GRUB 的安装与配置,不仅能确保系统顺利启动,还能在后续的系统维护中提供极大的便利。

安装过程中的 GRUB 配置
当您通过 Anaconda 安装程序进行到“安装位置”(Installation Destination)界面时,GRUB 的安装便已悄然开始,在这个界面,您不仅需要划分磁盘分区,还需要确认引导加载程序的安装位置。
安装程序会自动检测并列出系统的硬盘,在界面底部,您会看到一个“引导加载程序”选项,默认情况下,GRUB 会被安装在您选择用于安装系统的硬盘的主引导记录(MBR)或 EFI 系统分区(ESP)中,对于大多数单系统用户而言,保持默认选择(/dev/sda)是最稳妥的方案。
下表阐明了不同启动模式下 GRUB 的安装位置差异:
| 启动模式 | 引导设备 | 说明 |
|---|---|---|
| 传统 BIOS | MBR (主引导记录) | 通常选择整个硬盘,如 /dev/sda,GRUB 信息写入硬盘的第一个扇区。 |
| UEFI 模式 | ESP (EFI 系统分区) | 一个小的 FAT32 格式分区,通常为 200MB,GRUB 以 .efi 文件形式存储于此。 |
在分区规划时,如果使用 UEFI 模式,务必创建一个 EFI 系统分区(ESP),Anaconda 通常会自动处理,但手动分区时需要特别注意,GRUB 将在此分区中创建 EFI/centos/grubx64.efi 文件,固件会通过这个文件来启动 CentOS 7。
安装后的 GRUB 管理与维护
系统安装完成后,GRUB 的主配置文件是 /boot/grub2/grub.cfg,强烈不建议直接手动编辑此文件,因为它是由脚本自动生成的,每次系统内核更新后都会被覆盖,正确的做法是修改其模板文件。

修改 GRUB 默认行为,例如更改默认启动项或调整等待时间,需要编辑 /etc/default/grub 文件,使用文本编辑器打开它:
sudo vi /etc/default/grub
您会看到类似如下的内容:
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_TIMEOUT:设置引导菜单的等待时间(秒)。GRUB_DEFAULT:设置默认启动的菜单项。saved表示上次使用的选项,也可以设置为菜单项的序号(如0表示第一项)或标题。
修改完成后,必须运行以下命令来重新生成 /boot/grub2/grub.cfg 文件,使更改生效:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
对于 UEFI 系统,命令可能略有不同,输出路径通常是 /boot/efi/EFI/centos/grub.cfg,但 grub2-mkconfig 命令通常会自动处理。
引导故障与紧急修复
GRUB 的强大之处还在于其提供了丰富的救援功能,当系统无法正常启动时,在 GRUB 菜单出现时按下 e 键,可以编辑当前选中内核的启动参数,这对于调试启动问题或进入紧急模式至关重要,在内核行末尾添加 systemd.unit=rescue.target 或 init=/bin/bash 可以进入单用户模式,方便进行密码重置或文件系统修复。

相关问答 (FAQs)
问 1:我安装了 Windows 和 CentOS 7 双系统,但重装 Windows 后,CentOS 的启动菜单消失了,该怎么办?
答:这是因为 Windows 安装程序重写了硬盘的 MBR,覆盖了原有的 GRUB,您需要恢复 GRUB,方法是:
- 使用 CentOS 7 安装介质(如 U 盘或光盘)启动计算机,选择“Troubleshooting” -> “Rescue a CentOS system”。
- 进入救援模式后,执行
chroot /mnt/sysimage命令将系统环境切换到您硬盘上的 CentOS 系统。 - 重新安装 GRUB 到 MBR,对于传统 BIOS,执行
grub2-install /dev/sda(请将/dev/sda替换为您的系统盘)。 - 重新生成 GRUB 配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg。 - 依次输入
exit退出 chroot 环境,reboot重启计算机,GRUB 菜单应该就会恢复。
问 2:我忘记了 CentOS 7 的 root 密码,如何通过 GRUB 重置?
答:可以利用 GRUB 的引导编辑功能进入单用户模式来重置密码。
- 在启动计算机出现 GRUB 菜单时,按
e键进入编辑界面。 - 找到以
linux16或linuxefi开头的行,这通常是内核启动参数行。 - 将光标移动到该行的末尾,删除
rhgb quiet等参数,然后添加rd.break。 - 按
Ctrl + x启动,系统会进入一个临时的switch_rootshell。 - 依次执行以下命令来挂载文件系统并重置密码:
mount -o remount,rw /sysrootchroot /sysrootpasswd root(然后按提示输入新密码)touch /.autorelabel(这很重要,它会触发 SELinux 重新标记文件,否则可能无法登录)exitexit - 系统会自动重启,重启后您就可以使用新设置的 root 密码登录了。