前言

本节将进行学习 GPT(GUID Partition Table 全局唯一标识分区表)与三种U盘的工作模式。

知识点总览

  • GPT 磁盘分区的特点

  • GPT 磁盘分区的结构

  • U盘 的工作模式

    • HDD 模式
    • FDD 模式
    • ZIP 模式

GPT 磁盘分区的特点

GPT 是 GUID Partition Table 的缩写,其含义为“全局唯一标识磁盘分区表”,GUID 是 “全局唯一标识符(Globally Unique Identifier)”的缩写

GPT 分区有如下特点:

  1. 目前能够支持 GPT 磁盘分区的操作系统有

    系统名称 备注
    Windows Server 2008 64位 及以后版本
    Windows XP 64 位 无法作为 efi 引导
    Windows 7 64 位 及以后版本
    MacOS X
    Linux
  2. 理论上,GPT 磁盘在长度上最大可达 264 个逻辑块,每个逻辑块容量一般为 512 字节,最大分区(磁盘)容量受操作系统版本的影响。Windows XP 和 Windows Server 2003 的原始版本中,每个区物理磁盘的最大容量为 2TB。对于 Windows Server 2003 SPI、Windows XP x64 版本及以后的版本,支持最大原始分区为 18EB。

  3. EFI 规范对分区数量几乎没有限制,但是 Windows 实现限制的分区数量为 128 个。

    与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大为128个分割,一个分割最大18 EB(Exabytes),只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。在UEFI系统上,通常是通过ESP分区中的EFI应用程序文件启动GPT硬盘上的操作系统,而不是活动主分区上的引导程序。

    来源:主引导记录 - 维基百科,自由的百科全书 (wikipedia.org)

    GPT 中分区表的存储空间大小会限制分区数量。

  4. Windows Server 2008 等操作系统只能在 GPT 磁盘分区上进行数据操作,只有基于 Itanium 的 Windows 系统才能从 GPT 分区上启动。

  5. GPT 和 MBR 结构可以在支持 GPT 的系统上混合使用,但支持 EFI 的系统要求启动分区位于 GPT 磁盘上,另一个硬盘可以是 MBR,也可以是 GPT。

  6. 在系统支持的情况下可以将 MBR 磁盘转换为 GPT 磁盘,但是只有在磁盘为空的情况下才可以将 GPT 磁盘转换为 MBR 磁盘,否则会清空所有数据。

  7. GPT 磁盘尾部存有分区表备份。在磁盘的首尾部分存有相同的分区表,当其中一份被破坏后,可以通过另一份进行修复。

GPT 磁盘分区的结构

img

原上传者为英语维基百科Kbolino - Transferred from en.wikipedia to Commons. Transfer was stated to be made by User:Kbolino.

  • CC BY-SA 2.5
  • File:GUID Partition Table Scheme.svg
  • 创作时间:2007年1月27日 (原始上传日期)

GPT磁盘分区的结构原理

保护MBR

保护 MBR 位于 GPT 磁盘的第 1 个扇区,即 0 号扇区,由磁盘签名、MBR 磁盘分区表和结束标志组成,如下图所示。

image-20211207171637650

GPT 头

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

image-20211207172245412

GPT头中各个参数的含义:

GPT磁盘分区的结构原理

使用模板管理器查看该数值为:

image-20211207195504429

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

①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磁盘的最后一个扇区,当前值为83,886,079。

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

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

⑩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。

image-20211207200311861

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

GPT磁盘分区的结构原理

image-20211207200434684

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

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

GPT头备份

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

image-20211207200715382

image-20211207200739451

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

①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头备份所在扇区号,当前值为83,886,079号扇区,也就是GPT磁盘的最后一个扇区。

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

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

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

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

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

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

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

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

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

分区表备份

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

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

“GPT分区表备份起始扇区号”参数的值就是分区表备份所在的扇区号了。当前值为83,886,047,跳转到该扇区,看到的内容与GPT磁盘的2号扇区中分区表完全一样:

image-20211207201016200

Winhex 本身并没有提供GPT磁盘各数据结构的模板,文章中出现的模板为《数据恢复技术深度揭秘(第二版)》中随书附赠的光盘中所提供的。

U盘的工作模式

HDD 模式

将U盘模拟成硬盘模式,现在大多数U盘默认就是这个模式,该模式下多为 MBR 磁盘分区格式,也可以支持 GPT 分区。

在这个模式下,U盘的逻辑数据上与硬盘无差别,可以进行正常分区,支持多个分区(Windows 7及以下的版本无法在资源管理器访问多个分区)。

在 DiskGenius 中查看该模式下磁盘的图表为常规硬盘:

image-20211208143325033

特别注意:如果选择了HDD模式,那么这个启动U盘启动后的盘符是C,在对启动分区进行操作时就容易产生很多问题,比如:装系统时安装程序会把启动文件写到U盘而不是你硬盘的启动分区!导致系统安装失败。所以请尽量先选择ZIP模式;

FDD 模式

将U盘模拟成软驱模式,这个模式下的分区类型为“无法分区的”磁盘,因为在底层情况下,0 扇区被替换为了分区的DBR。

image-20211208143650794

用 Winhex 打开 FDD 模式下的 U盘(可以是虚拟分区),后可以看到 DBR 位于磁盘的 0 扇区。

image-20211208143238168

在 DiskGenius 中可以看到该模式下磁盘的图标为 FDD 软驱:

image-20211208143118488

这个模式的U盘在一些支持USB-FDD启动的机器上启动时会找不到U盘,所以请酌情使用;

ZIP 模式

将U盘模拟成 ZIP 驱动器模式,在底层情况下,这种模式使用的是 MBR 磁盘分区格式,其中首个分区的位置在磁盘的 32 号扇区。

image-20211208143816350

在 DiskGenius 中查看该模式下磁盘的图标为 Zip Drive(极碟):

image-20211208144018035

另外如果U盘容量超过了256M,就只能用HDD模式,小于等于256M可以用ZIP模式。