GPT磁盘由6部分结构组成,如图4-200所示。
保护MBR位于GPT磁盘的第一个扇区,也就是0号扇区,由磁盘签名、MBR磁盘分区表和结束标志组成,如图4-201所示。
在保护MBR扇区中没有引导程序,分区表内只有一个表项,这个表项描述一个类型为0xEE的分区,分区起始地址是1号扇区,大小为四个字节所能存储的最大值(FF FF FF FF)。该分区的存在可以使计算机认为这个磁盘是合法的,并且已被使用,从而不再去试图对其进行分区、格式化等操作,而EFI根本不使用这个分区表。
GPT头位于GPT磁盘的第二个扇区,也就是1号扇区,该扇区是在创建GPT磁盘时生成的,GPT头会定义分区表的起始位置、分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。
图4-202所示是一个GPT头扇区。
GPT头中各个参数的含义见表4-15。
表4-15 GPT头中各个参数的含义
再用模板的形式看一下GPT头的结构参数,如图4-203所示。
对这些参数具体分析如下。
①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号扇区的四个分区表项。
分区表项中各参数的含义见表4-16。
表4-16 分区表项中各个参数的含义
再用模板的形式看一下分区表项的结构参数,如图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头的简单复制,它们的结构虽然一样,但其中的参数却有一些区别。
图4-206所示是一块GPT磁盘的最后一个扇区,也就是其GPT头的备份。
GPT头备份中各个参数的含义如图4-207所示。
对这些参数具体分析如下。
①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所示。
其模板如图4-209所示。
WinHex本身并没有提供GPT磁盘各数据结构的模板,这需要读者自己根据对GPT磁盘数据结构的掌握写出这些模板。