GPT 磁盘分区格式简介及解析示例

您所在的位置:网站首页 严浩翔头像微信 GPT 磁盘分区格式简介及解析示例

GPT 磁盘分区格式简介及解析示例

2024-03-26 09:31| 来源: 网络整理| 查看: 265

1. GPT 磁盘分区简介

       GPT分区模式使用GUID分区表,是源自EFI标准的一种较新的磁盘分区表结构的标准。与普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。 

2. GPT 磁盘分区解析

2.1 GPT 磁盘整体布局

GPT 磁盘整体布局如下图所示:

 

2.2 保护MBR区域

       保护MBR区域位于LBA0(GPT磁盘的第一个扇区),保护MBR区域的存在主要是为了兼容性,存储传统MBR信息。

       在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。

       在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是使用这种方式启动Windows。

       保护MBR区域示例:如下图所示,GPT磁盘保护MBR区域的内容与MBR磁盘第一个扇区的内容在格式上有点类似,包括我们熟悉的"55 AA" MBR结束标志。只不过GPT磁盘保护MBR区域的内容大部分都被置0,因为操作系统在解析GPT磁盘时,并不依赖保护MBR区域的内容。

2.3 EFI 部分

       EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域。下面我们分别针对每一部分做简单介绍。

2.3.1 EFI信息区(GPT头)

       起始于磁盘的LBA1,通常也只占用这个单一扇区。其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。下表是GPT Header Format 说明。

       GPT头示例:起始偏移:0x200(1*SectorSize,本机扇区大小为512字节,前面八个字节是魔数,对应于"EFI PART")

2.3.2 分区表

       分区表区域包含分区表项。这个区域由GPT头定义,一般占用磁盘LBA2~LBA33扇区。分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位(16字节)的GUID对系统来说是唯一的。

        GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。

附:分区类型说明

附:分区属性说明

        GPT分区表区域示例:截取了LBA2(偏移0x400)的内容,包含四条分区表记录,每条分区表记录128字节,每条分区表记录解析见后文。

2.3.3 GPT分区

        最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT头定义。

        GPT分区示例:我们通过解析2.3.2 GPT分区表区域中第四条分区表项(Basic Data Partition)来看看GPT分区第一个扇区的内容。

/**                            GPT partition entry format

 +0        16 bytes    Partition type GUID:"A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7"

 +16    16 bytes    Unique partition GUID:"6D 96 29 D1 8F 40 DB 41 B4 30 C6 5E 14 81 56 F8"

 +32    8 bytes    First LBA (little endian):0x11B800

 +40    8 bytes    Last LBA (inclusive, usually odd):0x10640319

 +48    8 bytes    Attribute flags (e.g. bit 60 denotes read-only):0x0,System Partition

 +56    72 bytes    Partition name (36 UTF-16LE code units) :"Basic data partition"                                                 

*/  

跳转到分区起始位置:0x11B800 = 1161216 号扇区

然后会发现已经跳转到了具体目标文件系统DBR区域,有兴趣的朋友可以自己去深入理解NTFS文件系统的解析:

2.3.4 备份区

       备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区和EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份LBA2~LBA33扇区的分区表

        备份区域示例:截取了LBA2分区表的备份区域(从磁盘尾部偏移0x4200,33*SectorSize)的内容,包含四条分区表记录,每条分区表记录128字节,可以与2.3.1中截取的LBA2(偏移0x400)的内容对比,会发现两个扇区的内容是完全一致的。

3. 参考资料


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3