磁盘分区格式mbr、gpt

2018-05-25 10:54:32

MSDOS(MBR)

早期的Linux系统为了兼容于Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区)的方式来处理开机管理程序与分区表,而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大 小(旧的磁盘扇区都是 512Bytes)。

1.主要开机记录区(Master Boot Record, MBR)可以安装开机管理程序的地方,有446 Bytes

2.分区表(partition table),记录整颗硬盘分区的状态,有64 Bytes

由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。

上图假设我们的磁盘由400个柱面,由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。 

既然分区表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分区出四个分区? 当然不是,在Windows/Linux系统中, 我们是通过刚刚谈到的延伸分区(Extended)的方 式来处理的啦!延伸分区的想法是: 既然第一个扇区所在的分区表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像下面这样:

在上图当中,我们知道硬盘的四个分区记录区仅使用到两个,P1为主要分区,而P2则为延伸分区。请注意, 延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。 然后我们可以通过延伸分区所指向的那个区块继续作分区的记录。 如上图右下方那个区块有继续分区出五个分区, 这五个由延伸分区继续切出来的分区,就被 称为逻辑分区(logical partition) 。 同时注意一下,由于逻辑分区是由延伸分区继续分区出来的,所以他可以使用的柱面范围就是延伸分区所设置的范围喔! 也就是图中的101~400啦!

MBR分区表除了上述的主分区、延伸分区、逻辑分区需要注意之外,由于每组分区表仅有 16Bytes 而已,因此可纪录的信息真的是相当有限的! 所以,在过去 MBR 分区表的限制中经常可以发现如下的问题

1.操作系统无法抓取到2.2T 以上的磁盘容量! 

2.MBR 仅有一个区块,若被破坏后,经常无法或很难救援。

3.MBR内的存放开机管理程序的区块仅446Bytes,无法容纳较多的程序码。

总结

1.其实所谓的"分区"只是针对那个64Bytes的分区表进行设置而已。

2.硬盘默认的分区表仅能写入四组分区信息。

3.这四组分区信息我们称为主要(Primary)或延伸(Extended)分区。

4.分区的最小单位通常为柱面(cylinder)。

5.当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理。

6.主要分区与延伸分区最多可以有四笔(硬盘的限制)。

7.延伸分区最多只能有一个(操作系统的限制),延伸分区的目的是使用额外的扇区来记录分区信息。

8.逻辑分区是由延伸分区持续切割出来的分区。

9.能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化。

10.逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制。


GPT(GUID partition table)( Globally Unique Identifier partition table)

因为过去一个扇区大小就是512B而已,不过目前已经有4K的扇区设计出现!为了相容 于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT将磁盘所有区块以此LBA(默认为512B)来规划,而第一个 LBA 称为LBA0(从 0 开始编号)。 

与MBR仅使用第一个512Bytes区块来纪录不同, GPT 使用了34个LBA区块来纪录分区 信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同,GPT 除了前面34个 LBA之外,整个磁盘的最后33个LBA也拿来作为另一个备份!这样或许会比较安全些吧! 详细的结构有点像下面的模样

LBA0(MBR 相容区块)
与 MBR 模式相似的,这个相容区块也分为两个部份,一个就是跟之前 446 Bytes 相似的区块,储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内,这个相容模式仅放入一个特殊标志的分区,用来表示此磁盘为GPT格式之意。而不懂 GPT 分区表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分区信息,进一步保护了此磁盘喔!

LBA1(GPT 表头纪录)
这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区(就是前面谈到的在最后 34 个 LBA区块)放置的位置, 同时放置了分区表的检验机制码(CRC32),操作系统可以根据这个检验码来判断 GPT是否正确。若有错误,还可以通过这个纪录区来取得备份的GPT(磁盘最后的那个备份区块)来恢复 GPT的正常运 行!

LBA2-33(实际纪录分区信息处)
从LBA2区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 4*32 = 128 笔分区纪录喔!因为每个 LBA有512Bytes,因此每笔纪录用到128Bytes的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT在每笔纪录中分别提供了64bits 来记载开始/结束的扇区号码,因此,GPT分区表对於单一分区来说, 他的最大容量限制就会在2^64 * 512B = 2^63 * 1K = 9223372036TB。

GPT分区已经没有所谓的主、延伸、逻辑 分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化

备注:
1.原文地址
http://www.freecls.com/a/2712/33

参考
1.linux鸟哥私房菜
2.懂英文的朋友可以参考下维基百科https://en.wikipedia.org/wiki/Extended_boot_record

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。