在CentOS系统中,GRUB(GRand Unified Bootloader)是负责加载操作系统内核的关键引导程序,无论是新硬盘的安装、系统崩溃后的修复,还是多系统环境的配置,正确安装GRUB都是确保系统能够正常启动的核心环节,本文将详细介绍在CentOS环境下,尤其是在不同固件模式(BIOS与UEFI)中安装和修复GRUB2的完整流程与注意事项。

什么是GRUB2
GRUB2是目前大多数Linux发行版,包括CentOS 7及更高版本所使用的默认引导加载器,它取代了早期的GRUB Legacy,提供了更强的功能、更灵活的配置和更好的模块化支持,GRUB2的主要任务是在计算机启动时,将控制权从固件(BIOS或UEFI)手中接管过来,然后根据其配置文件加载指定的Linux内核(或其他操作系统内核)以及初始内存盘,最终将系统启动权交予内核。
准备工作:启动救援环境
在大多数需要手动安装GRUB的场景下,系统本身是无法正常启动的,第一步是准备一个可引导的救援环境,最常用且推荐的方法是使用CentOS的官方安装介质(DVD或USB)。
- 将CentOS安装光盘或U盘插入计算机。
- 重启计算机,并进入BIOS/UEFI设置界面,将启动顺序调整为首先从该安装介质启动。
- 从安装介质启动后,在欢迎界面选择“Troubleshooting”(故障排除)。
- 接着选择“Rescue a CentOS system”(救援CentOS系统)。
- 系统会尝试查找并挂载你硬盘上的CentOS安装,如果成功,它会提示你系统已被挂载在
/mnt/sysimage目录下,选择“1”继续,并进入一个shell提示符,如果查找失败,你也需要进入shell,然后手动进行挂载,这个救援环境就是我们进行GRUB修复工作的平台。
核心步骤:在传统BIOS模式下安装GRUB2
对于使用传统BIOS和MBR(主引导记录)分区表的硬盘,GRUB2的安装过程相对直接,以下是在救援环境中的详细操作步骤。
识别根文件系统分区
你需要确定CentOS系统的根分区()是哪个设备,可以使用lsblk或fdisk -l命令来查看。
lsblk
输出结果可能类似这样,你需要根据分区大小和类型来判断哪个是根分区(和引导分区(如果单独分出来了,例如/boot)。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 49.5G 0 part / 在这个例子中,是/dev/sda2,/boot是/dev/sda1。
挂载系统文件系统
将你的CentOS系统挂载到救援环境的/mnt目录下,如果/boot是独立分区,也需要一并挂载。
# 挂载根分区 mount /dev/sda2 /mnt # boot是独立分区,挂载它 mount /dev/sda1 /mnt/boot
挂载必要的虚拟文件系统
为了让后续的chroot操作正常工作,需要将一些虚拟文件系统也挂载进去。

mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys
切换到系统根目录
使用chroot命令,将当前环境的根目录切换到你硬盘上的CentOS系统。
chroot /mnt /bin/bash
你所有的操作都像是在你本地的CentOS系统中进行一样。
安装GRUB2到主引导记录(MBR)
这是最关键的一步,使用grub2-install命令将GRUB2写入硬盘的主引导记录。目标是整个硬盘设备(如/dev/sda),而不是某个分区(如/dev/sda1)。
grub2-install /dev/sda
如果命令执行成功,你会看到“Installation finished. No error reported.”的提示。
生成GRUB2配置文件
安装完引导程序后,还需要生成一个配置文件,它定义了启动菜单的内容。
grub2-mkconfig -o /boot/grub2/grub.cfg
这个命令会自动扫描系统中的内核和其他可引导的操作系统(如Windows,前提是安装了os-prober包),并生成相应的菜单项。
清理并重启
完成以上步骤后,退出chroot环境,卸载所有文件系统,然后重启计算机。

exit umount -R /mnt reboot
记得在重启前移除安装介质,并恢复BIOS的启动顺序。
重要区别:UEFI模式下的安装
对于使用UEFI固件和GPT分区表的现代计算机,GRUB2的安装方式有所不同,它不再写入MBR,而是以一个特殊的EFI应用程序文件的形式存储在EFI系统分区(ESP)中。
安装流程的前几步(识别分区、挂载)与BIOS模式类似,但有以下关键区别:
- EFI系统分区(ESP):你需要额外识别并挂载ESP,它通常是一个小的(100-500MB)、FAT32格式的分区,并带有
boot和esp标志。 - 挂载ESP:在
chroot之前,需要将ESP挂载到/mnt/boot/efi。
# 假设 /dev/sda1 是ESP mount /dev/sda1 /mnt/boot/efi
- 安装命令:在
chroot后,grub2-install命令需要指定目标为x86_64-efi,并指明ESP的路径。
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --recheck
- 生成配置文件:这一步与BIOS模式完全相同。
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
注意,在UEFI模式下,配置文件通常位于/boot/efi/EFI/centos/目录下,具体路径可能因发行版而异,但grub2-mkconfig通常会自动处理。
常用命令参考表
| 命令 | 用途 | 关键参数/示例 |
|---|---|---|
lsblk / fdisk -l | 查看磁盘和分区结构 | 用于识别根分区和引导分区 |
mount | 挂载文件系统 | mount /dev/sda2 /mnt |
chroot | 切换根目录环境 | chroot /mnt /bin/bash |
grub2-install | 将GRUB引导程序写入磁盘 | BIOS: grub2-install /dev/sdaUEFI: grub2-install --target=x86_64-efi --efi-directory=/boot/efi |
grub2-mkconfig | 生成GRUB启动菜单配置文件 | grub2-mkconfig -o /boot/grub2/grub.cfg |
相关问答FAQs
我按照步骤重装了GRUB2,但是启动菜单里只有CentOS,找不到Windows系统了,怎么办?
解答: 这个问题通常是因为GRUB2的配置生成工具没有检测到Windows系统,请确保你的系统中已经安装了os-prober这个包,在chroot到你的CentOS系统后,可以运行以下命令安装它:
yum install os-prober
安装完成后,再次运行grub2-mkconfig命令来重新生成配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
这次,os-prober会扫描其他分区,如果找到Windows,就会将其添加到启动菜单中。
我在执行grub2-install时,不小心写成了分区名(如/dev/sda1)而不是磁盘名(如/dev/sda),现在电脑无法启动了,该如何修复?
解答: 这是一个非常常见的错误,将GRUB安装到分区而不是磁盘的MBR或EFI区域,会导致固件找不到引导程序,修复方法很简单,就是重新走一遍正确的安装流程,你需要再次使用CentOS救援介质启动,进入救援环境,然后严格按照本文“在传统BIOS模式下安装GRUB2”或“重要区别:UEFI模式下的安装”章节的步骤操作,确保在执行grub2-install命令时,目标设备是整个硬盘(例如/dev/sda),而不是任何分区,只要正确地重新安装一次,系统就能恢复正常启动。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复