Windows GPT磁盤GUID結構詳解

前一篇 Windows磁盤MBR結構詳解 中我們介紹了Basic Disk中的Master Boot Record結構。GPT Disk作爲Windows 2003以後引入的分區結構。使用了GUID分區表結構,它與MBR相比好處是支持更大和更多的分區,提高容錯。本文介紹了GUID分區表的結構和各個字段的含義。


GPT Disk 的Protective MBR:


GPT Disk的結構中,第一個LBA位置(LBA 0)存放的是Protective MBR,隨後LBA1的位置纔是GPT的GUID分區表頭。Protective MBR的作用是爲了兼容性考慮,阻止一些遺留的MBR磁盤工具破壞GUID分區表。這種在LBA 0的位置存放Protective MBR的結構是基於Extensible Firmware Interface(EFI)規格。Protective MBR和MBR擁有同樣的結構,同時還包括一條包含值爲0xEE的System ID的分區記錄(如下圖所示),這個值標註了該分區爲GPT分區,如果包含該分區的磁盤被移動到Windows 2000中或者被一些遺留的磁盤工具訪問,則該分區會被標註晨GPT Protective分區,不能被刪除。

wKioL1jwer-CWPCdAACdwOH4PvA060.jpg-wh_50


Globally Unique Identifier Partition Table(GUID)結構:


如下圖所示,組成GPT Disk的GUID記錄有以下幾種:

wKioL1jweYPCAoeeAACokmIK0Po530.jpg-wh_50

GUID Partition Table Header: GPT Header定義了分區記錄所用到的Logical Block Address的區域。同時還定義了分區在磁盤上的位置、它自身的GUID、以及一組CRC32的校驗值。Primary GPT Header位於磁盤的LBA1位置,緊跟着Protective MBR。Backup GPT Header位於磁盤最後一個磁道之上。下圖是GPT Header中包含幾個字段:

wKioL1jwfKPRwvbcAAB9Z71ttig789.jpg-wh_50


  • 首位0x00是爲長度8個字節的簽名檔,這個值必須爲固定值,用來定義EFI的兼容性。

  • 0x08開始有四組長度爲4個字節的字段,Revision標註EFI規格的版本信息、Header Size記錄了整個GPT Head的大小,也爲固定值、CRC32的校驗信息、Reserved預留位。

  • 隨後0x18開始是5個長度爲8個字節的字段和一個長度爲16字節字段,Primary LBA記錄了Primary GPT Head的位置、Backup LBA記錄Backup GPT Header的位置、First Usable LBA記錄了第一個分區的起始位置,例如64位的Windows Server 2003,它的起始位置是34、Last Usable LBA記錄的分區結束的位置。Disk GUID長度爲16個字節,用來標識分區表頭和磁盤、 Partition Entry LBA記錄GUID分區記錄的位置,固定爲LBA2。

  • 從0x50開始爲3個長度爲4字節的記錄,Number of Partition Entries記錄最大的磁盤分區數,例如64位的Windows Server是128個、Size of Partition Entry記錄了每個GUID分區記錄大小,它的值爲128字節、Partition Entry Array CRC32記錄一組分區記錄的校驗值。

  • 最後從0x5C位置開始長度爲420字節的預留空間,值都爲0。


GUID Partition Entry Array:類似MBR中的分區表,GUID partition entry array中包含了磁盤上每個分區的記錄。比如64位的Windows Server 2003創建了一個Array值爲16384字節,則第一個可用的數據大於等於LBA34. GUID Partition Entry Array也在分區最後存在一個副本,位置是在最後一個可用的LBA之後,GUID Partition table header之前。


GUID Partition Entry: GUID Partition Entry長度爲128個字節,用來定義單個分區結構。每個GUID Partition entry從Partition Type記錄開始。長度爲16個字節的Partition Type GUID,類似MBR磁盤分區表中的System ID,它定義了分區中包含的數據和分區的作用。下圖中是一個典型的GPT Disk的GUID Partition entry array記錄,這個圖中顯示了三種分區記錄


第一部分{45464920-5041-5254-0000-01005C000000}爲EFI System分區、中間部分{16E3C9E3–5C0B–B84D–817D–F92DF00215AE}爲Microsoft Reserved分區,最下面的一個{A2A0D0EB–E5B9–3344–87C0–68B6B72699C7}是Windows Basic Disk中的一個主分區。

wKioL1jwfvfgjy_oAAC_R0kGxyk828.jpg-wh_50

wKioL1jwfxLDbMtgAAEYRZwhpEs419.jpg-wh_50

在每個部分的中間位置主要記錄了一些字段。Partition Type GUID之後的0x10位置開始,是一個長度爲16字節的Unique Partition GUID記錄用來標識每條記錄的唯一性。0x20開始爲3個長度爲8個字節的字段,Starting LBA和Ending LBA分別記錄了分區的起始和結束的位置、Attribute Bit描述了分區是如何使用的,例如是否爲隱藏和只讀等等、最後0x38開始的72個字節字段用來Unicode的分區的名字,名字最長爲36個字符。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章