GPT分区的简介
一个小疑惑
mbr格式的分区表支持的最大分区为2 TB 。楼主曾经认为每个分区支持最大容量为2TB,如果把一块8TB硬盘分为4个区每个区分2TB,不是还可以使用MBR分区表吗?迷惑了一段时间才发现原来每个分区信息表中包含“首扇区相对扇区号”这个信息,同样也是由四个字节组成,最大表示2T,这也就意味着,如果一个分区的大小达到2TB,则之后的分区的首扇区就会记录不了,所以mbr分区表类型支持硬盘的最大容量为2TB。
GPT分区
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体磁盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表,GPT分配64bits给逻辑块地址。
跟现代的MBR一样,GPT使用逻辑区块地址(LBA)取代了早期的CHS寻址方式。传统MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。64位Windows操作系统使用16,384字节(或32块,一般设备的块大小是512字节)作为GPT分区表,接下来的LBA 34是硬盘上第一个分区的开始。
注:
LBA(Logical Block Address )逻辑区块地址,从0开始编号。
CHS(cylinders-heads-sectors,磁柱-磁头-扇区)寻址模式,区块必须以硬盘上某个磁柱、磁头、扇区的硬件位置所合成的地址来指定
LBA
0
在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR也叫做保护性MB(Protective MBR)。保护性MBR保护GPT磁盘不受以前发布的MBR磁盘工具(比如FDISK或WindowsNT磁盘管理器)的危害。这些工具不能感知GPT,也无法正确地访问GPT磁盘。不能识别GPT的旧软件在访问GPT磁盘时只解释保护性MBR。这些工具通过解释保护性MBR,将GPT磁盘看成一个封装的(可能无法识别)分区,而不是错误地当成一个未分区的磁盘 ,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。例如,当在32位Windows
XP系统中挂载GPT磁盘时,会将其识别为“GPT 保护分区(GPT Protective Partition)”,并且用户无法对这个分区进行任何操作(除非使用命令行工具) ,这是因为32位的Windows
XP并不支持GPT,它仅仅只是知道挂载的是一个GPT磁盘而已。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
XP系统中挂载GPT磁盘时,会将其识别为“GPT 保护分区(GPT Protective Partition)”,并且用户无法对这个分区进行任何操作(除非使用命令行工具) ,这是因为32位的Windows
XP并不支持GPT,它仅仅只是知道挂载的是一个GPT磁盘而已。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot
Camp就是使用这种方式启动Windows。
Camp就是使用这种方式启动Windows。
LBA
1
分区表头(LBA 1)定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows
Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA
1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA
1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
起始字节
|
长度
|
内容
|
---|---|---|
0
|
8字节
|
签名("EFI PART")
|
8
|
4字节
|
修订
|
12
|
4字节
|
分区表头的大小
|
16
|
4字节
|
分区表头(第0-91字节)的CRC32校验,在计算时,把这个字段作为0处理,需要计算出分区串行的CRC32校验后再计算本字段
|
20
|
4字节
|
保留,必须是 0
|
24
|
8字节
|
当前LBA(这个分区表头的位置)
|
32
|
8字节
|
备份LBA(另一个分区表头的位置)
|
40
|
8字节
|
第一个可用于分区的LBA(主分区表的最后一个LBA + 1)
|
48
|
8字节
|
最后一个可用于分区的LBA(备份分区表的第一个LBA − 1)
|
56
|
16字节
|
硬盘GUID(在类UNIX系统中也叫UUID)
|
72
|
8字节
|
分区表项的起始LBA(在主分区表中是2)
|
80
|
4字节
|
分区表项的数量
|
84
|
4字节
|
一个分区表项的大小(通常是128)
|
88
|
4字节
|
分区串行的CRC32校验
|
92
|
*
|
保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)
|
LBA
2–33
LBA 2–33的位置存放的是分区表项。GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。
起始字节 | 长度 | 内容 |
---|---|---|
0 | 16字节 | 分区类型GUID |
16 | 16字节 | 分区GUID |
32 | 8字节 | 起始LBA(小端格式) |
40 | 8字节 | 末尾LBA |
48 | 8字节 | 属性标签(如:60表示"只读") |
56 | 72字节 | 分区名(可以包括36个UTF-16(小端格式)字符) |
总结:
gpt分区用64位块寻址方式区别于mbr的32位寻址方式,用34(LBA0-33)块来存储分区信息,mbr使用一个扇区来存储,一般块大小和扇区大小都是512字节。
对于几个数据的解释:
gpt分区理论可以处理磁盘大小:2的64次方(64位地址的寻址范围,寻址单位为块)*512字节(块大小)
windows中最多可以创建分区数量:32(存储分区表项的块LBA2-33)*512字节(块大小)/128字节(分区表项的大小)=128
windows下分区的大小:256GB,有文件系统决定,理论大小前面已给出
科技的进步就是在现有的基础下未雨绸缪,mbr分区可能已经满足绝大多数人的需求,随着时代的发展,大数据时代的到来,mbr分区明显制约了硬盘的发展,gpt分区无疑会成为人们更好的选择。在我看来,技术的进步就是不断的发烧,追求极限,制定出更好的标准来服务人类的发展。