动手实践修复 Linux 无法启动 EFI 故障
Linux 系统通常是用作服务器,一般情况下很少重启或关机,但是一旦重启偶然碰到了系统无法正常引导的故障,那必将是一场灾难。为了避免以后遭遇无法修复引导的尴尬场面,于是乎我下定决心,重新捋一遍系统引导修复的功课。
由于 Linux 系统都大同小异,其引导原理也差不太多,这里暂且以 Anolis Linux 为例,RedHat/CentOS 系可直接参照,而 Debian/Ubuntu 等系统也万变不离其宗。
实验环境
- Anolis Linux 8.4
- VMware WorkStation 17.0.2
安装好 Anolis Linux系统,确保能正常启动。查看 /boot 目录下的文件
然后将 /boot 目录下的所有文件全部删除
# 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 源
这里我们采用方法一: 手动设定网络
# 查看当前网卡信息
ip addr show
# 确保启用了网卡,本例网卡名称为 ens160
ip link set dev ens160 up
# 设定IP地址,本例中为8.8.8.8/24
ip addr add 8.8.8.8/24 dev ens160
# 设定网关,本例为 8.8.8.2
ip route add default via 8.8.8.2
命令完成后,尝试 ping 一下确认网络是否连接正常。
重新安装 grub2-efi 和 shim
安装 grub2-efi 将会在 usr/lib/grub/ 下生成一些所需的库文件,比如 x86_64-efi ,而 shim 则是 shimx64.efi ,用于安全启动,否则使用 grubx64.efi
# dnf reinstall grub2-efi shim
### 安装 kernel
# 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
# grub2-mkconfig -o /boot/efi/EFI/anolis/grub.cfg
如果不报什么错误的话,就可以重新启动了,不出意外的话,启动菜单项就都回来了!
小结
前面的内容可以简单概括成三个步骤:
1、设定网络,配置可使用 YUM 或 DNF源。
2、安装 grub2-efi 和 shim 。
3、安装 kernel 及其组件。
转载请注明作者和出处,并添加本页链接。
原文链接:
//www.wwtou.com/yip3Huc.html