修复 Failed to open \efi\centos\grubx64.efi - not found

最近由于一台Liunx服务器突然断电,导致Centos系统再开机时报错如下图:
1-1

错误信息Failed to open \efi\centos\grubx64.efi - not found

1、进入急救模式

大致就是因为开机时系统没有找到grubx64.efi这个文件导致系统进不去了。于是开始进行系统修复(主要就是把丢失的这个文件给放到原来的位置上去),我在网上找了很多文章,大致都是需要使用Centos系统安装盘光驱或者Centos的U盘启动盘 在选择安装系统的界面如下图:
2-1
3-1

进入rescue system,然后将/mnt/sysimage文件夹下面的grubx64.efi文件复制到丢失文件目录/boot/efi/EFI/centos/下。

可能有些电脑在bios里面无法找到U盘启动选项,这些需要去找主板对应的bios设置进行设置,具体要看自己的电脑主板是什么品牌和型号就不在这里细说了(网上都能找到这些设置)。

在进入rescue system时,也有可能会报modprobe:ERROR: could not insert 'floppy'modprobe:ERROR: could not insert 'edd':No

4-1

然后后面会打印200个脚本执行超时,并最终进入>dracut:/#,这时候是因为进入rescue system选择设置中的stage2=xxxx路径不正确导致的,所以这个时候进入>dracut:/#后,执行:

# 查看/dev下面的硬盘和外部驱动器
ls /dev

一般U盘会是sdbx(x是数字)或者sdc这样的挂载路径,找到插入的U盘是哪一个,然后重启电脑,再次进入选择rescue system的页面
5-1

选择Rescue a CentOS system,然后按e进入它的引导配置编辑页面,然后修改配置中的stage2=hd:LABEL=CentOS\xxxxstage2=hd:/dev/sdbx(sdbx为前面找到的U盘路径),然后按control + x运行,这时候就能正常进入rescue system了。
6-1

然后这个时候进入/mnt/sysimage文件夹下面,将grubx64.efi文件复制到丢失文件目录/boot/efi/EFI/centos/下重启即可。但是我却发现这个目录下面根本没有丢失那个文件,并且我在根目录下使用find . -name '*.efi'进行全局查找,其它目录下也没有丢失的这个文件,既然现在找不到这个文件,那就只能从外部把这个文件放进去了。

我在制作完成CentOS启动盘后,我的U盘中是有这个CentOS需要的系统文件的,那么我可以将的U盘挂载进去,就能拿到我的这个文件了。

2、挂载U盘

  • 查看磁盘列表

fdisk -l

找到U盘的盘符,U盘容量固定8G、16G、或者32G、64G的,而且一般都是sdbx或者sdc这类名称,所以比较好找。

  • 查看挂载列表

df -h

这个时候会发现CentOS并没有将U盘挂载上去。

  • 挂载U盘

# 创建挂载的文件夹
mdkri /mnt/usb
# 将U盘挂载到文件夹下面
mount /dev/sdbx /mnt/usb

这个时候会发现CentOS的启动盘U盘无法进行挂载,估计可能是因为之前做了启动盘的原因,无法再次挂载,然后我使用了另外一个U盘,将U盘也格式化为FAT32格式,并将grubx64.efi放进去,然后进行挂载,结果发现挂载成功之后,里面并没有grubx.efi文件,而只有一个found+local的文件夹,里面也是空空如也,并且卸载这个U盘挂载umount \mnt\usb再插入windos电脑显示无法读取,只能进行格式化才行。可见这样进行挂载之后U盘的文件系统被破坏了,里面的文件也丢失了,这之后我还尝试过挂载另外的Liunx硬盘,依然是失败的。

3、最终解决办法

其实很简单,将CentOS的启动U盘拔出来,这时候运行命令

fdisk -l

可以发现启动盘还在,这是因为启动盘在启动了之后其实已经复制内容到系统中了,并虚拟了一个盘符进行挂载,这个时候的盘符跟插在电脑上的启动U盘已经没有什么关系了,并且因为这种启动U盘的特性,在启动之后并不能再看到真实的U盘盘符,所以把U盘拔掉再重新插上去即可。

再次插上去之后,会发现有一个名为sdc文件系统为FAT32(其它的类型U盘文件系统可能不一样)的盘符,我们直接使用命令将这个盘符挂载上去即可

mount /dev/sdc /mnt/usb

这个时候进入 /mnt/usb目录就能访问U盘中的文件了。

然后执行copy命令

# 将U盘中的grubx64.efi文件复制到/boot/efi/EFI/centos/目录中
cp /mnt/usb/EFI/BOOT/ /boot/efi/EFI/centos/grubx64.efi

卸载U盘

umount /mnt/usb

然后拔出U盘,重启电脑将bios中的启动项改回电脑的系统硬盘就能进入系统了。如果还有其它的文件丢失的话,也可以使用同样的方式将文件放入到丢失的位置上去。