在过去 MBR 分区表的限制中 经常可以发现如下的问题:
操作系统无法抓取到 2.2T 以上的磁盘容量! MBR 仅有一个区块,若被破坏后,经常无法或很难救援。 MBR 内的存放开机管理程序的区块仅 446Bytes,无法容纳较多的程序码。 这个 2.2TB 限制的现象在早期并不会很严重。但是,近年来硬盘厂商动不对推出的磁盘容量 就高达好几个 TB 的容量!目前 (2015) 单一磁盘最大容量甚至高达 8TB 了! 如果使用磁 盘阵列的系统,像鸟哥的一组系统中,用了 24 颗 4TB 磁盘搭建出磁盘阵列,那在 Linux 下 面就会看到有一颗 70TB 左右的磁盘! 如果使用 MBR 的话…那得要 2TB/2TB 的割下去,虽 然 Linux kernel 现在已经可以通过某些机制让磁盘分区高过 63 个以上,但是这样就得要割出 将近 40 个分区~ 真要命… 为了解决这个问题,所以后来就有 GPT 这个磁盘分区的格式出现了!
GUID partition table, GPT 磁盘分区表
因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容 于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes 喔!) 来规划, 而第一个 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 笔分区纪录,所以在默认的情况下,总共可 以有 432 = 128 笔分区纪录喔!因为每个 LBA 有 512Bytes,因此每笔纪录用到 128 Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 在每笔纪录中分 别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说, 他的最大容量限制就会在“ 264 512Bytes = 263 1KBytes = 233TB = 8 ZB ”,要注意 1ZB = 230TB 啦! 你说有没有够大了?
现在 GPT 分区默认可以提供多达 128 笔纪录,而在 Linux 本身的核心设备纪录中,针对单一 磁盘来说,虽然过去最多只能到达 15 个分区,不过由于 Linux kernel 通过 udev 等方式的处 理,现在 Linux 也已经没有这个限制在了! 此外,GPT 分区已经没有所谓的主、延伸、逻辑 分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都 可以拿来格式化使用喔!
未经允许不得转载:王刚博客 » GUID partition table (GPT) 磁盘分区表详解