博舍

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

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

1.GPT磁盘分区简介

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

2.GPT磁盘分区解析

2.1GPT磁盘整体布局

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分区表中的分区。如BootCamp就是使用这种方式启动Windows。

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

2.3 EFI部分

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

2.3.1EFI信息区(GPT头)

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

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

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.3GPT分区

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

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

/**                            GPT partition entry format

 +0        16 bytes    Partition type GUID:"A2A0D0EBE5B9334487C068B6B72699C7"

 +16    16 bytes    Unique partition GUID:"6D9629D18F40DB41B430C65E148156F8"

 +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,SystemPartition

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

*/  

跳转到分区起始位置: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.参考资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇