EFI系統引導的一些零碎知識點


2019-07-17更新:
下面說的僅僅針對系統從硬盤啟動,從硬盤啟動的時候,主板會去加載 boot文件夾下的bootx64.efi。但是存在其他情況。
裝完多系統后,在bios界面(使用uefi啟動的機器,准確來說應該不叫bios)的boot設置那里也會添加n多啟動項,如下圖:

上圖中的manjaro、Ubuntu、centos、WindowsBoot是與ATA HDD0、usb等硬件是同級別的,在easy uefi中查看這些選項指向的文件:

很明顯,系統安裝的時候創建了這些條目。在我們選擇默認啟動項是硬盤(上面的ATA HDD0)的時候下面分割線以下的說明才准確,否則如果默認啟動是其他的,例如上面bios圖上就是Manjaro,那么主板會直接去加載Manjaro選項指向的文件:\efi\manjaro\grubx64.efi,而不是去走\boot目錄。
—————————————分割線 以下是原文—————————

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和deepin雙啟動簡單實用的方法
https://linux.cn/article-8481-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM