分区表和扩展分区表
正如在主引导记录分析中看到的,分区表是一个64字节的数据块,用来识别和定位硬盘上分区的类型和位置,分区表独立于操作系统。每个分区表项是16字节,最多有四项,每项都在MBR的预定义的位置:
1. 分区一 0x1BE (446)
2. 分区二 0x1CE (462)
3. 分区三 0x1DE (478)
4. 分区四 0x1EE (494)
当分区数小于4时,其余的分区项均为0。下面是一个含有三个分区的分区表例子:
000001B0: 80 01
000001C0: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 00 00 ......?...K....
000001D0: 81 0A 07 FE FF FF 8A F5 - 7F 00 3D 26 9C 00 00 00 .........=&....
000001E0: C1 FF 05 FE FF FF C7 1B - 1C 01 D6 96 92 00 00 00 ................
000001F0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 ..............
以这个例子的第一个分区表项来讨论分区表中各项的意义:
字节偏移 域长度 举例数值 域名和定义
0x01BE 字节 0x80 引导指示符。指示该分区是否为活动分区。有效值包括
00 - 不用来启动。80 - 活动分区。
0x1BF 字节 0x01 起始磁头。
0x1C0 6比特 0x01 起始扇区。只用到0-5比特。比特6-7是起始柱面域的高两位。
0x1C1 10比特 0x00 起始柱面。包含柱面值的低8位,和起始扇区域的高2位一起构成起始柱面值。
0x1C2 字节 0x07 系统ID。定义卷类型。
0x1C3 字节 0xFE 终止磁头。
0x1C4 6比特 0xBF 终止扇区。只用到0-5比特。比特6-7是终止柱面域的高两位。
0x1C5 10比特 0x09 终止柱面。包含柱面值的低8位,和终止扇区域的高2位一起构成终止柱面值。
0x1C6 双字 0x3F000000 相对扇区。
0x1CA 双字 0x4BF57F00 总扇区数。
系统ID可能的值:
0x01 FAT12主分区或逻辑分区。
0x04 FAT16主分区或逻辑分区。
0x05 扩展分区。
0x06 BIGDOS FAT16主分区或逻辑分区。
0x07 NTFS主分区或逻辑分区。
0x0B FAT32主分区或逻辑分区。
0x0C 使用扩展中断13的FAT32主分区或逻辑分区。
0x0E 使用扩展中断13的BIGDOS FAT16主分区或逻辑分区。
0x0F 使用扩展中断13的扩展分区。
0x12 EISA分区。
0x42 动态磁盘卷。
0x86 遗留的FT(Fault Tolerant) FAT16。
0x87 遗留的FT NTFS。
0x8B 遗留的FT FAT32。
0x8C 遗留的FT 使用扩展中断13的FAT32。
我们知道,一个硬盘可以有很多分区,但MBR分区表只有四项,怎么能突破这个限制呢?答案是扩展引导记录(EBR - Extended Boot Record),通过把MBR分区表中一项设为扩展分区(系统ID为0x05或0x0F),其分区表项指定扩展分区的起始位置和长度,在其中最开始扇区 (EBR)和MBR相同位置(0x1BE)放置另外一个分区表,一般称为扩展分区表。扩展分区表的第一项指定扩展分区目前的逻辑分区信息,如果还有更多的 逻辑分区,扩展分区表的第二项指定下一个EBR的位置,否则为0。最后的两个分区表项总是为0。通过这种方式,一个硬盘上的分区数目就没有限制了。