赞
踩
GPT分区模式使用GUID分区表,是源自EFI标准的一种较新的磁盘分区表结构的标准。与普遍使用的主引导记录(MBR)分区方案相比,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)的内容对比,会发现两个扇区的内容是完全一致的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。