一、UEFI:統一可擴展固件接口
1、什么是UEFI
統一可擴展固件接口(Unified Extensible Firmware Interface,UEFI)是一種PC系統規格,用來定義操作系統與系統固件之間的軟件界面,作為BIOS的替代方案。UEFI負責加電自檢(POST),聯系操作系統以及提供操作系統與硬件連接的接口。下圖為EFI在軟件層次中的位置:
2、UEFI引導過程
1、系統開機 – 加電自檢(POST)
2、UEFI固件被加載,并由它初始化要啟動的硬件
3、固件讀取其引導管理器以確定從何處(比如從哪個硬盤及分區)加載哪個UEFI應用(如windows boot manager)
4、固件按照引導管理器中的啟動項目,加載UEFI應用
5、根據已啟動的UEFI應用還可以啟動其他應用(對應于UEFI shell或rEFInd之類的引導管理器的情況)或者啟動內核及initramfs(對應于GRUB之類引導器的情況),這取決于UEFI應用的配置
3、UEFI與BIOS的比較
1,EFI使用了模塊化,C語言風格的參數堆棧傳遞方式,動態鏈接的形式構建的系統,相比BIOS而言更容易實現,容錯和糾錯的特性更強,縮短了系統開發的時間。
2,EFI運行于32或64乃至未來增強的處理器模式下,突破傳統BIOS16位代碼的尋址能力,達到CPU的最大尋址。使得EFI驅動可以操控所有硬件設備。而BIOS只能以16位代碼的形式提供硬件服務程序,這使其只能提供給操作系統引導程序或MS-DOS類操作系統使用。
3,EFI系統下的驅動不是直接運行于CPU上的代碼寫成,而是用EFIBC編寫而成的,這是一組專用于EFI驅動的虛擬機器語言,需要EFI驅動環境(DXE)下被解釋運行,這提供了不同系統平臺間的向下兼容性。另外EFI驅動開發簡單,所有PC部件供應商都可以參與開發,對于豐富其功能十分有利。
4、EFI與操作系統的關系
EFI理論上非常類似于一個低級操作系統,并且具有操控所有硬件資源的能力。但它有其局限性:在EFI規范中,
1,EFI只是硬件和預啟動軟件間的接口規范
2,不提供負載的內存保護功能,只具備簡單的內存管理機制。
3,EFI不提供中斷機制,即每個驅動程序必須使用輪詢+解釋的方式運行,效率較低
當EFI所有組件加載王城后,系統可以開啟一個類似操作系統shell 的命令解釋環境,在這里用戶可以使用各種EFI應用程序,如硬件檢測及排錯軟件,引導管理等等。
5、EFI的組成
一般來說,EFI由如下幾部分組成
1,Pre-EFI初始化模塊:初始化CPU,主橋及存儲器
2,EFI驅動執行環境:加載DXE
3,EFI驅動程序:枚舉、識別及加載其他設備驅動程序
4,兼容性支持模塊(CSM):為不支持EFI的操作系統提供支持
5,EFI高層應用:如引導程序,排錯程序等
6,GUID磁盤分區表:GPT(見下文)
二、全局唯一標識分區表:GPT
全局唯一標識分區表(GUID Partition Table,GPT)是一個實體硬盤的分區表的結構布局的標準。它是EFI標準的一部分,被用于替代BIOS系統中的主引導記錄(MBR)分區表。
特點:
在MBR硬盤中,分區信息直接存儲于主引導記錄(MBR)中。但在GPT硬盤中,分區表信息存儲于GPT頭中。(處于兼容性考慮,硬盤的第一個扇區仍然用作MBR,之后才是GPT頭)
跟現代的MBR一樣,GPT也使用邏輯區塊地址(LBA)作為尋址方式。傳統MBR信息存儲與LBA0,GPT頭存儲于LBA1,接下來LBA2 ~ LBA33是分區表,使用16384字節(32扇區)作為GPT分區表。LBA34是硬盤上第一個分區的開始。
為了減少分區表損壞的風險,GPT在硬盤的最后保存了一份分區表的副本
傳統MBR(LBA0)
在GPT分區表的開頭,處于兼容性考慮仍然存儲了一份傳統的MBR,用來放置不支持GPT的硬盤管理工具錯誤識別并破壞硬盤中的數據,這個MBR叫做保護MBR。在支持GPT啟動的操作系統中,這里也用于存儲第一階段的啟動代碼。在這個MBR中,只有一個標識為0xEE的分區,表示這塊硬盤使用GPT分區表。不能識別GPT的操作系統通常會識別到一塊未知類型的分區,并且拒絕對其進行操作,除非用戶刪除這個分區。另外,能夠識別GPT的操作系統會檢查保護MBR中的分區表,如果分區類型不是0xEE或分區表中有多個項,也會拒絕對硬盤進行操作。
另外在MBR與GPT共存的混合分區表硬盤中,可以使不支持GPT啟動的操作系統從MBR啟動,啟動后只能操作MBR分區表中的分區。
GPT分區表頭(LBA1)
分區表頭定義了硬盤的可用空間以及組成分區表的項的大小和數量。一般最多可以創建128個分區,即分區表中保留128個項,每個都是128字節。
分區表頭還記錄了這塊硬盤的GUID,記錄了分區表頭本身的位置和大?。ㄎ恢每偸窃贚BA1)以及備份分區表頭和分區表的位置和大?。ㄔ谟脖P的最后)。它還儲存著它本身和分區表的CRC32校驗。固件,引導程序和操作系統可以根據校驗值來判斷分區表是否出錯,如果出錯,則使用軟件從硬盤最后的備份GPT中恢復整個分區表,如果備份的也校驗錯誤,硬盤將不可用,所以GPT分區表不能直接使用16進制編輯器修改。
分區表項(LBA2-33)
GPT分區表使用簡單而直接的方式表示分區。一個分區表項的前16字節是分區類型GUID。接下來的16字節是該分區唯一的GUID(這個GUID指的是該分區本身,而之前的GUID指的是該分區的類型)。再接下來是分區起始和末尾的64位LBA編號,以及分區的名字和屬性。
GPT的優點
1,使用GUID來表明分區類型 – 無沖突
2,為每個分區提供了一個唯一硬盤GUID和一個唯一分區GUID – 一個好的不依賴文件系統封的引用分區和硬盤的方式
3,任意分區數 – 取決于給分區表分配的空間 – 不需要擴展和邏輯分區。默認定義了128個分區的空間。
4,使用64位LBA存儲扇區數 – 最大硬盤可尋址大小為2 ZB。
5,存儲了備份頭和分區表可用于主要部分損壞時進行急救。
6,CRC32校驗值用于檢測頭和分區表的錯誤與損壞
GPT體系
GPT分區表項的格式
起始字節 |
長度 | 內容 |
0 | 16字節 | 分區類型GUID |
16 | 16字節 | 分區GUID |
32 | 8字節 | 起始LBA(小端序) |
40 | 8字節 | 末尾LBA |
48 | 8字節 | 屬性標簽 |
56 | 72字節 | 分區名(可以包括36個UTF-16(小端序)字符) |
資料來源:Wiki、ArchLinux
原創文章,作者:lichenhan,如若轉載,請注明出處:http://www.www58058.com/23165