EFI目录

下图只有Boot和Microsoft,如果你还装其他系统可能还会有其他的文件夹,比如你还装了Ubuntu(或者manjaro),那么会有个叫Ubuntu(manjaro)的文件夹与Boot、Microsoft并存。

Boot是计算机默认引导文件所在的目录,Microsoft是微软Windows系统引导所在的目录。
Boot目录:

Microsoft目录:

Microsoft\Boot目录:

上图中红框内的bootmgfw.efi就是windows默认的系统引导文件。

几个引导文件的说明

引用:https://blog.csdn.net/lindexi_gd/article/details/50392343
计算机默认引导 -----------就是不管你的计算机有没有操作系统,定义了UEFI启动后将通过Bootx64.efi 引导你的计算机,并进入各种模式,维护、安装、计算机或者系统这里是 Bootx64.efi ,它只是一个通用名,权限丰富且大于Windows 默认,就是说如果你的Windows 默认的启动文件不在了,启动计算机默认的引导文件Bootx64.efi 也是可以启动计算机的。使用计算机默认文件随时可以在各种环境下启动计算机,EFI SHELL、ISO、Windows、Linux...都可以,通吃型.

Windows默认引导 -------就是你为计算机安装了操作系统,或者修复了UEFI引导后,启动菜单会有 Windows Boot Manager 选项,该选项默认从bootmgfw.efi 启动系统bootmgfw.efi 该位置的该文件只能用于启动Windows,不是通用名,权限单一

详细解释看原作者文章,总结来说就是一块干净的硬盘,装上win后,此时的Bootx64.efi 很可能就是bootmgfw.efi ,我没有经过验证,但是从表面看起来是这样的,所有我说很可能是,不敢保证。如果这时候装Linux与win并存,Bootx64.efi很可能会被修改,然后Bootx64.efi会指向grub,grub再去遍历一遍整个硬盘上的所有系统引导,做一个列表供你选择是用Linux(比如Ubuntu)还是用win。如果你选择是win那就再次转到bootmgfw.efi 去启动win,如果你选择的是Linux(比如Ubuntu)那就转到系统的引导。
再次声明:上述结论全是猜测,我没有实际测试,只是从现象来做出的推论。

验证猜测

我安装win之后又安装了Manjaro,EFI目录内容如图比起之前多了一个Manjaro的文件夹,该文件夹下只有一个grubx64.efi文件。而且安装完manjaro之后,EFI\Boot目录下的bootx64.efi文件大小也发生了变化,且此时我开机进入的是jrub,然后在jrub中选择要开机的系统。用hash校验了一下EFI\Boot\bootx64.efi 与 EFI\Manjaro\grubx64.efi文件,结果如图

很明显这是同一个文件。再校验下安装manjaro之前的EFI\Boot\bootx64.efi文件,明显是与安装完manjaro之后不一样的,如下图

这样就验证了上一小节的猜想,安装完manjaro之后,修改了系统默认(从硬盘启动)的引导,指向GRUB来管理系统引导。

为了更有说服力,我又做了下面的测试。
1、开机进入系统boot,修改boot顺序,默认(第一个)为硬盘启动,此时我的EFI\Boot\bootx64.efi文件实际上安装完manjaro之后的grubx64.efi。开机后进入的是grub。
2、开机进入系统boot,修改boot顺序,默认为Window boot management,开机,进入的是Windows。
3、开机进入系统boot,修改boot顺序,默认为从manjaro启动,开机后进入的是grub。
4、设置boot默认从硬盘启动,删除EFI\Boot目录下所有文件,把EFI\Manjaro\grubx64.efi 复制到EFI\Boot 重命名为bootx64.efi,开机进入的是grub
5、设置boot默认从硬盘启动,删除EFI\Boot目录下所有文件,把EFI\Microsoft\Boot\bootmgfw.efi 复制到EFI\Boot 重命名为bootx64.efi,开机进入的是windows
由以上可以得到结论:
1、在BIOS设置界面种设置boot为从硬盘启动,走的是EFI\Boot\bootx64.efi
2、在BIOS设置界面种设置boot为Window boot management,走的是EFI\Microsoft\Boot\bootmgfw.efi
3、从硬盘启动,走的是EFI\Boot\bootx64.efi,EFI\Boot\bootx64.efi指向哪个系统就走哪个系统(win或者Linux)。

win10系统功能性更新后丢失Linux引导

猜测:很可能是efi\boot\bootx64.efi 文件被修改成直接引导到efi\microsoft\boot\bootmgfw.efi,导致系统不去加载grub。
猜测修复办法1:想要修复就可以再系统更新之前备份efi\boot目录,系统更新完后替换到该目录。(下面一句话适用于manjaro)但是我们一般很少有备份系统的习惯,这时候可以就去把EFI\Manjaro\grubx64.efi文件复制并重命名成EFI\Boot\bootx64.efi。
猜测修复办法2:如果你是Ubuntu,找到boot目录下的grubx64.efi(或者shimx64.efi)复制到efi\boot目录下,并重命名为bootx64.efi。如果你是Manjaro系统就去镜像中复制BOOTX64.efi文件丢到efi\boot中。
上述猜测应该是错误的,我对比了下manjaro镜像中的BOOTX64.efi与实际安装完efi目录下的bootx64.efi文件,这两个文件并不一样,再次猜测,镜像中的可能是引导U盘的。目前来看修复方法1是比较靠谱的。

猜测修复办法3:使用easyUEFI添加Liunx引导,然后调整新添加的为默认项(如下图,排在最顶上)。

那么Ubuntu系统下grubx64.efi和shimx64.efi有什么区别呢?
仅仅针对Ubuntu,在安全启动(serureboot)关闭的情况下,你可以使用grubx64.efi。如果安全启动打开则需要选择shimx64.efi。

一些很好的贴子

https://zhuanlan.zhihu.com/p/31365115
https://linux.cn/article-4667-1.html
https://wiki.deepin.org/wiki/Windows%E5%92%8Cdeepin%E5%8F%8C%E5%90%AF%E5%8A%A8%E7%AE%80%E5%8D%95%E5%AE%9E%E7%94%A8%E7%9A%84%E6%96%B9%E6%B3%95
https://linux.cn/article-8481-1.html

EFI系统引导的一些零碎知识点的更多相关文章

  1. 删除EFI系统分区(ESP)后Windows无法启动,重建引导分区并修复启动的过程

    @ 目录 一.开机故障描述 二.工具: 三.什么是EFI系统分区 四.如何查看EFI系统分区 五.删除后如何重建系统分区 1.建立未分配空间 2.建立ESP分区 3.按下图,ESP分区的大小200M即 ...

  2. IBM X3850 Windows 无法安装到这个磁盘。选中的磁盘具有MBR分区表。在 EFI 系统上,Windows 只能安装到 GPT 磁盘

    以前安装的是window2003 32位, 改装为2012 64位的时候.出现 Windows 无法安装到这个磁盘.选中的磁盘具有MBR分区表.在 EFI 系统上,Windows 只能安装到 GPT ...

  3. 教程 打造OS X Mavericks原版 EFI Clover 引导安装

    自从 Mavericks 10.9 发布DP版到现在的GM版以来,以前Clover引导原版InstallESD.dmg方式安装原版的方法已经不能使用,而且已经不能引导安装了,所以从GM版发布以前,终于 ...

  4. 9.Linux系统引导流程

    一.Linux系统引导流程 当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1. ...

  5. 安装grub到U盘分区,实现多系统引导

    目录 1.分区工具及分区类型 1.1 显示分区表和分区信息 1.1.1 fdisk -l 1.1.2 gdisk -l 1.1.3 parted -l 1.2 常见分区类型 1.3 分区样例 1.3. ...

  6. 使用 boot-repair 对 Windows + Ubuntu 双系统引导修复

    问题描述:     由于在windows上进行更新/重装/修改了引导设置以后,windows会“自私”地重写引导,导致Ubuntu系统引导消失而无法选择Ubuntu启动.

  7. 001_关于选中的磁盘具有MBR分区表。在 EFI 系统上,Windows 只能安装到 GPT 磁盘。问题解决

    问题: 今天我的diy电脑重装系统时,遇到了一个棘手的问题.在选择安装分区的时候,提示有这样的错误. Windows 无法安装到这个磁盘.选中的磁盘具有MBR分区表.在 EFI 系统上,Windows ...

  8. EFI系统分区如何删除

    U盘或者硬盘被做了系统安装盘. 结果在格式化都是失败,分区也不行. 有了新招 EFI分区是您的系统启动引导的分区,存放引导启动的文件的,因此它是一个操作系统独立的分区,实际上它是UEFI加载的固件和应 ...

  9. Win7&Ubuntu12.04 双系统引导问题

    周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述:    在重装 ...

随机推荐

  1. python学习笔记3-列表

    # 1.列表长度可变,内容可修改 a = [0,1,2,3] a[0] = 'a0' a # ['a0', 1, 2, 3] # 2.添加元素 # 2.1列表末尾添加元素 a.append(4) a ...

  2. Spring 基于Session的创建实例

    需求 提供一个网页,根据导入的Excel数据计算结果. 第一版本设计 Controller层 @RestController public class QuoteController { privat ...

  3. C语言之指针若干问题

    1.指针变量的赋值问题. 常常有偷懒的小伙子,这样赋值 int *Pointer =  3:/ 这是给Pointer 所指的变量赋值,刚创建Pointer时,它所指的变量是不固定的,可能是某个重要的系 ...

  4. 各种15min(启动、横盘、破位)样例

    15min-m20=day m1.5 15min-m60=day m5 15min-m125=day m10 15min-m260=day m20 1.2017年6月8日 360  + 2018年11 ...

  5. python小程序--Two

    一.程序需求 1.启动程序后,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4.可随时退出,退出时,打印已购买商品和 ...

  6. java学习之成员内部类

    //成员内部类:直接在类中定义 /*成员内部类的通常用法: * 通常是提供给外部类使用不进行内部类的实例化 * 因此一般把他设为私有的类用private限定 * * */ /*Demo*/ class ...

  7. jdk安装路径

    问题:jdk1.4.2安装目录设成D盘,为什么装完后,C盘也有了一个200多兆的JAVA文件夹?里面我看了一下,有j2re1.4.2_13         jdk1.5.0_09         jr ...

  8. php通过pecl方式安装扩展

    安装pecl cd /usr/local/php/bin/ wget http://pear.php.net/go-pear.phar -O go-pear.php php go-pear.php # ...

  9. WCF 重载

    [ServiceContract] public interface IUser { [OperationContract(Name="ByUseId")] User GetUse ...

  10. winsock I/O模型的分析

    几种winsock I/O模型的分析 套接字是通信的基础,是支持网络协议数据通信的基本接口.Winsocket 提供了一些有趣的I/O模型,有助于应用程序通过一种“异步”方式,一次对一个或者多个套接字 ...