GPT分区表

1. 概述

GPT和MBR分区表的详细介绍可以参考UEFI规范,其中,UEFI规范可以从官网下载:www.uefi.org 。为方便大家下载,已放在本站:http://download.csdn.net/detail/u013344915/7019195


本文仅对UEFI规范这一部分“GUID Partition Table (GPT) Disk Layout”做简单的解读,更详细地请参考规范原文。原文只有十几页,看起来也不会很吃力。


2. 缩略语

  • GPT:GUID Paritition Table
  • MBR:Master Boot Record
  • LBA:Logical Boot Record


3. GPT相对MBR的优势

  • Logical Block Addresses (LBAs) are 64 bits (rather than 32 bits).
    LBA是64位编址 ——后面会看到,MBR的编址是4字节,因此只有2TB的硬盘空间可以被寻址;而GPT则是8字节。
  • Supports many partitions (rather than just four primary partitions).
    支持更多的分区,而不是只有4个主分区 ——实际上MBR可以通过扩展分区来绕过4个主分区的限制。
  • Provides both a primary and backup partition table for redundancy.
    提供了primary和backup分区表,即冗余备份 ——对于MBR,如果第一个扇区这个MBR破坏了,那么可能硬盘就无法访问了。
  • Uses version number and size fields for future expansion.
    支持以后的扩展
  • Uses CRC32 fields for improved data integrity.
    通过CRC32来改价数据完整性
  • Defines a GUID for uniquely identifying each partition.
    每个分区有一个唯一的GUID
  • Uses a GUID and attributes to define partition content type.
    GUID和属性来定义分区的内容类型
  • Each partition contains a 36 character human readable name.
    每个分区可以有个易读的名称


4. MBR

MBR分区的格式如下(规范的Chapter 5 - Table 13):


其中PartitionRecord是4个MBR partition record的数组,每个partition record的结构如下(规范的Chapter 5 - Table 14):


通过以上的两个表,注意到如下几个事实:

  • 寻址空间是4个字节:StartingLBA & SizeInLBA,通常一个LBA即一个扇区512字节。所以寻址空间大致是512 * 2^32 = 2TB。如果硬盘空间大于2TB,那么采用MBR就不能把硬盘存储空间用完;
  • 只有4个主分区,或者3个主分区+1个扩展分区:但扩展分区中可以有无限制个逻辑分区。对Windows经常装机的对这几个分区会很熟悉;
  • MBR中的BootCode是BIOS自举之后加载的硬盘中的第一个数据,接下来才进入OS级别的调用。


MBR格式的磁盘布局如下(规范的图16):


考虑到MBR分区的寻址空间的限制,及其他问题,引申出GPT分区。


5. GPT

对于GPT分区,首先注意一个事实就是:为了让其他OS能够识别硬盘,而采用了兼容MBR的设计策略。即GPT第一个LBA或扇区是称为protective MBR的分区,接下来从LBA1才是GPT的主要的内容。结构如下:




即:

  • LBA0:protective MBR,兼容考虑;
  • LBA1:Partition Table Header,即GPT分区表的表头,下面会给出Header的组成结构;
  • LBA2开始是GPT的每个分区记录,规范称为Partition Entry,其个数仅受磁盘空间所限;
  • LBAn:backup GPT Header放在磁盘的最后一个LBA;严格来讲,并不是一个LBA,因为Header部分占用一个LBA,另外的Partition Entries则会占用另外一些LBA空间。


规范的下面这个图形更加形象:



有了上面两个GPT分区结构图,再结合GPT Header和Partition Entry的结构体,就基本理解了GPT分区的情况。


5.1 GPT Header结构体

下面是规范的表17:


在这个表结构中,

  • 有2个CRC32校验:一个是整个Header部分的校验,以及Partition Entries部分的校验。当任何一个分区变化的时候,第二个CRC需要更新,接下来第一个Header级别的CRC也需要更新;
  • Header部分仅指定了partition entry的起始LBA、partition entry的个数、每个partition entry的大小;据此就可以通过寻址读取数据来计算partition entries部分的CRC32;
  • 指出了backup GPT的LBA,即AlternateLBA;
  • 所有LBA寻址都是8个字节,如MyLBA、AlternateLBA、FirstUsableLBA,等等其他的xxxLBA。假定每个扇区是512字节,那么GPT支持的硬盘空间大致就是512 * 2^64 = 8ZB

5.2 GPT Partition Entry

对应规范的表18.


6. 示例代码


7. 延伸阅读

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值