UEFI與BIOS、GPT與MBR的區別

  版權聲明未經作者允許,嚴禁用於商業出版,否則追究法律責任。網絡轉載請註明出處,這是對原創者的起碼的尊重!!!


1 磁盤分區格式

  一般來說,磁盤分區表有兩種格式:MBR和GPT。

1.1 MBR

這裏寫圖片描述

  • 磁盤的0號扇區(第一個扇區)也叫主引導扇區,它包含主引導程序、分區表DPT、硬盤有效標誌。

    • 早期磁盤的扇區大小爲512B
    • 主引導程序:記錄主引導加載程序,也叫第一階段引導加載程序(Initial Program Loader,IPL),446B。主要作用是:

      • 檢查硬盤分區表是否完好。
      • 在分區表中尋找可引導的“活動”分區。
      • 將活動分區的第一邏輯扇區內容(也叫分區引導記錄,PBR)裝入內存。在DOS分區中,此扇區內容稱爲DOS引導記錄(DBR)。
    • 分區表:記錄整塊磁盤的分區狀態,64B。

    • 有效標誌:2B。
  • 分區表(DPT):分區表只能記錄4個記錄,每個記錄爲16B。記錄了每個分區的起始和結束柱面號磁頭號、扇區號、柱面號,分區激活標誌,文件系統類型,相對扇區號,總扇區數目。因此磁盤最多只能有4個主分區,每個主分區可以劃分爲若干個邏輯分區。主分區劃分邏輯分區後就叫做擴展分區擴展分區不能格式化且最多只能有一個,在其前幾個扇區記錄了邏輯分區的信息。每個記錄的格式如下:

    起始字節 偏移量 內容
    0 1 分區的激活標誌,表示系統可引導;一般爲80
    1 3 起始磁頭號、起始扇區號、起始柱面號
    4 1 分區的系統類型,0B(FAT32),04(FAT16)、07(NTFS);
    5 3 結束磁頭號、結束扇區、結束柱面號
    8 4 相對扇區號,從磁盤開始到該分區開始的位移,以扇區計算
    12 4 總扇區數,最大容量爲232x512B=2TB
  • MBR分區的缺點

    • MBR分區表不支持容量大於2.2TB的分區(一些硬盤製造商將他們的容量較大的磁盤升級到了4KB的扇區,這意味着MBR的有效容量上限提升到了16 TB)
    • MBR 僅有一個扇區,若被破壞後,經常很難恢復。
    • MBR 內的存放開機管理程序的區塊僅 446bytes,無法容納較多的程序代碼。

1.2 GPT

  因爲過去一個扇區大小就是512bytes 而已,不過目前已經有 4K 的扇區設計出現!爲了兼容於所有的磁盤,因此在扇區的定義上面,大多會使用所謂的邏輯區塊地址( LBA)來處理。GPT 將磁盤所有區塊以此 LBA(預設爲 512B!) 來規劃,而第一個 LBA 稱爲 LBA0 (從0 開始編號)。
  與 MBR 僅使用第一個 512bytes 區塊來記錄不同, GPT 使用了 34 個 LBA 區塊來紀錄分區信息!同時與過去MBR僅有一個扇區,被幹掉就死光光的情況不同, GPT 除了前面 34 個 LBA 之外,整個磁盤的最後 33 個 LBA 也拿來作爲備份!
這裏寫圖片描述

  • LBA0 (PMBR)
      在GPT分區表的最開頭,處於兼容性考慮仍然存儲了一份傳統的MBR(LBA 0),這個MBR叫做保護性MBR(Protective MBR)。
      保護性MBR保護GPT磁盤不受以前發佈的MBR磁盤工具的危害。這些工具不能感知GPT,也無法正確地訪問GPT磁盤。這些工具通過解釋保護性MBR,將GPT磁盤看成一個封裝的(可能無法識別)分區,而不是錯誤地當成一個未分區的磁盤,並且拒絕對硬盤進行操作。這就避免了意外刪除分區的危險。
      在支持從GPT啓動的操作系統中,這裏也用於存儲第一階段的啓動代碼。在這個MBR中,只有一個標識爲0xEE的分區,以此來表示這塊硬盤使用GPT分區表。
      在使用MBR/GPT混合分區表的硬盤中,這部分存儲了GPT分區表的一部分分區(通常是前四個分區),可以使不支持從GPT啓動的操作系統從這個MBR啓動,啓動後只能操作MBR分區表中的分區。

  • LBA1 (GPT 表頭)
      分區表頭(LBA 1)定義了硬盤的可用空間以及組成分區表的項的大小和數量。在使用64位Windows Server2003的機器上,最多可以創建128個分區,即分區表中保留了128個項,其中每個都是128字節。(EFI標準要求分區表最小要有16,384字節,即128個分區項的大小)
      分區表頭還記錄了這塊硬盤的GUID,記錄了分區表頭本身的位置和大小以及備份分區表頭和分區表的位置和大小(在硬盤的最後)。它還儲存着它本身和分區表的CRC32校驗。固件、引導程序和操作系統在啓動時可以根據這個校驗值來判斷分區表是否出錯,如果出錯了,可以使用軟件從硬盤最後的備份GPT中恢復整個分區表,如果備份GPT也校驗錯誤,硬盤將不可使用。以下是分區表頭結構的具體信息:

起始字節 偏移量 內容
0 8 簽名(”EFI PART”)
8 4 修訂
12 4 分區表頭的大小
16 4 分區表頭(92B)的CRC32校驗,在計算時,先把這個字段寫作0處理,然後計算出所有分區表項的CRC32校驗後再計算這個CRC32
20 4 保留,必須是 0
24 8 當前LBA(這個分區表頭的位置)
32 8 備份LBA(另一個分區表頭的位置)
40 8 第一個可用於分區的LBA(主分區表的最後一個LBA + 1)
48 8 最後一個可用於分區的LBA(備份分區表的第一個LBA - 1)
56 16 硬盤GUID(在類UNIX系統中也叫UUID)
72 8 分區表項的起始LBA(在主分區表中是2)
80 4 最大分區表項的數量(windows是128,沒有這麼多也先佔着空間)
84 4 一個分區表項的大小(通常是128)
88 4 分區表項的CRC32校驗(計算的是所有分區表項的檢驗和即128*128字節)
92 420 保留,剩餘字節必須是0(420字節針對512字節的LBA硬盤)
        
  • LBA2-33 (GPT分區表)
      從LBA2區塊開始,每個LBA都可以有4個分區記錄,所以在默認的情況下,總共可以有 4*32=128個分區記錄(默認最多128個分區)!因爲每個LBA有512B,因此每個記錄可使用128B的空間。
      一個分區表項的前16字節是分區類型GUID。接下來的16字節是該分區唯一的GUID(這個GUID指的是該分區本身,而之前的GUID指的是該分區的類型)。再接下來是分區起始和末尾的64位LBA編號,以及分區的名字和屬性。格式如下:
起始字節 偏移量 內容
0 16 分區類型GUID
16 16 分區GUID
32 8 起始LBA(小端格式)
40 8 末尾LBA
48 8 分區屬性,

  
  
  類型GUID爲固定值,查閱資料可得。下圖列舉Windows、Linux下常見幾種:
類型GUID
類型GUID
  以Windows下基本數據分區爲例說明:EBD0A0A2-B9E5-4433-87C0-68B6B72699C7。上述表示形式採用小端表示,其16位的串行表示爲:A2A0D0EBE5B9334487C068B6B72699C7,即前三部分倒序表示。
  
  分區屬性低位4字節表示與分區類型無關的屬性,高位4字節表示與分區類型有關的屬性。具體見下圖:
分區屬性

  • GPT分區優點
    • 可以在GPT分區表頭自定義最大分區數;
    • LBA爲64位,支持的磁盤容量大;
    • 分區表和分區表頭有備份。

2 Leagcy BIOS和UEFI BIOS 的區別

2.1 Leagcy BIOS

  BIOS讀入CMOS參數,並識別可開機的設備,POST通過後,找到MBR,並執行初級引導加載程序。初級引導加載程序,檢查分區表的完整性,然後確定活動分區,並載入活動分區的PBR,PBR最主要的內容就是啓動管理器(bootmgr或者grub),啓動管理器根據定位信息找到二級引導加載程序,二級引導加載程序加載內核。如果要啓動的系統安裝再其他分區則將權力轉交給其它分區的二級引導加載程序。

  如果你的分區表爲 GPT 格式的話,那麼BIOS也能夠從 LBA0 的 MBR 兼容區塊讀取第一階段的開機管理程序代碼, 如果你的開機管理程序能夠認識 GPT 的話,那麼使用BIOS同樣加載內核,如果開機管理程序不懂GPT,例如WindowsXP的環境,那自然就無法加載內核,開機就失敗了。

2.2 UEFI BIOS

  雖然GPT可尋址8ZB,也能用較大的區塊來處理開機管理程序。但是BIOS不懂GPT!還得要通過GPT提供兼容模式才能夠讀寫這磁盤,而且BIOS僅爲16位的程序,在與現階段新的操作系統接軌方面有點弱掉了!爲了解決這個問題,因此就有了UEFI這個統一可延伸固件接口的產生。
  UEFI主要是想要取代BIOS這個固件接口,因此我們也稱UEFI爲 UEFI BIOS。UEFI 使用C程序語言,比起使用彙編語言的傳統BIOS要更容易開發!也因爲使 C語言來撰寫,因此如果開發者夠厲害,甚至可以在UEFI開機階段就讓該系統瞭解TCP/IP而直接上網!根本不需要進入操作系統耶!這讓小型系統的開發充滿各式各樣的可能性!基本上,傳統BIOS與UEFI的差異如下:

比較項目 傳 BIOS UEFI
使用程序語言 彙編語言 C 語言
硬件資源控制 使用中斷管理、不可變內存與IO存取 使用驅動程序與協議
處理器運作環境 16 位 CPU 保護模式
擴充方式 透過 IRQ 連結 直接加載驅動程序
第三方廠商支持 較差 較佳且可支持多平臺
圖形化能力 較差 較佳
內建簡化操作系統前環境 不支援 支援

  與傳統的BIOS不同,UEFI簡直就像是一個低階的操作系統,甚至於連主板上面的硬件資源的管理,也跟操作系統相當類似,只需要加載驅動程序即可控制操作。同時由於程控得宜,一般來說,使用UEFI接口的主機,在開機的速度上要比BIOS來的快上許多!因此很多人都覺得UEFI似乎可以發展成爲一個很有用的操作系統耶,不過,關於這個,你無須擔心未來除了 Linux 之外,還得要增加學一個 UEFI 的操作系統啦!爲啥呢?
  UEFI當初在發展的時候,就制定一些控制在裏頭,包括硬件資源的管理使用輪詢 (polling)的方式來管理,與BIOS直接瞭解CPU以中斷的方式來管理比較, 這種 polling的效率是稍微慢一些的,另外,UEFI並不能提供完整的快取功能,因此執行效率也沒有辦法提升。不過由於加載所有的UEFI驅動程序之後, 系統會開啓一個類似操作系統的shell環境,用戶可以此環境中執行任意的UEFI應用程序,而且效果比MSDOS更好。
  所以,因爲效果華麗但效能不佳,因此這個UEFI大多用來作爲啓動操作系統之前的硬件檢測、開機管理、軟件設定等目的,基本上作爲OS是比較難的。 同時,當加載操作系統後,一般來說,UEFI就會停止工作,並將系統交給操作系統,這與早期的BIOS差異不大。比較特別的是,某些特定的環境下,這些UEFI程序是可以部份繼續執行的,以協助某些操作系統無法找到特定裝置時,該裝置還是可以持續運作。
  此外,由於過去cracker經常藉由BIOS開機階段來破壞系統,並取得系統的控制權,因此UEFI加入了一個所謂的安全啓動 (secure boot) 機制, 這個機制代表着即將開機的操作系統必須要被UEFI所驗證,否則就無法順利開機!微軟用了很多這樣的機制來管理硬件。 不過加入這個機制後,許多的操作系統,包括Linux,就很有可能無法順利開機喔!所以,某些時刻,你可能得要將UEFI的secure boot 功能關閉, 才能夠順利的進入 Linux 哩!
  另外,與BIOS模式相比,雖然UEFI可以直接取得GPT的分區表,不過最好依舊擁有BIOS boot的支持,同時,爲了與windows兼容,並且提供其他第三方廠商所使用的UEFI應用程序儲存的空間,你必須要格式化一個vfat的文件系統, 大約提供512MB到1G左右的容量,以讓其他 UEFI 執行較爲方便。
  由於UEFI已經克服了BIOS的1024柱面的問題,因此你的開機管理程序與內核可以放置在磁盤開始的前2TB位置內即可!加上之前提到的 BIOS boot 以及 UEFI 支持的分區槽,基本上你的/boot目錄幾乎都是/dev/sda3之後的號碼了!這樣開機還是沒有問題的!所以要注意喔!與以前熟悉的分區狀況已經不同,/boot不再是/dev/sda1 !


  版權聲明未經作者允許,嚴禁用於商業出版,否則追究法律責任。網絡轉載請註明出處,這是對原創者的起碼的尊重!!!


發佈了84 篇原創文章 · 獲贊 63 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章