GUID磁碟分割表

**GUID 磁碟分割表**（英語：GUID Partition Table，縮寫：**GPT**）是一個實體硬碟的分割區表的結構布局的標準。它是可延伸韌體介面（UEFI）標準（被 Intel 用於替代個人電腦的 BIOS）的一部分，被用於替代 BIOS 系統中的一 32bits 來儲存邏輯塊位址和大小資訊的主開機紀錄（MBR）分割區表。對於那些磁區為 512 位元組的磁碟，MBR 分割區表不支援容量大於 2.2TB（2.2×1012 位元組）的分割區，然而，一些硬碟製造商（諸如希捷和威騰電子）注意到這個局限性，並且將他們的容量較大的磁碟升級到 4KB 的磁區，這意味著 MBR 的有效容量上限提升到 16 TiB。 這個看似「正確的」解決方案，在臨時地降低人們對改進磁碟分配表的需求的同時，也給市場帶來關於在有較大的塊（block）的裝置上從 BIOS 啟動時，如何最佳的劃分磁碟分割區的困惑。GPT 分配 64bits 給邏輯塊位址，因而使得最大分割區大小在 264-1 個磁區成為可能。對於每個磁區大小為 512 位元組的磁碟，那意味著可以有 9.4ZB（9.4×1021 位元組）或 8 ZiB 個 512 位元組（9,444,732,965,739,290,426,880 位元組或 18,446,744,073,709,551,615（264-1）個磁區 ×512（29）位元組每磁區）。

截止至 2010 年，大多數作業系統對 GPT 均有所支援，儘管包括 Mac OS X 和 Windows 在內的一些僅支援在 EFI 基礎上自 GPT 分割區啟動，見 #作業系統支援。

## 特點

在 MBR 硬碟中，分割區資訊直接儲存於主開機紀錄（MBR）中（主開機紀錄中還儲存著系統的引導程式）。但在 GPT 硬碟中，分割區表的位置資訊儲存在 GPT 頭中。但出於相容性考慮，硬碟的第一個磁區仍然用作 MBR，之後才是 GPT 頭。

跟現代的 MBR 一樣，GPT 也使用邏輯區塊位址（LBA）取代了早期的 CHS 定址方式。傳統 MBR 資訊儲存於 LBA 0，GPT 頭儲存於 LBA 1，接下來才是分割區表本身。64 位元 Windows 作業系統使用 16,384 位元組（或 32 磁區）作為 GPT 分割區表，接下來的 LBA 34 是硬碟上第一個分割區的開始。

蘋果公司曾經警告說：「不要假定所有裝置的塊大小都是 512 位元組。」一些現代的儲存裝置如固態硬碟可能使用 1024 位元組的塊，一些磁光碟（MO）可能使用 2048 位元組的磁區（但是磁光碟通常是不進行分割區的）。一些硬碟生產商在計劃生產 4096 位元組一個磁區的硬碟，但截至 2010 年初，這種新硬碟使用韌體對作業系統偽裝成 512 位元組一個磁區。

使用英特爾架構的蘋果機也使用 GPT。

為了減少分割區表損壞的風險，GPT 在硬碟最後儲存了一份分割區表的副本。

## 傳統 MBR (LBA 0)

在 GPT 分割區表的最開頭，出於相容性考慮仍然儲存了一份傳統的 MBR，用來防止不支援 GPT 的硬碟管理工具錯誤辨識並破壞硬碟中的資料，這個 MBR 也叫做保護 MBR。在支援從 GPT 啟動的作業系統中，這裡也用於儲存第一階段的啟動代碼。在這個 MBR 中，只有一個標識為 0xEE 的分割區，以此來表示這塊硬碟使用 GPT 分割區表。不能辨識 GPT 硬碟的作業系統通常會辨識出一個未知類型的分割區，並且拒絕對硬碟進行操作，除非使用者特別要求刪除這個分割區。這就避免了意外刪除分割區的危險。另外，能夠辨識 GPT 分割區表的作業系統會檢查保護 MBR 中的分割區表，如果分割區類型不是 0xEE 或者 MBR 分割區表中有多個項，也會拒絕對硬碟進行操作。

在使用 MBR/GPT 混合分割區表的硬碟中，這部分儲存了 GPT 分割區表的一部分分割區（通常是前四個分割區），可以使不支援從 GPT 啟動的作業系統從這個 MBR 啟動，啟動後只能操作 MBR 分割區表中的分割區。如早期 Boot Camp 就是使用這種方式啟動 Windows 7。

## 分割區表頭（LBA 1）

分割區表頭定義了硬碟的可用空間以及組成分割區表的項的大小和數量。在使用 64 位元 Windows Server 2003 的機器上，最多可以建立 128 個分割區，即分割區表中保留了 128 個項，其中每個都是 128 位元組。（EFI 標準要求分割區表最小要有 16,384 位元組，即 128 個分割區項的大小）

分割區表頭還記錄了這塊硬碟的 GUID，記錄了分割區表頭本身的位置和大小（位置總是在 LBA 1）以及備份分割區表頭和分割區表的位置和大小（在硬碟的最後）。它還儲存著它本身和分割區表的 CRC32 校驗。韌體、引導程式和作業系統在啟動時可以根據這個校驗值來判斷分割區表是否出錯，如果出錯了，可以使用軟體從硬碟最後的備份 GPT 中恢復整個分割區表，如果備份 GPT 也校驗錯誤，硬碟將不可使用。所以 GPT 硬碟的分割區表不可以直接使用 16 進位編輯器修改。

主分割區表和備份分割區表的頭分別位於硬碟的第二個磁區（LBA 1）以及硬碟的最後一個磁區。備份分割區表頭中的資訊是關於備份分割區表的。

## 分割區表項（LBA 2–33）

GPT 分割區表使用簡單而直接的方式表示分割區。一個分割區表項的前 16 位元組是分割區類型 GUID。例如，EFI 系統分割區的 GUID 類型是 `{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}`。接下來的 16 位元組是該分割區唯一的 GUID（這個 GUID 指的是該分割區本身，而之前的 GUID 指的是該分割區的類型）。再接下來是分割區起始和末尾的 64 位元 LBA 編號，以及分割區的名字和屬性。

## 作業系統支援

### 類 Unix 作業系統

### 32 位元 Windows

### 64 位元 Windows

## 分割區類型 GUID

1. **^** 本表中的 GUID 使用小端序表示。例如，EFI 系統分割區的 GUID 在這裡寫成 C12A7328-F81F-11D2-BA4B-00A0C93EC93B 但實際上它對應的 16 位元組的序列是 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B—— 只有前 3 部分的位元組序被交換了。
2. **a** **b** Linux 和 Windows 的資料分割區使用相同的 GUID。
3. **a** **b** Solaris 系統中 `/usr` 分割區的 GUID 在 Mac OS X 上被用作普通的 ZFS 分割區。
4. **^** 具體定義見 src/sys/sys/disklabel\_gpt.h（頁面存檔備份，存於網際網路檔案館）。NetBSD 的 GUID 在單獨定義之前曾經使用過 FreeBSD 的 GUID。

## MBR 與 GPT 互相轉換

### Windows 作業系統

在 Win10 1703 及更高版本，執行命令「mbr2gpt /convert/disk: 盤號 /allowfullos」

或者使用 DiskGenius 等軟體將 MBR 轉換為 GPT。

## 參見

* 主開機紀錄
* GUID
* 硬碟分割區
* 可延伸韌體介面
* BIOS

## 外部連結

* Microsoft TechNet: Disk Sectors on GPT Disks
* Microsoft TechNet: Using GPT Drives on x86-64 Systems（頁面存檔備份，存於網際網路檔案館）
* Apple Developer Connection: Secrets of the GPT （頁面存檔備份，存於網際網路檔案館）
* Make the most of large drives with GPT and Linux （頁面存檔備份，存於網際網路檔案館）
* GPT fdisk : Information on Hybrid GPT-MBR, Converting MBR and BSD disklabels to GPT and Booting from GPT disks （頁面存檔備份，存於網際網路檔案館）
* Microsoft : FAQs on Using GPT disks in Windows（頁面存檔備份，存於網際網路檔案館）
* A forum post describing steps to modify existing Windows x64 BIOS-MBR based installations to boot from UEFI-GPT

## 備註

## 參考資料