![2f06622fa502ee6e38702351bb4d250d.png](https://i-blog.csdnimg.cn/blog_migrate/a1f211ecee71846172ff2db0a4ae8308.jpeg)
本文作者 / 飞哥
专注于OpenStack计算、Python
热爱大海、雪山
导 言 UEFI正在逐渐取代传统的BIOS,在使用UEFI启动系统的过程中,有时会遇到系统无法启动的问题。如,制作好的centos虚拟机镜像与iso分离后竟无法启动?突然掉电导致引导文件丢失?怎样才能修复这些问题使得虚拟机能够正常工作?本篇描述了在openstack环境下一次引导文件丢失问题的修复过程。一、问题描述
在一个openstack环境中,对几台虚拟机进行了resize操作,将内存有32G调整到了48G,磁盘和cpu均保持不动。其中有2个虚拟机出现了resize完成后无法启动的情况,通过虚拟机console界面可以看到虚拟机报如下错误信息:![b0770a38b6587480c02a48d3463c0ca3.png](https://i-blog.csdnimg.cn/blog_migrate/b2ed637db827c1ad5cdee4964d7e37a5.png)
二、UEFI是什么
UEFI(Unified Extensible Firmware Interface, 统一的可扩展固件接口)是一种用来替代 BIOS 的标准,它一开始叫 EFI,后来统一之后改叫 UEFI。对于硬盘启动而言,UEFI 的作用之一是读取硬盘上的引导信息,然后加载。 UEFI固件会遍历磁盘上的每个EFI系统分区(按照磁盘上的分区顺序),固件将查找位于特定位置的具有特定名称的文件,即\EFI\BOOT\BOOT{计算机类型简称}.EFI。 对于x86_64平台来说,计算机类型简称为x64,所以这个默认的特定文件是\EFI\BOOT\BOOTx64.EFI;对于aarch64平台来说,计算机类型简称为AA64,所以这个默认的特定文件是\EFI\BOOT\BOOTAA64.EFI。 在安装CentOS操作系统的时候,系统会要求必须创建一个/boot/efi分区,否则系统无法引导启动,这个分区就是前面提及的EFI系统分区,这个分区里面存放了UEFI启动所需要的文件。下面通过一个具体的虚拟机来看下这个分区下的文件:![3164cc4e559994f28c0b008e8cfe1d28.png](https://i-blog.csdnimg.cn/blog_migrate/2e9f52949d1d95acc18b5ccb408e5b45.png)
![ecbdab836f97b9509429a0ee5ade5624.png](https://i-blog.csdnimg.cn/blog_migrate/d706775e6e8d4b8db08b442e8cf63ebd.png)
三、问题分析
现在再来看一下刚开始提到的系统启动失败的问题,从打印信息可知shim调用StartImage()发生了异常,原因是找不到\EFI\neokylin\grubaa64.efi文件。![3bf04bf1ded1286e0d9cfa43c1d34c32.png](https://i-blog.csdnimg.cn/blog_migrate/53d88c43ed9df06efde86a6f39d7a0ea.png)
![5dc0baea02e403e0e842d84194b3419b.png](https://i-blog.csdnimg.cn/blog_migrate/f383713dfbf1becdeae847ca83a632bf.png)
[root@compute ~]# yum install -y libguestfs-tools
接下来使用guestmount命令将虚拟机的系统盘挂载到/mnt目录下:
![0dd3099d7aa842cb8d0444b83fa52d29.png](https://i-blog.csdnimg.cn/blog_migrate/94600cb0e31cb8a5de4fe91b8f61fd1a.png)
四、问题解决
知道具体的原因后,问题解决就变得很容易了,只需要从正常的虚拟机中将grubaa64.efi文件拷贝出来,并放到/mnt/boot/efi/EFI/neokylin目录下就可以完成虚拟机的修复。![963d32393554fcb5f5c169bc5efc89a8.png](https://i-blog.csdnimg.cn/blog_migrate/449ed800607519e963a45b79d922b644.png)
参考资料:
1、https://blog.woodelf.org/2014/05/28/uefi-boot-how-it-works.html 2、http://bbs.wuyou.net/forum.php?mod=viewthread&tid=303679 3、http://jcf94.com/2017/08/06/2017-08-06-efi/ 4、https://access.redhat.com/documentation/zh-tw/red_hat_enterprise_linux/6/html/installation_guide/s2-grub-whatis-booting-uefi5、http://blog.itpub.net/20747382/viewspace-2153053/
![10c2ffdaf672e5d0d8e287935cb5f408.gif](https://i-blog.csdnimg.cn/blog_migrate/2ac8ec8efae061bf0698f02c7647d5fe.gif)
![dcfa4fb0fe222c66c305f77f33c0a49a.gif](https://i-blog.csdnimg.cn/blog_migrate/2351bacb26c60de5f36701eacdc7120a.gif)
![1ce9e91daa9ab58f6e7f1dfa6fed34f8.png](https://i-blog.csdnimg.cn/blog_migrate/186272cfe948225cff77409ec518077e.jpeg)
![1fe4b653a99aff8a7aeb00e005a77810.png](https://i-blog.csdnimg.cn/blog_migrate/0eeef9e241dcbf8b61b31121ae2f3b8c.png)