修复CentOS丢失grubx64.efi文件
修复 Failed to open \efi\centos\grubx64.efi - not found
修复 Failed to open \efi\centos\grubx64.efi - not found
最近由于一台Liunx服务器突然断电,导致Centos系统再开机时报错如下图:
错误信息Failed to open \efi\centos\grubx64.efi - not found
1、进入急救模式
大致就是因为开机时系统没有找到grubx64.efi
这个文件导致系统进不去了。于是开始进行系统修复(主要就是把丢失的这个文件给放到原来的位置上去),我在网上找了很多文章,大致都是需要使用Centos系统安装盘光驱
或者Centos的U盘启动盘
在选择安装系统的界面如下图:
进入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
。
然后后面会打印200个脚本执行超时,并最终进入>dracut:/#
,这时候是因为进入rescue system
选择设置中的stage2=xxxx
路径不正确导致的,所以这个时候进入>dracut:/#
后,执行:
# 查看/dev下面的硬盘和外部驱动器
ls /dev
一般U盘会是sdbx
(x是数字)或者sdc
这样的挂载路径,找到插入的U盘是哪一个,然后重启电脑,再次进入选择rescue system
的页面
选择Rescue a CentOS system
,然后按e
进入它的引导配置编辑页面,然后修改配置中的stage2=hd:LABEL=CentOS\xxxx
为stage2=hd:/dev/sdbx
(sdbx为前面找到的U盘路径),然后按control + x
运行,这时候就能正常进入rescue system
了。
然后这个时候进入/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中的启动项改回电脑的系统硬盘就能进入系统了。如果还有其它的文件丢失的话,也可以使用同样的方式将文件放入到丢失的位置上去。