GRUB (GRand Unified Bootloader)2 作为 GNU 项目的一部分,是很多著名 Linux 发行版例如 RHEL、CentOS 以及 Ubuntu 等的默认引导程序。GRUB 是主机启动时最先运行的程序,其主要任务是加载内核程序,加载成功后,由内核程序初始操作系统的其他程序。

如果 GRUB 程序出现问题,则最直接的后果就是主机不能正常启动。如果作为系统管理人员,当遇到这类问题,可以尝试恢复 GRUB 程序而解决启动故障。

本教程将详细讨论 CentOS 8 出现以下三种情形时,如何通过修复 GRUB 程序来重新启动主机:

  • GRUB 配置文件 grub.cfg 出错或丢失
  • CentOS 8 的内核程序例如 vmlinuz-4.x 出错或丢失
  • CentOS 8 的初始化进程例如 initramfs-4.x 出错或丢失

1] 实验环境

  • 操作系统:CentOS 8
  • 主机名:CentOS-8
  • IP 地址:172.16.200.1

2] CentOS 8 系统如何恢复 gurb.cfg

首先登录到主机,然后使用如下命令模拟 grub.cfg 文件丢失:

# rm -rf /boot/grub2/grub.cfg

命令执行后,系统仍然可以顺畅的运行,直到我们重新启动主机,系统就会因为找不到 grub.cfg 文件而启动失败:

图.1 删除 grub.cfg 文件后系统启动失败

见到这个界面后,也不必着急,因为还有处理办法。

首先将 CentOS 8 的系统安装盘装入主机,通过光盘启动主机,使用系统盘的恢复功能修复问题:

图.2 CentOS 8 镜像启动后选择进入故障处理界面

系统启动后,将光标移动至”Troubleshooting”,然后回车,进行故障处理界面:

图.3 选择故障处理内容

我们想要让已经安装的系统重新启动,当然选择”Rescue a CentOS Linux system”进行系统恢复,将光标移动至此项目后,点击回车继续:

图.4 进入恢复命令提示行

恢复工具首先要要求选择是否挂载原来的文件系统,输入”1″选择挂载后按回车,我们之前的系统就会被挂载到”/mnt/sysimage”目录,之后,会进入恢复程序的命令提示符。

根据前面的提示,输入如下命令即可以使用我们原来的文件系统:

sh-4.4# chroot /mnt/sysimage

使用如下命令,则会重新生成”grub.cfg”文件:

bash-4.4# grub2-mkconfig -o /boot/grub2/grub.cfg

如果主机采用 UEFI 方式启动,则使用如下命令:

bash-4.4# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

如果系统启用了SELinux,则使用如下命令创建一个触发重标记进程的文件:

bash-4.4# touch /.autorelabel

最后,退出当前SHELL并重新启动主机:

bash-4.4# exit
sh-4.4# reboot

图.5 使用重新创建的启动菜单文件启动 CentOS 8

至此,我们已经成功恢复了”grub.cfg”文件,系统可以正常启动。

3] CentOS 8 系统如何恢复内核文件 vmlinuz-4.x

同样,我们首先模拟一个破坏性操作,注意要删除当然系统启动的内核,否则达不到破坏效果:

# rm -f /boot/vmlinuz-4.18.0-80.el8.x86_64

找不到内核文件,系统在启动时会提示出错,之后的操作同恢复启动菜单类似,通过 CentOS 8 系统盘启动系统,进入故障处理程序,然后选择系统恢复菜单,进入恢复命令提示符。使用如下命令重新安装一个内核文件:

sh-4.4# cd /mnt/install/repo/BaseOS/Packages
sh-4.4# rpm -ivh --root=/mnt/sysimage --replacepkgs kernel-core-4.18.0-80.el8.x86_64.rpm
sh-4.4# reboot

图.6 CentOS 8 系统恢复内核文件

从图.6中可以明显的看到命令执行的效果,原来没有的内核文件被成功创建。重新系统后,会以此内核重新启动系统,我们也成功的将内核文件受到破坏的系统进行了修复。

4] CentOS 8 系统如何恢复初始化守护进程 initrd

系统初始化进程同样位于”/boot”目录,使用如下命令模拟初始化进程文件损坏:

# rm -f /boot/initramfs-4.18.0-80.el8.x86_64.img

之后的步骤同前面一样,进入恢复命令提示符,使用如下命令恢复初始化程序:

sh-4.4# chroot /mnt/sysimage
bash-4.4# dracut
bash-4.4# ls /boot/initramfs-*
bash-4.4# exit
sh-4.4# reboot

图.7 CentOS 8 系统恢复初始化进程

以上就是关于 CentOS 8 系统修复 GRUB 2 的所有内容。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注