宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

2019-07-17更新:
下面说的仅仅针对系统从硬盘启动,从硬盘启动的时候,主板会去加载 boot文件夹下的bootx64.efi。但是存在其他情况。
装完多系统后,在bios界面(使用uefi启动的机器,准确来说应该不叫bios)的boot设置那里也会添加n多启动项,如下图:
EFI系统引导的一些零碎知识点-风君雪科技博客
上图中的manjaro、Ubuntu、centos、WindowsBoot是与ATA HDD0、usb等硬件是同级别的,在easy uefi中查看这些选项指向的文件:
EFI系统引导的一些零碎知识点-风君雪科技博客
很明显,系统安装的时候创建了这些条目。在我们选择默认启动项是硬盘(上面的ATA HDD0)的时候下面分割线以下的说明才准确,否则如果默认启动是其他的,例如上面bios图上就是Manjaro,那么主板会直接去加载Manjaro选项指向的文件:efimanjarogrubx64.efi,而不是去走oot目录。
—————————————分割线 以下是原文—————————

EFI目录

下图只有Boot和Microsoft,如果你还装其他系统可能还会有其他的文件夹,比如你还装了Ubuntu(或者manjaro),那么会有个叫Ubuntu(manjaro)的文件夹与Boot、Microsoft并存。
EFI系统引导的一些零碎知识点-风君雪科技博客
Boot是计算机默认引导文件所在的目录,Microsoft是微软Windows系统引导所在的目录。
Boot目录:
EFI系统引导的一些零碎知识点-风君雪科技博客
Microsoft目录:
EFI系统引导的一些零碎知识点-风君雪科技博客
MicrosoftBoot目录:
EFI系统引导的一些零碎知识点-风君雪科技博客
上图中红框内的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目录内容如图EFI系统引导的一些零碎知识点-风君雪科技博客比起之前多了一个Manjaro的文件夹,该文件夹下只有一个grubx64.efi文件EFI系统引导的一些零碎知识点-风君雪科技博客。而且安装完manjaro之后,EFIBoot目录下的bootx64.efi文件大小也发生了变化,且此时我开机进入的是jrub,然后在jrub中选择要开机的系统。用hash校验了一下EFIBootootx64.efi 与 EFIManjarogrubx64.efi文件,结果如图
EFI系统引导的一些零碎知识点-风君雪科技博客
很明显这是同一个文件。再校验下安装manjaro之前的EFIBootootx64.efi文件,明显是与安装完manjaro之后不一样的,如下图
EFI系统引导的一些零碎知识点-风君雪科技博客
这样就验证了上一小节的猜想,安装完manjaro之后,修改了系统默认(从硬盘启动)的引导,指向GRUB来管理系统引导。

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

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

猜测:很可能是efiootootx64.efi 文件被修改成直接引导到efimicrosoftootootmgfw.efi,导致系统不去加载grub。
猜测修复办法1:想要修复就可以再系统更新之前备份efioot目录,系统更新完后替换到该目录。(下面一句话适用于manjaro)但是我们一般很少有备份系统的习惯,这时候可以就去把EFIManjarogrubx64.efi文件复制并重命名成EFIBootootx64.efi。
猜测修复办法2:如果你是Ubuntu,找到boot目录下的grubx64.efi(或者shimx64.efi)复制到efioot目录下,并重命名为bootx64.efi。如果你是Manjaro系统就去镜像中复制BOOTX64.efi文件丢到efioot中。
上述猜测应该是错误的,我对比了下manjaro镜像中的BOOTX64.efi与实际安装完efi目录下的bootx64.efi文件,这两个文件并不一样,再次猜测,镜像中的可能是引导U盘的。目前来看修复方法1是比较靠谱的。
EFI系统引导的一些零碎知识点-风君雪科技博客
猜测修复办法3:使用easyUEFI添加Liunx引导,然后调整新添加的为默认项(如下图,排在最顶上)。
EFI系统引导的一些零碎知识点-风君雪科技博客

那么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和deepin双启动简单实用的方法
https://linux.cn/article-8481-1.html