Table of Contents
延伸磁碟分割
隨著硬碟容量的增長,單一硬碟上建立多個磁碟分割區的需求開始增加,但如同前面提過的,MBR 磁碟分割表在設計上是由固定的四組 16 bytes 磁碟分割紀錄所組成,本身並沒有預留擴充的空間,因此理論上每個硬碟上只能建立四個磁碟分割區,為了突破這個限制,因此後來便發展出了「延伸磁碟分割」的作法。
延伸磁碟分割的基本概念在於將硬碟上的磁碟分割區重新定義為主要磁碟分割與延伸磁碟分割兩類,其中現有直接利用標準 MBR 所能給予的四組磁碟分割紀錄的普通磁碟分割被重新命名為「主要磁碟分割 (Primary partition)」,當使用者需要在同一硬碟上建立超過四個磁碟分割時,延伸磁碟分割定義允許「犧牲」MBR 當中的一筆記錄空間用於建立虛擬的「延伸磁碟分割 (Extended partition)」。
在延伸磁碟分割的範圍內使用者可以建立多個「邏輯磁碟區 (logical volume)」,而每個邏輯磁碟區的起點磁區都會具有類似第一個磁區的 MBR 結構,稱之為延伸開機紀錄 (Extended Boot Record, EBR),當中會記載此邏輯磁碟區的起點、終點等資訊以及下一個 EBR 磁區的位置,透過這樣的方式來實質突破單一硬碟上只能有四個分割區的限制。
但要特別注意的是,邏輯磁碟區並不能做為啟動磁碟使用,除此之外在日常用途中與主要磁碟分割並沒有什麼顯著差異。
定址能力的延伸
除了磁碟分割的數量上限外,另一項 MBR 磁碟分割的主要限制則是來自其所能定址的硬碟大小範圍,在最初的設計中 MBR 磁碟分割紀錄主要是依賴 CHS 定址格式的起點、終點磁區來進行磁碟分割區的定位,但如同前面提及的,CHS 定址格式的最多只能定址約 8.4 GB 的磁碟空間,為了能夠使用超出 8.4 GB 部分的磁碟空間,因此原有的定址機制勢必需要調整。
但好在當初設計 MBR 時磁碟分割表當中除了 CHS 定址格式的磁碟分割區起點、終點之外還設計了紀錄以 LBA 格式定址的絕對起點磁區位置 (長度為 4 位元組) 與各磁碟分割的總磁區數 (長度亦為 4 位元組),因此可以透過轉向採用 LBA 定址為主、忽略原有基於 CHS 格式定址的起終點磁區位置之方式來大幅擴增 MBR 磁碟分割表的定址能力,從原有的 8.4 GB 一舉提升至 2.2 TB (4 位元組長度的位址包含 32 個位元,可定址出 2^32 個磁區,即 4,294,967,296 個磁區,以每個磁區 512 bytes 計算即為約 2.2 TB)。
GUID 磁碟分割表 (GUID Partition Table,GPT)
隨著電腦硬碟容量的快速發展,個人電腦硬碟的容量迅速逼近 MBR 磁碟分割表所能定址的最大上限 2.2 TB,為了解決這個問題與修正 MBR 磁碟分割表在多年使用過程中為了實際使用需求而做出的妥協措施所造成的各種混亂與規範不一,Intel 在發展可延伸韌體介面 (UEFI) 時一併提出了全新的磁碟分割表規範 GPT。
GUID 磁碟分割表的基本結構
相較於 MBR 將整個磁碟分割表全部塞在第一磁區而言,採用 GUID 磁碟分割表的硬碟會使用多個磁區存放磁碟分割表,除了第 0 磁區為了維持與 MBR 的相容性會塞入格式類似於 MBR 的保護性 MBR (Protective MBR)、第 1 磁區會放置 GUID 磁碟分割表的表頭 (包含分割表位置、定義磁碟可用空間、分割表目前的項目數量等資訊) 之外,GUID 磁碟分割表會使用多個磁區用於存放磁碟分割表。
根據分配給磁碟分割表的磁區數多寡可以彈性擴增 GUID 磁碟分割表所能支援的磁碟分割數量,但在 Windows 系統中固定為使用 32 個磁區,因此在 Windows 系統中採用 GPT 格式的硬碟實際用於存放資料的磁區是自第 35 個磁區起 (LBA 編號為 34)。
保護性 MBR (Protective MBR)
出於相容性與避免資料損毀上的考慮,在 GPT 格式硬碟當中第一個磁區 (LBA 編號 0) 依然會擺放一組格式基本上與傳統 MBR 一致的數據,當中除了與傳統 MBR 一樣會容納初始啟動程序之外還會包含一個類型標示為 0xEE 的特殊分割區,作為該硬碟採用 GPT 格式的識別依據。
這樣的做法有什麼意義呢?實際上主要是為了讓不支援 GPT 格式的作業系統在讀取 GPT 格式的硬碟時會偵測到一個類型不明的磁碟分割區,從而避免系統誤以為該硬碟為空白硬碟而逕自使用導致該硬碟上的資料產生毀損,並且也避免使用者在不支援 GPT 格式的作業系統下因看不見依循 GPT 格式規範所建立的分割區而意外將這些分割區覆蓋或移除。
GUID 磁碟分割表頭 (GPT Header)
GPT 格式磁碟上的第二個磁區 (LBA 編號 1) 則固定作為 GUID 磁碟分割表的表頭使用,包含了 GPT 版本識別、表頭位置與可用空間的起點與終點等資訊,此外為了避免 GUID 磁碟分割表表頭損毀,在 GPT 格式規範中會將此磁區內的所有資訊複製一份放在硬碟上的最後一個磁區中。
位置 | 長度 | 內容 |
00H – 07H | 8 bytes | EFI PART (固定識別標示) |
08H – 11H | 4 bytes | GPT 版本標示 |
12H – 15H | 4 bytes | 表頭長度 |
16H – 19H | 4 bytes | 表頭的 CRC32 校驗碼 |
20H – 23H | 4 bytes | 固定為 0 |
24H – 31H | 8 bytes | 當前表頭所在的磁區 LBA 定址 |
32H – 39H | 8 bytes | 另一表頭所在的磁區 LBA 定址 |
40H – 47H | 8 bytes | 首個可用磁區的 LBA 定址 |
48H – 55H | 8 bytes | 最後可用磁區的 LBA 定址 |
56H – 71H | 16 bytes | 此硬碟的 GUID |
72H – 79H | 8 bytes | 首個分割表項目所在的 LBA 定址 |
80H – 83H | 4 bytes | 分割表項目數量 |
84H – 87H | 4 bytes | 單一分割表項目的長度 |
88H – 91H | 4 bytes | 分割表項目的 CRC32 校驗碼 |
92H 起 | 剩餘空間 | 全數填 0 |
GPT 磁碟分割紀錄 (Partition Entries)
自第三個磁區 (LBA 編號 2) 起即為存放 GPT 磁碟分割紀錄的位置,不同於 MBR 當中每筆磁碟分割紀錄的長度僅有 16 bytes,由於 GPT 格式內的磁碟分割紀錄不再需要與初始啟動程序共用第一磁區的空間,因此 GPT 格式中各筆磁碟分割紀錄的長度一舉大幅提高至 128 bytes (每個磁區所能存放的磁碟分割紀錄則仍然維持四筆,但可透過增加用於存放磁碟分割紀錄之磁區數量的方式來彈性增加可建立之磁碟分割紀錄數量,在 Windows 系統中目前固定為 32 個磁區,因此可存放多達 128 筆磁碟分割紀錄)。
除了可用的紀錄空間增加外,GPT 格式中的磁碟分割紀錄同時還捨棄了 CHS 定址欄位,改為採用加長一倍的 LBA 定址來標示磁碟分割區的起點與終點,大幅提升了其所能處理的磁碟空間大小 (在使用 512 bytes 大小磁區的情況下可高達 9.44 ZB)。
此外,與 GUID 磁碟分割表頭相同,在 GPT 格式中為了避免磁碟分割表遭遇損毀的情況,在設計上會將所有存放磁碟分割紀錄的磁區內的所有資訊複製一份,依序自硬碟的倒數第二個磁區往反向放置在硬碟的最末端。
位置 | 長度 | 內容 |
00H – 15H | 16 bytes | 磁碟分割類型 (GUID 格式) |
16H – 31H | 16 bytes | 磁碟分割的唯一識別碼 (GUID 格式) |
32H – 39H | 8 bytes | 起點磁區 LBA 定址 |
40H – 47H | 8 bytes | 終點磁區 LBA 定址 |
48H – 55H | 8 bytes | 磁碟分割特性標示 |
56H – 127H | 72 bytes | 磁碟分割名稱 |
作業系統對 GPT 格式硬碟的支援
從前面的敘述我們大致可以知道 GPT 格式幾乎在各方面都比傳統的 MBR 磁碟分割表來得強大,但由於是較晚提出的標準,因此並非所有作業系統都能正常搭配 GPT 格式的硬碟使用,有部分較老舊的作業系統可能僅能支援對 GPT 格式的硬碟進行一般的讀寫操作,但並無法直接自 GPT 格式的磁碟分割啟動。
作業系統 | 讀寫操作 | 啟動磁碟 | 備註 |
Windows 2000 或更早版本 | 不支援 | 不支援 | |
Windows XP (32 位元) | 不支援 | 不支援 | |
Windows Server 2003 (32 位元) |
支援 | 不支援 | 自 Service Pack 1 起支援 |
Windows Server 2003 (64 位元) | 支援 | 僅 IA64 版本支援 | 自 Service Pack 1 起支援 |
Windows Vista / Server 2008 (32 位元) |
支援 | 不支援 | |
Windows Vista / Server 2008 (64 位元) | 支援 | 支援 | |
Windows 7 (32 位元) |
支援 | 不支援 | |
Windows 7 / Server 2008 R2 (64 位元) |
支援 | 支援 | |
Windows 8 (32 位元) |
支援 | 不支援 | |
Windows 8 / Server 2012 (64 位元) |
支援 | 支援 | |
Windows 8.1 (32 位元) |
支援 | 不支援 | |
Windows 8.1 / Server 2012 R2 (64 位元) |
支援 | 支援 | |
Windows 10 (32 位元) |
支援 | 不支援 | |
Windows 10 / Server 2016 (64 位元) |
支援 | 支援 | |
Windows Server 2019 (64 位元) | 支援 | 支援 | |
Windows 11 (64 位元) |
支援 | 支援 | |
Windows Server 2022 (64 位元) | 支援 | 支援 |