动手实践修复 Linux 无法启动 EFI 故障

/

Linux 系统通常是用作服务器,一般情况下很少重启或关机,但是一旦重启偶然碰到了系统无法正常引导的故障,那必将是一场灾难。为了避免以后遭遇无法修复引导的尴尬场面,于是乎我下定决心,重新捋一遍系统引导修复的功课。
由于 Linux 系统都大同小异,其引导原理也差不太多,这里暂且以 Anolis Linux 为例,RedHat/CentOS 系可直接参照,而 Debian/Ubuntu 等系统也万变不离其宗。

实验环境

  • Anolis Linux 8.4
  • VMware WorkStation 17.0.2

安装好 Anolis Linux系统,确保能正常启动。查看 /boot 目录下的文件

然后将 /boot 目录下的所有文件全部删除

  1. # rm -rf /boot/*

/boot/efi 这个目录是因为直接建立在 /dev/sda1 分区上,所以无法被删除,不过其目录中也会被清空。删除过后我们重启系统,就会发现无法正常启动了。[grub.cfg配置文件和内核文件都没了]

好,准备工作差不多了,接下来我们开始修复。注意,本文有别于传统的修复非 EFI 方式的系统引导,我们这里是 EFI 引导!

进入救援模式

使用原始安装光盘启动,选择进入救援模式。启动后选择 Troubleshooting –> 【注意,光盘系统版本最好与当前系统版本一致】

再选择 Rescue a Anolis OS system —>

进入救援前的提示信息,在这儿选 1 继续;

挂载原系统根目录

为了修复原系统,必须切换根(挂载)到原系统上才能再进行后续的修复操作。我们选择继续救援模式后,它会接着自动帮我们找到当前系统的根目录,然后提示我们可以通过以下命令挂载根目录。这时我们只要回车,然后执行命令即可进入我们需要修复的当前系统了。【进入shell 看关键信息:chroot /mnt/sysroot 这个信息,证明分区表还在】

注意:这里我们是使用标准分区,但有时安装系统使用了默认分区或者手动使用LVM,可能会有问题,这时就应该先尝试激活后再挂载它。【后续再写救援模式下挂载 LVM】

准备组件安装源[YUM]

方法一:使用网络,毕竟网络最方便
方法二:使用光盘充当 yum 源

这里我们采用方法一: 手动设定网络

  1. # 查看当前网卡信息
  2. ip addr show
  3. # 确保启用了网卡,本例网卡名称为 ens160
  4. ip link set dev ens160 up

  1. # 设定IP地址,本例中为8.8.8.8/24
  2. ip addr add 8.8.8.8/24 dev ens160
  3. # 设定网关,本例为 8.8.8.2
  4. ip route add default via 8.8.8.2
  5. 命令完成后,尝试 ping 一下确认网络是否连接正常。

重新安装 grub2-efi 和 shim

安装 grub2-efi 将会在 usr/lib/grub/ 下生成一些所需的库文件,比如 x86_64-efi ,而 shim 则是 shimx64.efi ,用于安全启动,否则使用 grubx64.efi

  1. # dnf reinstall grub2-efi shim


### 安装 kernel

  1. # dnf reinstall "kernel-*-$(uname -r)"

安装完成后,我们立马就可以看到 /boot 目录下的几个久违的子目录都回来了。

但是关键的 grub.cfg 文件并没有出现。

需要重新生成 grub.cfg 文件。

使用grub2-mkconfig命令
grub2-mkconfig -o 输出目录/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/发行版名称/grub.cfg

  1. # grub2-mkconfig -o /boot/efi/EFI/anolis/grub.cfg

如果不报什么错误的话,就可以重新启动了,不出意外的话,启动菜单项就都回来了!

小结

前面的内容可以简单概括成三个步骤:
1、设定网络,配置可使用 YUM 或 DNF源。
2、安装 grub2-efi 和 shim 。
3、安装 kernel 及其组件。


转载请注明作者和出处,并添加本页链接。
原文链接: //www.wwtou.com/yip3Huc.html