目前硬盘分区格式有2种,MBR(Master Boot Record)分区格式和GPT(Guid Partition Table)分区格式。
一、MBR(Master Boot Record)分区格式
MBR也就是主引导记录的意思,这种分区格式分区时在硬盘的第一个扇区(0 磁道、0 柱面、1 扇区,占用512个字节)记录了磁盘的重要信息,它主要包含主引导程序(Initial Program Loader)446字节、磁盘分区表DPT(disk partition table)64字节和引导记录标识BRID(boot record ID)2字节三个部分。
早期的硬盘主要由碟片、机械手臂、磁头、主轴马达所组成,磁盘上又可细分出扇区(sector)、磁道(Track)两种单位,磁盘扇区大小主要有512B和4KB,而早期磁盘扇区只有512M, MBR分区格式就是通过第一个扇区来记录磁盘信息来达到读取磁盘和引导系统的目的。
======================MBR分区格式硬盘===================
+----------------------------------------------------+
| Initial Program Loader(446B) | #主引导程序IPL(446B)
| DPT 1 | DPT 2 | DPT 3 | DPT 4 | #磁盘分区表DPT(64B)
| boot record ID(2B) | #引导记录标识BRID(2B)
+----------------------------------------------------+
|[boot sector] | #引导扇区
| basic Partition 1 Data | #基本分区1
| |
+----------------------------------------------------+
|[boot sector] | #引导扇区
| basic Partition 2 Data | #基本分区2
| |
+----------------------------------------------------+
|[Extended Partition Table][0X55AA] | #扩展引导记录EBR(64B分区表+2B有效标志+无内容446B)
|[boot sector] | #引导扇区,位于EBR扇区后的第63扇区,前面有62个保留扇区
| logical Partition 1 Data | #逻辑分区1
| |
+----------------------------------------------------+
|[Extended Partition Table][0X55AA] | #扩展引导记录EBR(64B分区表+2B有效标志+无内容446B)
|[boot sector] | #引导扇区,位于EBR扇区后的第63扇区,前面有62个保留扇区
| logical Partition 2 Data | #逻辑分区2
| |
+----------------------------------------------------+
1.主引导程序(Initial Program Loader)446字节。
主引导程序(Initial Program Loader初始程序加载),占用446B大小,顾名思义,它是用来安装初始的开机管理程序的,主要作用为:
- 检查硬盘分区表是否完好。
- 在分区表中寻找可引导的“活动”分区。
- 将活动分区的第一逻辑扇区内容(也叫分区引导记录,PBR)装入内存。在DOS分区中,此扇区内容称为DOS引导记录(DBR)。
2.磁盘分区表DPT(disk partition table)64字节。
分区表占用64B,用于记录整块磁盘的分区状态。
- 在分区表中,用16B来分别记录每一个分区,也就是最多记录4个分区信息。
- 每个基本分区开头部分都有一个引导扇区。
- 为解决多个分区的问题,可以允许其中一个分区信息为扩展分区,再在扩展分区内划分逻辑分区来实现多个分区。
16B的分区表信息都存了什么?如下为其中一个16进制的分区表信息。
分区表位数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
分区表值(16B) 80 01 01 00 07 FE FF 7B 3F 00 00 00 3D A8 DA 00
分区表各值的含义:
第1字节:80 是否活动分区标志。只能选00和80。80为活动,00为非活动
第2字节:01 开始磁头
第3字节:01 开始扇区
第4字节:00 开始柱面
第5字节:07 分区类型,05表示扩展分区;07表示NTFS;83表示Linux分区等
第6字节:FE 结束磁头
第7字节:FF 结束扇区
第8字节:7B 结束柱面
9-12字节:00 00 00 3F 该分区起始扇区数,也就是从磁盘开始扇区到该分区开始的扇区位移量
13-16字节:00 DA A8 3D 该分区的总扇区数
可以看出,分区表用4个字节来记录分区的扇区总数,也就是32位,因此MBR分区格式的磁盘单分区最大容量为2^32*512B=2TB
3.引导记录标识BRID(boot record ID)2字节。
BRID的主要作用就是判断该设备是否可以用于启动。BIOS按照“启动顺序”,把控制权转交给排在第一位的储存设备。这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给“启动顺序”中的下一个设备。其实主引导记录的作用就是告诉计算机到硬盘的哪一个位置去找操作系统。
4.扩展分区引导记录EBR和引导扇区boot sector
- 每个逻辑驱动器的分区开头都有一个类似于MBR的扩展引导记录(Extended Boot Record,EBR),EBR由扩展分区表+有效标志组成。
- 扩展分区表位于EBR的开头,占用64B。共分4项,每项占用16B。第一项记录当前逻辑分区表基本信息,第二项目记录下一个逻辑分区表基本信息,若没有下一个逻辑分区,则无内容;第三项和第四项无内容。
- 逻辑分区的分区有效标志占用2B,用十六进制0X55AA表示。逻辑分区的分区引导记录部分共446B用0填充。
- 逻辑分区的引导扇区一般位于EBR扇区后的第63扇区,前面有62个保留扇区。
二、GPT(Guid Partition Table)分区格式
GPT分区格式完美解决了最大磁盘容量为2TB的限制,并且以逻辑区块地址 LBA(Logical Block Address)来记录分区信息,每个LBA区块默认512字节。同时,GPT 使用了 34 个 LBA 区块来纪录分区信息,第一个 LBA 称为 LBA0 (从 0 开始编号)!而且, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为分区记录的备份!
===============GPT分区格式硬盘==============
+----------------------------------------+
| Protective MBR | # LBA 0
| Primary GPT Header | # LBA 1
| DPT 1 | DPT 2 | DPT 3 | DPT 4 | # LBA 2
| DPT 5 ~~~ DPT 128 | # LBA 3 ~~ 34
+----------------------------------------+
|[boot sector] |
| Partition 1 |
| |
+----------------------------------------+
|[boot sector] |
| Partition 2 |
| |
+----------------------------------------+
| |
| Remaining Partitions |
| |
+----------------------------------------+
| DPT 1 | DPT 2 | DPT 3 | DPT 4 | # LBA -34
| DPT 5 ~~~ DPT 128 | # LBA -2~~-33
| Second GPT Header | # LBA -1
+----------------------------------------+
1. LBA 0 (MBR 兼容区块)
与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,储存了第一阶段的开机管理程序! 而接下来64B原本用来记录分区表的地方,则仅仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 分区格式的硬盘。
2. LBA 1 (GPT 表头纪录)
这个部份既纪录了分区表本身的位置与大小,也纪录了备份用的 GPT 分区 (最后的 34 个 LBA 区块) 放置的位置, 同时还放置了分区表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以透过这个纪录区来取得备份的 GPT 来恢复 GPT 的正常运作。
3. LBA 2 ~~ 33 (实际纪录分区信息处)
从 LBA2 区块开始,每个 LBA 都可以纪录 4 个分区纪录,因此,在默认的情况下可以记录 4 * 32 = 128 个分区纪录。因为每个 LBA 有 512B 大小,所以每个分区记录占用 128B 的空间,这个空间除了纪录所需要的标识符与相关的纪录之外,提供了64B 大小来记录开始/结束的扇区号码,因此,GPT 分区表对于单一分区来说, 其最大容量可以达到 2^64 * 512B = 2^3 * 2^30 * 2^ 30 * 2 * 512B = 8 ZB (1 ZB = 2^30 TB)。