磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成,而数据的写入其实是在磁盘盘上面。
磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位,其中扇区的物理量设计有两种大小,分别是 512bytes 与 4Kbytes。
早期磁盘第一个扇区里面含有的重要信息我们称为 MBR (Master Boot Record)格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰,甚至有些大于 2TB以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)
MSDOS(MBR) 与 GPT 磁盘分区表(partition table)
MSDOS (MBR) 分区表格式与限制
早期的 Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则
通通放在磁盘的第一个扇区, 这个扇区通常是 512bytes 的大小 ,
所以说,第一个扇区 512bytes 会有这两个数据:
- 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
- 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes
由于分区表就只有 64 bytes 而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区槽。
由于分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码
上图中我们假设硬盘只有 400 个磁柱,共分区成为四个分区槽,第四个分区槽所在为第 301 到 400号磁柱的范围。 当你的操作系统为 Windows 时,那么第一到第四个分区槽的代号应该就是 C, D, E, F。
当你有资料要写入 F 槽时, 你的数据会被写入这颗磁盘的 301~400 号磁柱之间的意思。
主要分区、延伸分区与逻辑分区
- 主要分区与延伸分区最多可以有四笔(硬盘的限制)
- 延伸分区最多只能有一个(操作系统的限制)
- 逻辑分区是由延伸分区持续切割出来的分区槽;
- 能够被格式化后,作为数据存取的分区槽为主要分区与逻辑分区。延伸分区无法格式化;
- 逻辑分区的数量依操作系统而不同,在 Linux 系统中 SATA 硬盘已经可以突破 63 个以上的分区限制;
例如:
如果我想将一颗大硬盘『暂时』 分区成为四个 partitions,同时还有其他的剩余容量可以让我在未来的时候进行规划, 我能不能分区出四个 Primary?若不行,那么你建议该如何分区?
答:
- 由于 Primary+Extended 最多只能有四个,其中 Extended 最多只能有一个,这个例题想要分区出四个分区槽且还要预留剩余容量, 因此 P+P+P+P 的分区方式是不适合的。 因为如果使用到四个 P,则即使硬盘还有剩余容量, 因为无法再继续分区,所以剩余容量就被浪费掉了。
- 假设你想要将所有的四笔记录都花光,那么 P+P+P+E 是比较适合的。所以可以用的四个 partitions 有 3 个主要及一个逻辑分区, 剩余的容量在延伸分区中。
- 如果你要分区超过 4 槽以上时,一定要有 Extended 分区槽,而且必须将所有剩下的空间都分配给 Extended,然后再以 logical 的分区来规划 Extended 的空间。 另外,考虑到磁盘的连续性,一般建议将 Extended 的磁柱号码分配在最后面的磁柱内。
实际可用的是/dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb5, /dev/sdb6, /dev/sdb7 这六个,至于/dev/sdb4 这个
延伸分区本身仅是提供来给逻辑分区槽建立之用。
MBR 分区表限制
- 操作系统无法抓取到 2.2T 以上的磁盘容量!
- MBR 仅有一个区块,若被破坏后,经常无法或很难救援。
- MBR 内的存放开机管理程序的区块仅 446bytes,无法容纳较多的程序代码。
GUID partition table, GPT 磁盘分区表
与 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,因此每笔纪录用到 128bytes 的空间,除了每笔纪录所需要的标识符与相关的纪录之外, GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此, GPT 分区表对于单一分区槽来说, 他的最大容量限制就会在『264 * 512bytes = 263 * 1Kbytes = 233TB = 8 ZB 』(1ZB =230TB )
GPT 分区预设可以提供多达 128 笔纪录! 此外, GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用