前言

本节将进行学习 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 模式。