前一篇 Windows磁盤MBR結(jié)構(gòu)詳解 中我們介紹了Basic Disk中的Master Boot Record結(jié)構(gòu)。GPT Disk作為Windows 2003以后引入的分區(qū)結(jié)構(gòu)。使用了GUID分區(qū)表結(jié)構(gòu),它與MBR相比好處是支持更大和更多的分區(qū),提高容錯。本文介紹了GUID分區(qū)表的結(jié)構(gòu)和各個字段的含義。
剛察網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
GPT Disk 的Protective MBR:
GPT Disk的結(jié)構(gòu)中,第一個LBA位置(LBA 0)存放的是Protective MBR,隨后LBA1的位置才是GPT的GUID分區(qū)表頭。Protective MBR的作用是為了兼容性考慮,阻止一些遺留的MBR磁盤工具破壞GUID分區(qū)表。這種在LBA 0的位置存放Protective MBR的結(jié)構(gòu)是基于Extensible Firmware Interface(EFI)規(guī)格。Protective MBR和MBR擁有同樣的結(jié)構(gòu),同時還包括一條包含值為0xEE的System ID的分區(qū)記錄(如下圖所示),這個值標(biāo)注了該分區(qū)為GPT分區(qū),如果包含該分區(qū)的磁盤被移動到Windows 2000中或者被一些遺留的磁盤工具訪問,則該分區(qū)會被標(biāo)注晨GPT Protective分區(qū),不能被刪除。
Globally Unique Identifier Partition Table(GUID)結(jié)構(gòu):
如下圖所示,組成GPT Disk的GUID記錄有以下幾種:
GUID Partition Table Header: GPT Header定義了分區(qū)記錄所用到的Logical Block Address的區(qū)域。同時還定義了分區(qū)在磁盤上的位置、它自身的GUID、以及一組CRC32的校驗(yàn)值。Primary GPT Header位于磁盤的LBA1位置,緊跟著Protective MBR。Backup GPT Header位于磁盤最后一個磁道之上。下圖是GPT Header中包含幾個字段:
首位0x00是為長度8個字節(jié)的簽名檔,這個值必須為固定值,用來定義EFI的兼容性。
0x08開始有四組長度為4個字節(jié)的字段,Revision標(biāo)注EFI規(guī)格的版本信息、Header Size記錄了整個GPT Head的大小,也為固定值、CRC32的校驗(yàn)信息、Reserved預(yù)留位。
隨后0x18開始是5個長度為8個字節(jié)的字段和一個長度為16字節(jié)字段,Primary LBA記錄了Primary GPT Head的位置、Backup LBA記錄Backup GPT Header的位置、First Usable LBA記錄了第一個分區(qū)的起始位置,例如64位的Windows Server 2003,它的起始位置是34、Last Usable LBA記錄的分區(qū)結(jié)束的位置。Disk GUID長度為16個字節(jié),用來標(biāo)識分區(qū)表頭和磁盤、 Partition Entry LBA記錄GUID分區(qū)記錄的位置,固定為LBA2。
從0x50開始為3個長度為4字節(jié)的記錄,Number of Partition Entries記錄最大的磁盤分區(qū)數(shù),例如64位的Windows Server是128個、Size of Partition Entry記錄了每個GUID分區(qū)記錄大小,它的值為128字節(jié)、Partition Entry Array CRC32記錄一組分區(qū)記錄的校驗(yàn)值。
最后從0x5C位置開始長度為420字節(jié)的預(yù)留空間,值都為0。
GUID Partition Entry Array:類似MBR中的分區(qū)表,GUID partition entry array中包含了磁盤上每個分區(qū)的記錄。比如64位的Windows Server 2003創(chuàng)建了一個Array值為16384字節(jié),則第一個可用的數(shù)據(jù)大于等于LBA34. GUID Partition Entry Array也在分區(qū)最后存在一個副本,位置是在最后一個可用的LBA之后,GUID Partition table header之前。
GUID Partition Entry: GUID Partition Entry長度為128個字節(jié),用來定義單個分區(qū)結(jié)構(gòu)。每個GUID Partition entry從Partition Type記錄開始。長度為16個字節(jié)的Partition Type GUID,類似MBR磁盤分區(qū)表中的System ID,它定義了分區(qū)中包含的數(shù)據(jù)和分區(qū)的作用。下圖中是一個典型的GPT Disk的GUID Partition entry array記錄,這個圖中顯示了三種分區(qū)記錄
第一部分{45464920-5041-5254-0000-01005C000000}為EFI System分區(qū)、中間部分{16E3C9E3–5C0B–B84D–817D–F92DF00215AE}為Microsoft Reserved分區(qū),最下面的一個{A2A0D0EB–E5B9–3344–87C0–68B6B72699C7}是Windows Basic Disk中的一個主分區(qū)。
在每個部分的中間位置主要記錄了一些字段。Partition Type GUID之后的0x10位置開始,是一個長度為16字節(jié)的Unique Partition GUID記錄用來標(biāo)識每條記錄的唯一性。0x20開始為3個長度為8個字節(jié)的字段,Starting LBA和Ending LBA分別記錄了分區(qū)的起始和結(jié)束的位置、Attribute Bit描述了分區(qū)是如何使用的,例如是否為隱藏和只讀等等、最后0x38開始的72個字節(jié)字段用來Unicode的分區(qū)的名字,名字最長為36個字符。