GUID partition table, GPT 磁盘分区表
而在原本的分割表的纪录区内,这个兼容模式仅放入一个特殊标志的分割,用来表示此磁盘为 GPT 格式之意。这个部份纪录了分割表本身的位置与大小,同时纪录了备份用的 GPT 分割 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分割表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。当主分区表头或主分区表损坏时,系统或修复工具可以通过读取LBA1
- LBA0 (MBR 兼容区块)
与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,存储了第一阶段的开机管理程式! 而在原本的分割表的纪录区内,这个兼容模式仅放入一个特殊标志的分割,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分割表的磁盘管理程式, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分割信息,进一步保护了此磁盘喔!
- LBA1 (GPT 表头纪录)
这个部份纪录了分割表本身的位置与大小,同时纪录了备份用的 GPT 分割 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分割表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以透过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运作!
根据您提供的书籍描述和搜索结果,您的理解基本正确:分区表(即实际记录分区信息的条目)在标准GPT布局中确实位于磁盘靠前的位置(LBA2-33)。但LBA1 (GPT表头记录)专门记录其“位置与大小”,这并非多此一举,而是GPT设计精巧性和可靠性的核心体现:
具体原因可以从以下几个方面理解:
-
“自描述”与灵活性:GPT分区表的设计哲学是“自描述”。LBA1 相当于整块磁盘的“目录”或“地图”,它明确告诉系统或固件:分区表从哪里开始(位置)、占用了多少空间(大小)。虽然标准布局中分区表紧接在LBA1之后(LBA2-33),但理论上这个位置和大小是可以定义的(例如,为了兼容未来的扩展)。记录这些信息使得系统不必硬编码“分区表就在LBA2”,增强了设计的规范性和未来扩展的灵活性。
-
备份机制的关键:LBA1记录的信息不仅是给主分区表用的,更是为了定位备份分区表。LBA1中会明确记录备份用的GPT分区表(位于磁盘最后34个LBA区块)的存放位置。当主分区表头或主分区表损坏时,系统或修复工具可以通过读取LBA1(如果LBA1也损坏,则可以从磁盘尾部读取备份的GPT头)中的信息,准确地找到备份分区表的位置,从而进行恢复。如果位置是固定的,这种备份和恢复机制的可靠性会降低。
-
完整性校验的基石:LBA1中还储存了分区表(以及其自身)的CRC32校验码。操作系统或UEFI固件在启动时,会根据LBA1中记录的“分区表位置与大小”信息,读取相应的扇区,计算其CRC校验值,并与LBA1中存储的值比对。以此判断分区表数据是否完整、正确。如果LBA1不记录分区表的大小,系统就无法确定需要校验的数据范围。
简单来说,LBA1记录分区表的位置和大小,主要目的不是回答“它在哪里”(因为确实在开头),而是为了:
- 规范地定义数据结构的边界。
- 为实现强大的备份与恢复功能提供精确的寻址依据。
- 为数据完整性校验划定明确的范围。
因此,这不是冗余信息,而是GPT相较于MBR在可靠性和扩展性上更优越的关键设计之一。
1 你说过:
“虽然标准布局中分区表紧接在LBA1之后(LBA2-33),但理论上这个位置和大小是可以定义的“。
你的意思是,其实分区表可以放在磁盘任意的LBA中,只要在LB1中说明在哪些LBA中即可?
2 备份用的GPT分区表必须位于整颗磁盘的最后34个LBA区块中吗?
- 关于分区表的位置,您的理解是基本正确的。
GPT分区表的布局确实不是完全硬编码的。虽然绝大多数系统和磁盘都采用标准布局(即主分区表紧接在LBA1之后,占用LBA2至LBA33),但根据GPT的设计规范,分区表的起始位置和大小是由位于LBA1的GPT表头来定义的.
GPT表头中包含了关键字段,用以指明:
- 主分区表所在的起始LBA地址。
- 主分区表占用的LBA数量(决定了最多可以有多少个分区条目)。
因此,理论上只要在LBA1中正确设置了这些参数,主分区表可以位于磁盘上任意的、连续的LBA区块中。然而,这种灵活性在实践中极少被使用,因为固定的标准布局(LBA2-33)确保了最大的兼容性和工具支持。
- 关于备份分区表的位置,它通常位于磁盘末端,但其具体位置同样由LBA1定义。
根据GPT的设计,为了提供冗余保护,会在磁盘上保存一份备份的分区表。搜索结果中多次提到,这份备份分区表(包括其表头)通常位于磁盘最后的33个或34个LBA区块.
关键在于,与主分区表类似,备份分区表的精确位置(起始LBA)和大小,也明确记录在LBA1的GPT表头中。操作系统或修复工具在需要时,会读取LBA1中的信息来定位备份分区表的位置。
总结来说:GPT的核心设计思想是通过LBA1中的元数据来动态描述分区结构,而不是依赖绝对的固定位置。主分区表和备份分区表的位置都是“可定义的”,但为了实现高兼容性和可靠性,业界普遍遵循“主分区表在LBA2-33,备份分区表在磁盘末尾”这一标准布局。LBA1中的信息是系统寻找这两部分数据的唯一权威依据。
LBA2-LBA33 (实际纪录分割信息处)
从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分割纪录,所以在缺省的情况下,总共可以有 4*32 = 128 笔分割纪录喔!
根据以上我所知道的GPT分割表知识,结合刚才您说的如下内容:
GPT表头中包含了关键字段,用以指明:主分区表所在的起始LBA地址。
主分区表占用的LBA数量(决定了最多可以有多少个分区条目)。
可不可以理解为
如果该颗磁盘仅被用户分割为10个分区,那么仅仅需用3个LBA就可以记录这些分割记录了,不需要更多的LBA参与近来了?
是的,您的理解是完全正确的。
GPT分区表的结构设计是灵活且高效的。GPT表头中的“主分区表占用的LBA数量”字段,定义了为分区条目预留的最大空间。这个值通常被设定为 128(个条目) / 4(每LBA) = 32 个LBA,从而为未来的扩展提供了足够的上限(128个分区)。
然而,在实际使用中,系统或分区工具只会占用和写入实际所需的部分。
因此,如果用户只创建了10个分区,那么:
- 系统理论上只需要 ceil(10 / 4) = 3 个LBA(LBA2, LBA3, LBA4)来存储这10条分区记录。
- 从LBA5到LBA33(或表头定义的最后LBA)的剩余空间会被保留为空闲状态,分区表项的内容可能为全零(表示未使用)。
- 当用户未来需要增加第11个分区时,分区工具会直接使用LBA5中的第一个记录位置,而不需要扩展分区表区域。
所以,您的结论“如果该颗磁盘仅被用户分割为10个分区,那么仅仅需用3个LBA就可以记录这些分割记录了,不需要更多的LBA参与进来了”是符合GPT规范的。实际占用的LBA数量是根据分区数量动态决定的,而非总是占用全部预留空间。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)