BIOS/UEFI 與其分別使用的磁盤分區形式 MBR/GPT
一、傳統 BIOS 與現代 UEFI 的對比
BIOS 的工作流程簡單介紹如下。首先電腦通電之後會進行開機自檢,檢查 CPU、內存、硬盤等關鍵硬件是否正常。隨後開始初始化硬件,加載顯卡,硬盤等設備的驅動。最後按照設定的啓動順序讀取硬盤的第一個扇區(MBR,512 字節),將控制權交給 MBR 裏的引導程序(如GRUB、Windows Boot Manager),由引導程序去加載操作系統。
BIOS 具有的主要侷限性包括,MBR 分區表對分區數(4個)和磁盤容量(2.2 TB)的限制;工作在16位實模式下,無法使用64位保護模式,性能上會落後;由於 BIOS 啓動是順序執行的,不能充分利用多核 CPU 的優勢,啓動速度會慢;UI 界面簡陋無法使用鼠標;安全性差,如果磁盤 MBR 頭部代碼被病毒修改,直接導致無法啓動。
相比之下 UEFI 支持 GPT 分區,打破了 MBR 2.2 TB 的容量限制,幾乎支持無限大小的硬盤和幾乎無限數量的分區(Windows 128個)。UEFI 可以並行初始化硬件,並且跳過了 BIOS 中一些不必要的自檢步驟,實現了快速啓動。UEFI 可以只加載被數字證書籤名的操作系統引導程序,從而有效防止惡意軟件在系統啓動前感染電腦。這是 Windows 8 及以上版本系統的默認要求。UEFI的驅動和程序不存放在狹小的 ROM 中,而是放在一個獨立的EFI系統分區裏。這允許它擁有華麗的圖形界面、鼠標支持,甚至可以在不進入操作系統的情況下運行一些小程序(如診斷工具、瀏覽器)。
核心區別對比表格
| 特性 | BIOS | UEFI |
|---|---|---|
| 全稱 | 基本輸入輸出系統 | 統一可擴展固件接口 |
| 誕生年代 | 1975年(非常古老) | 2005年左右(現代) |
| 程序模式 | 16位實模式 | 32位/64位保護模式 |
| 用户界面 | 通常是藍底白字的純文本界面,只能用鍵盤操作 | 圖形化界面,支持鼠標操作,更友好 |
| 磁盤分區 | 使用 MBR 主引導記錄 | 使用 GPT GUID 分區表 |
| 最大磁盤容量 | 2.2 TB | 近乎無限(理論 9.4 ZB) |
| 啓動過程 | 從 MBR 讀取代碼,啓動引導程序 | 直接從 EFI 分區中的文件啓動 |
| 啓動速度 | 較慢(需要自檢所有硬件) | 更快(支持並行初始化、跳過自檢) |
| 安全性 | 幾乎無安全啓動機制 | 支持 安全啓動,防止惡意軟件在啓動前加載 |
| 擴展性 | 差,固件容量有限 | 好,驅動和程序可存儲在EFI系統分區中 |
| 網絡功能 | 無或非常基礎 | 在預啓動環境中有較好的網絡支持 |
怎麼查看自己的電腦是不是 UEFI 呢?Win + R 搜索 msinfo32,在打開的窗口中,查看 BIOS模式 一項,如果顯示 UEFI 就説明使用的是 UEFI 模式。
二、MBR 與 GPT 分區表的對比
什麼是分區呢?相信大家都很熟悉,我們新買的硬盤在裝機之後通常都至少會分為C盤、D盤兩個盤,分別用於存放系統數據和軟件安裝數據或者再分個E盤用於存放個人數據等。這個將物理上一整塊硬盤分為邏輯上的幾個區塊的操作就是分區。MBR 或者 GPT 就是記錄了我們磁盤是如何分區的一種規則,比如我們的磁盤分了幾個盤,每個盤的起始扇區和結束扇區是什麼。
MBR/GPT 本質上是一種規範,模式或者規則。在新磁盤到手之後,我們在使用磁盤管理工具進行磁盤初始化的時候通常就要選擇分區模式和文件系統。MBR和GPT是一套規則,是藏在硬盤最前端的“數據結構”。而你在圖形界面上看到的操作(新建簡單卷、壓縮卷、格式化),都是根據這套規則在“填寫表格”和“執行命令”。它們就是讓一塊物理硬盤能夠被操作系統識別、管理和使用的“靈魂”。
2.1 MBR 分區表
MBR(主引導記錄)是一種在硬盤驅動器第一個扇區得數據結構,它告訴計算機硬盤是如何分區的,以及如何引導操作系統。一個標準的 MBR 包含三個部分:
- 引導代碼:佔用前 440 字節。BIOS 在完成自檢之後,會讀取並執行這段代碼,隨後這段代碼會去查找活動分區,並加載該分區中的更復雜的引導程序,最終啓動操作系統。如果這段代碼被破壞,電腦將無法從硬盤啓動。
- 磁盤分區表:隨後的 64 字節。這是 MBR 的核心,記錄了磁盤的分區信息。其只能定義 4 個分區表項,每個表項 16 字節,對應一個主分區。
- 引導簽名:最後的 2 字節(magic number 0x55AA),BIOS 讀取它用於驗證 MBR 是否有效。
MBR 的分區表只有一份,且存放在磁盤的最開頭。如果這個區域損壞,整個磁盤的分區信息都會丟失。並且 MBR 不內置任何安全功能,無法防止MBR被惡意軟件篡改(如MBR病毒)。
2.2 GPT 分區表
GPT(全局唯一標識分區表)用於取代傳統 MBR 分區方案的新一代磁盤分區標準,源自 UEFI。相比於 MBR,GPT 主要有如下特性:
- 近乎無限大的容量。
- 充足的分區數量。
- 更高的安全性:
- GPT 在磁盤的開頭和末尾都存儲了分區表和 GPT 頭的備份(冗餘),如果主分區表損壞,可以使用備份進行恢復。
- GPT 包含 CRC32 校驗和(循環冗餘校驗),可以檢查分區表數據的完整性,及時發現錯誤。
GPT 磁盤結構:
- 保護性 MBR (Protective MBR):位於磁盤的第一個扇區 (LBA 0),為了兼容性和安全考慮而存在。它包含一個特殊的 MBR 分區條目(類型為
0xEE),用來告訴不支持 GPT 的舊系統或工具:這塊磁盤已經被佔用(是 GPT 磁盤),從而防止它們錯誤地將其識別為未分區磁盤並進行格式化等破壞性操作。 - GPT 頭 (GPT Header):位於磁盤的第二個扇區 (LBA 1)。定義了分區表的位置和大小,幷包含 GPT 頭和分區表的 CRC32 校驗和。
- 分區表項 (Partition Entries):緊隨 GPT 頭之後。包含了每個分區的詳細信息,如:分區類型 GUID (全局唯一標識符,標識分區用途,例如 EFI 系統分區、基本數據分區),分區唯一 GUID (每個分區的獨立標識),分區起始/結束的 LBA(邏輯塊地址),分區名稱等。
- GPT 分區 (GPT Partitions):實際的存儲區域。
- 備份 GPT (Backup GPT):位於磁盤的尾部,存儲了 GPT 頭和分區表的完整備份,用於數據恢復。
| 方面 | MBR(舊) | GPT(新) |
|---|---|---|
| 最大磁盤容量 | ~2.2 TB | 近乎無限(理論 9.4 ZB) |
| 分區數量 | 4個主分區(或3主+1擴展) | 理論上無限制(Windows限制為128個) |
| 安全性 | 無 | 支持 CRC32校驗 和利用UEFI的安全啓動,防止篡改 |
| 數據冗餘 | 分區表只有一份,易丟失 | 在磁盤開頭和末尾都存有分區表副本,更健壯 |
| 依賴的固件 | BIOS | UEFI |
查看我們的電腦磁盤使用的是什麼分區:右鍵開始圖標(或者win + x),打開磁盤管理,右鍵點擊窗口底部磁盤左側的標籤(如“磁盤0”),選擇“屬性”。切換到“卷”標籤頁,在“分區樣式”一項中即可看到是 “主引導記錄” 還是 “GUID 分區表”。
2.3 BIOS / UEFI 如何識別分區形式
BIOS 的尋找方法。電腦啓動之後,BIOS 會無條件地直接去讀取硬盤的第一個扇區(512字節),隨後查看這個扇區的最後兩個字節,看是否是目標的魔數,如果是,就會執行這個扇區前 440 字節的引導程序,去查找活動分區,並加載分區裏面更復雜的引導程序,如果不是就認為這個設備不可引導。
UEFI 的尋找方法。UEFI 會直接讀取磁盤的第二個扇區,因為 GPT 規則中第一個扇區存放的是保護性 MBR。第二個扇區才是 GPT 主頭。GPT主頭包含了分區表的位置、大小以及一個非常重要的 CRC32校驗和,UEFI會自己根據分區表的數據重新計算一遍校驗和。如果計算出的結果和GPT頭裏記錄的值匹配:UEFI就認為這個GPT分區表是完整、有效的。如果不匹配説明分區表可能已損壞。這時,UEFI會去讀取硬盤末尾的GPT備份頭,嘗試用副本來修復主頭。這體現了GPT的健壯性。
在確認GPT分區表有效後,UEFI不會去執行什麼扇區裏的代碼。而是:在GPT分區表中查找一個具有特定 GUID類型 的分區:EFI系統分區。進入這個分區(它是一個使用 FAT32 文件系統的獨立分區),在裏面找到並直接運行位於 \EFI\Boot\bootx64.efi 或其他廠商指定路徑的 .efi可執行文件,從而啓動操作系統。
附錄:實模式與保護模式
如果大家之前有學過操作系統,會對物理地址和虛擬地址的概念很熟悉。前面我們説過 BIOS / UEFI 分別工作在16位實模式和保護模式下。x86 的實模式和保護模式有一個核心區別就是尋址方式。
- 實模式使用的是物理尋址:$段基址\times16+偏移地址$,受到段基址和偏移地址的限制,最大隻能訪問 $2^{20}$ 字節,即 1MB 內存。並且無保護。 任何程序都可以訪問和修改內存中的任何位置(包括操作系統核心區域)。
- 保護模式使用的是虛擬尋址(或稱邏輯尋址),通過轉換後才得到物理地址。CPU 使用 段選擇符 去查表(GDT/LDT)獲取 段基址,然後將 段基址 加上 偏移地址 得到 線性地址(虛擬地址)。如果開啓了分頁,線性地址再通過頁表轉換為物理地址。可以訪問高達 $4 \text{GB}$(32位系統)或 $2^{64}$ 字節(64位系統)的內存。有內存保護,操作系統可以限制程序訪問自己的內存區域,防止一個程序的錯誤破壞其他程序或內核數據。引入了四個特權級(Ring 0 到 Ring 3),Ring 0 權限最高(留給操作系統內核),從而實現操作系統的隔離和保護。
Steady progress!