GPT详解

125次阅读

全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(UEFI)标准(被 Intel 用于替代个人计算机的 BIOS)的一部分,被用于替代 BIOS 系统中的一 32bits 来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。对于那些扇区为 512 字节的磁盘,MBR 分区表不支持容量大于 2.2TB(2.2×1012 字节)的分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,并且将他们的容量较大的磁盘升级到 4KB 的扇区,这意味着 MBR 的有效容量上限提升到 16 TiB。这个看似“正确的”解决方案,在临时地降低人们对改进磁盘分配表的需求的同时,也给市场带来关于在有较大的块(block)的设备上从 BIOS 启动时,如何最佳的划分磁盘分区的困惑。GPT 分配 64bits 给逻辑块地址,因而使得最大分区大小在 264- 1 个扇区成为可能。对于每个扇区大小为 512 字节的磁盘,那意味着可以有 9.4ZB(9.4×10^21 字节)或 8 ZiB 个 512 字节。

LBA0: 保护性 MBR

在 GPT 分区表的最开头,处于兼容性考虑仍然存储了一份传统的 MBR(LBA 0),这个 MBR 叫做保护性 MBR(Protective MBR)。其中包含有磁盘签名,MBR 分区表,结束标志。这里没有引导代码,分区表中只有一个分区表项,GPT 不会用到,这个分区项只是为了让系统认为磁盘是合法的。

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

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

LBA1:主要 GPT 头部

主要 GPT 头部位于 1 号扇区,会定义分区表的起始位置,结束位置,分区表项个数;

分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用 64 位 Windows Server 2003 的机器上,最多可以创建 128 个分区,即分区表中保留了 128 个项,其中每个都是 128 字节。(EFI 标准要求分区表最小要有 16,384 字节,即 128 个分区项的大小)

分区表头还记录了这块硬盘的 GUID,记录了分区表头本身的位置和大小(位置总是在 LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的 CRC32 校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份 GPT 中恢复整个分区表,如果备份 GPT 也校验错误,硬盘将不可使用。所以 GPT 硬盘的分区表不可以直接使用 16 进制编辑器修改。

分区表头的格式

主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。

LBA2-33:分区表项

分区表位于 GPT 磁盘的 2 -33 号扇区,一共占用 32 个扇区,能够容纳 128 个分区表项。每个分区表项大小为 128 字节。因为每个分区表项管理一个分区,所以 GPT 磁盘可以创建 128 个分区。

GPT 分区表使用简单而直接的方式表示分区。一个分区表项的前 16 字节是分区类型 GUID。接下来的 16 字节是该分区唯一的 GUID(这个 GUID 指的是该分区本身,而之前的 GUID 指的是该分区的类型)。再接下来是分区起始和末尾的 64 位 LBA 编号,以及分区的名字和属性。

GPT 分区表项的格式

LBA34: 分区区域

GPT 分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由 GPT 头定义。

LBA -33~-2:分区表备份

分区区域结束后就是分区表备份,其地址在 GPT 头备份扇区中有描述。分区表备份是对分区表 32 个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区

LBA -1:GPT 头备份

GPT 头有一个备份,放在 GPT 磁盘的最后一个扇区,但这个 GPT 头备份并非完全 GPT 头备份,某些参数有些不一样。复制的时候根据实际情况更改一下即可。

(1)得益于 LBA 提升至 64 位,以及分区表中每项 128 位设定,GPT 可管理的空间近乎无限大,假设一个扇区大小仍为 512 字节,可表示扇区数为,算下来,可管理的硬盘容量 =18EB(1EB=1024PB=1,048,576TB),2T 在它面前完全不在话下。按目前的硬盘技术来看,确实近乎无限,不过,以后的事谁知道呢。

(2)分区数量几乎没有限制,由于可在表头中设置分区数量的大小,如果愿意,设置个分区也可以(有人愿意管理这么多分区吗),不过,目前 windows 仅支持最大 128 个分区。

(3)自带保险,由于在磁盘的首尾部分各带一个 GPT 表头,任何一个受到破坏后都可以通过另一份恢复,极大地提高了磁盘的抗性(两个一起坏的请出门买彩票)。

(4)循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。

(5)尽管目前分区类型不超过百数(十数也没有吧。),GPT 仍提供了 16 字节的 GUID 来标识分区类型,使其更不容易产生冲突。

(6)每个分区都可以拥有一个特别的名字,最长 72 字节,足够写一首七律了。满足你的各种奇葩起名需求。

原文链接:https://www.jianshu.com/p/188c41b600f4

正文完
 
不知道
版权声明:本站原创文章,由 不知道 2023-07-10发表,共计2477字。
转载说明:声明:本站内容均来自互联网,归原创作者所有,如有侵权必删除。 本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。