GPT磁盘由6部分结构组成,如图4-200所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-200 GPT磁盘的结构

保护MBR

保护MBR位于GPT磁盘的第一个扇区,也就是0号扇区,由磁盘签名、MBR磁盘分区表和结束标志组成,如图4-201所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-201 保护MBR

在保护MBR扇区中没有引导程序,分区表内只有一个表项,这个表项描述一个类型为0xEE的分区,分区起始地址是1号扇区,大小为四个字节所能存储的最大值(FF FF FF FF)。该分区的存在可以使计算机认为这个磁盘是合法的,并且已被使用,从而不再去试图对其进行分区、格式化等操作,而EFI根本不使用这个分区表。

GPT头

GPT头位于GPT磁盘的第二个扇区,也就是1号扇区,该扇区是在创建GPT磁盘时生成的,GPT头会定义分区表的起始位置、分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。

图4-202所示是一个GPT头扇区。

GPT磁盘分区的结构原理-数据恢复迷

图4-202 GPT头扇区

GPT头中各个参数的含义见表4-15。

表4-15 GPT头中各个参数的含义

GPT磁盘分区的结构原理-数据恢复迷

再用模板的形式看一下GPT头的结构参数,如图4-203所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-203 GPT头的结构参数模板

对这些参数具体分析如下。

①00H~07H。长度为8字节,是GPT头的签名,十六进制为“45 46 49 20 50 41 52 54”,ASCII码为“EFI PART”。

②08H~0BH。长度为4字节,表示版本号。

③0CH~0FH。长度为4字节,是GPT头的总字节数,当前值为92,说明GPT头占用92字节。

④10H~13H。长度为4字节,是GPT头的CRC校验和。

⑤14H~17H。长度为4字节,保留不用。

⑥18H~1FH。长度为8字节,表示GPT头所在扇区号,通常为1号扇区,也就是GPT磁盘的第二个扇区。

⑦20H~27H。长度为8字节,是GPT头备份的所在扇区号,也就是GPT磁盘的最后一个扇区,当前值为2 503 871。

⑧28H~2FH。长度为8字节,是GPT分区区域的起始扇区号,当前值为34,GPT分区区域通常都是起始于GPT磁盘的34号扇区。

⑨30H~37H。长度为8字节,是GPT分区区域的结束扇区号,当前值为2 503 838。

⑩38H~47H。长度为16字节,是GPT磁盘的GUID。

⑪ 48H~4FH。长度为8字节,表示GPT分区表的起始扇区号,当前值为2,GPT分区表通常都是起始于GPT磁盘的2号扇区。

⑫50H~53H。长度为4字节,表示分区表项的个数。Windows系统限定GPT分区个数为128,每个分区占用一个分区表项,所以该值为128。

⑬54H~57H。长度为4字节,每个分区表项占用字节数,该值固定为128。

⑭58H~5BH。长度为4字节,是分区表的CRC校验和。

⑮5CH~1FFH。长度为420字节,保留不用。

分区表

分区表位于GPT磁盘的2~33号扇区,一共占用32个扇区,能够容纳128个分区表项,每个分区表项大小为128字节。因为每个分区表项管理一个分区,所以Windows系统允许GPT磁盘创建128个分区。

每个分区表项中记录着分区的起始和结束地址、分区类型的GUID、分区名字、分区属性和分区GUID,图4-204是一个GPT磁盘2号扇区的四个分区表项。

GPT磁盘分区的结构原理-数据恢复迷

图4-204 四个分区表项

分区表项中各参数的含义见表4-16。

表4-16 分区表项中各个参数的含义

GPT磁盘分区的结构原理-数据恢复迷

再用模板的形式看一下分区表项的结构参数,如图4-205所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-205 分区表项的模板

对这些参数具体分析如下。

①00H~0FH。长度为16字节,用来描述分区类型,其类型可以是前面提到过的EFI系统分区(ESP)、微软保留分区(MSR)、LDM元数据分区、LDM数据分区、OEM分区、主分区。

微软公司为GPT分区定义的类型见表4-17。

表4-17 微软公司定义的分区类型

分区类型 GUID
微软保留分区(MSR) 16 E3 C9 E3 5C 0B B8 4D 81 7D F9 2D F0 02 15 AE
LDM元数据分区 AA C8 08 58 8F 7E E0 42 85 D2 E1 E9 04 34 CF B3
LDM数据分区 A0 60 9B AF 31 14 62 4F BC 68 33 11 71 4A 69 AD
主分区 A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7

Intel公司为GPT分区定义的类型见表4-18。

表4-18 InteI公司定义的分区类型

分区类型 GUID
未分配 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
EFI系统分区 C1 2A 73 28 F8 1F 11 D2 BA 4B 00 A0 C9 3E C9 3B
含DOS分区表的分区 02 4D EE 41 33 E7 11 d3 9D 69 00 08 C7 81 F3 9F

②10H~1FH。长度为16字节,是分区表的GUID,这个GUID对于分区来讲是唯一的。

③20H~27H。长度为8字节,是分区的起始地址,用LBA地址表示,在分区表项1中该值为34,说明第一个分区开始于GPT磁盘的34号扇区。

④28H~2FH。长度为8字节,是分区的结束地址,用LBA地址表示,在分区表项1中该值为65 569,说明第一个分区结束于GPT磁盘的65 569号扇区。

⑤30H~37H。长度为8字节,是分区的属性。

⑥38H~7FH。长度为72字节,是分区的名称,用Unicode码表示。例如,在第一个分区表项中分区名为“Microsoft reserved partition”,说明这是一个微软保留分区;第二个分区表项中分区名为“Basic data partition”,说明这是一个基本数据分区,也就是主分区。

分区区域

GPT分区区域通常都是起始于GPT磁盘的34号扇区,是整个GPT磁盘中最大的区域,由多个具体分区组成,如EFI系统分区(ESP)、微软保留分区(MSR)、LDM元数据分区、LDM数据分区、OEM分区、主分区等。分区区域的起始地址和结束地址由GPT头定义。

GPT头备份

GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并不是GPT头的简单复制,它们的结构虽然一样,但其中的参数却有一些区别。

图4-206所示是一块GPT磁盘的最后一个扇区,也就是其GPT头的备份。

GPT磁盘分区的结构原理-数据恢复迷

图4-206 GPT头的备份

GPT头备份中各个参数的含义如图4-207所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-207 GPT头备份的结构参数模板

对这些参数具体分析如下。

①00H~07H。长度为8字节,是GPT头的签名,十六进制为“45 46 49 20 50 41 52 54”,ASCII码为“EFI PART”。

②08H~0BH。长度为4字节,表示版本号。

③0CH~0FH。长度为4字节,是GPT头备份的总字节数。当前值为92,说明GPT头备份占用92字节。

④10H~13H。长度为4字节,是GPT头备份的CRC校验和。

⑤14H~17H。长度为4字节,保留不用。

⑥18H~1FH。长度为8字节,表示GPT头备份所在扇区号,当前值为2 503 871号扇区,也就是GPT磁盘的最后一个扇区。

⑦20H~27H。长度为8字节,是GPT头的所在扇区号,当前值为1号扇区,也就是GPT磁盘的第二个扇区。

⑧28H~2FH。长度为8字节,是GPT分区区域的起始扇区号,当前值为34,GPT分区区域通常都是起始于GPT磁盘的34号扇区。

⑨30H~37H。长度为8字节,是GPT分区区域的结束扇区号,当前值为2 503 838。

⑩38H~47H。长度为16字节,是GPT磁盘的GUID。

⑪ 48H~4FH。长度为8字节,表示GPT分区表备份的起始扇区号,当前值为2 503 839,这也是分区区域结束地址的下一个扇区,GPT分区表备份通常都是起始于GPT磁盘分区区域结束地址的下一个扇区。

⑫50H~53H。长度为4字节,表示分区表项的个数。Windows系统限定GPT分区个数为128,每个分区占用一个分区表项,所以该值为128。

⑬54H~57H。长度为4字节,每个分区表项占用字节数,该值固定为128。

⑭58H~5BH。长度为4字节,是分区表的CRC校验和。

⑮5CH~1FFH。长度为420字节,保留不用。

分区表备份

分区区域结束后,紧跟着就是分区表的备份,其地址在GPT头备份扇区中有描述。

分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也就能够保证正常地识别分区。

在图4-207中“GPT分区表备份起始扇区号”参数的值就是分区表备份所在的扇区号了。当前值为2 503 839,跳转到该扇区,看到的内容与GPT磁盘的2号扇区中分区表完全一样,其如图4-208所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-208 分区表备份

其模板如图4-209所示。

GPT磁盘分区的结构原理-数据恢复迷

图4-209 分区表备份的模板

WinHex本身并没有提供GPT磁盘各数据结构的模板,这需要读者自己根据对GPT磁盘数据结构的掌握写出这些模板。