EFI系统引导的一些零碎知识点
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系统引导的一些零碎知识点的更多相关文章
- 删除EFI系统分区(ESP)后Windows无法启动,重建引导分区并修复启动的过程
@ 目录 一.开机故障描述 二.工具: 三.什么是EFI系统分区 四.如何查看EFI系统分区 五.删除后如何重建系统分区 1.建立未分配空间 2.建立ESP分区 3.按下图,ESP分区的大小200M即 ...
- IBM X3850 Windows 无法安装到这个磁盘。选中的磁盘具有MBR分区表。在 EFI 系统上,Windows 只能安装到 GPT 磁盘
以前安装的是window2003 32位, 改装为2012 64位的时候.出现 Windows 无法安装到这个磁盘.选中的磁盘具有MBR分区表.在 EFI 系统上,Windows 只能安装到 GPT ...
- 教程 打造OS X Mavericks原版 EFI Clover 引导安装
自从 Mavericks 10.9 发布DP版到现在的GM版以来,以前Clover引导原版InstallESD.dmg方式安装原版的方法已经不能使用,而且已经不能引导安装了,所以从GM版发布以前,终于 ...
- 9.Linux系统引导流程
一.Linux系统引导流程 当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1. ...
- 安装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. ...
- 使用 boot-repair 对 Windows + Ubuntu 双系统引导修复
问题描述: 由于在windows上进行更新/重装/修改了引导设置以后,windows会“自私”地重写引导,导致Ubuntu系统引导消失而无法选择Ubuntu启动.
- 001_关于选中的磁盘具有MBR分区表。在 EFI 系统上,Windows 只能安装到 GPT 磁盘。问题解决
问题: 今天我的diy电脑重装系统时,遇到了一个棘手的问题.在选择安装分区的时候,提示有这样的错误. Windows 无法安装到这个磁盘.选中的磁盘具有MBR分区表.在 EFI 系统上,Windows ...
- EFI系统分区如何删除
U盘或者硬盘被做了系统安装盘. 结果在格式化都是失败,分区也不行. 有了新招 EFI分区是您的系统启动引导的分区,存放引导启动的文件的,因此它是一个操作系统独立的分区,实际上它是UEFI加载的固件和应 ...
- Win7&Ubuntu12.04 双系统引导问题
周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述: 在重装 ...
随机推荐
- 在Vuex更新,组件内的视图更新问题
由于js的限制,vue无法进行监听数组; 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如: vm.items.len ...
- 初学node.js,安装nodemon,学习debug模式,安装cpu-stat
1.运行node 文件 node .\01.js 文件内容 console.log('aaaa'); 2.因为每次更新文件都需要重新,所以安装nodemon npm i ...
- ajax php 验证注册用户名是否存在
1.在"test"数据库中,建立一张名为"user"的表. sql语句: create table `user`( `id` ) not null auto_i ...
- vue + ts @Prop boolean 问题
假设btn组件有一prop属性radio,声明如下 @Prop({ default: false }) radio!: boolean; 在组件传递 <btn radio /> 此时的 r ...
- MyBatis框架基于XML的配置
什么是MyBatis? 答:它是一个持久层框架 说的太简单了吗?那让我们来看一下官方的文档描述: MyBatis有什么作用呢? 1.持久层的零实现 2.可以自动将数据封装到对象里面不需要手工编写映射的 ...
- .Net新利器Rider的破解安装与使用
准备 介绍 Rider 是 JetBrains 提供的一款用于 .Net 开发的 IDE,相对于 VS,它显得更加轻量(才 500m 左右),并且不管是提示功能还是流畅度都不逊色于 VS 且某方面可能 ...
- Maven -- 在进行war打包时排除不需要的文件
https://blog.csdn.net/zsg88/article/details/78128603 <excludes> <!-- 排除文件,不包含子目录,对WEB-INF目录 ...
- 19.C# 泛型
1.泛型的概念 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用. 2. .net提供的泛型 2.1可空 ...
- 混合开发使用Chrome Inspect调试WebView预览手机界面和定位元素
使用Chrome Inspect调试混合应用可以帮助我们排查问题.例如定位元素,快速修改CSS样式并实时查看效果.其实微信开发也是一种混合开发模式,微信可以看做一个原生的Android App搭配了一 ...
- Nginx配置选项
--prefix=path 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录.默认使用 /usr/local/nginx. --sbin-path=path 设置nginx的可执行 ...