硬盘分区表(DPT)
偏移地址 | 字节数 | 含义分析 |
01BE | 1 | 分区类型:00表示非活动分区;80表示活动分区;其他为无效分区 |
01BF ~ 01C1 | 3 | 分区的起始地址(磁头/扇区/柱面):通常第一分区的起始地址开始于1磁头0柱面1扇区,因此这三个字节应为010100 |
01C2 | 1 | 常見的分区操作系统的类型:00[none-use] 04 [DOS FAT16 <32M] 05 [EXTEND] 06 [DOS FAT16 >32M] 07 [NTFS (OS/2)] 0B[ FAT32] 83 [LINUX >64M] |
01C3 ~ 01C5 | 3 | 该分区的结束地址( 磁头/扇区/柱面) |
01C6 ~ 01C9 | 4 | 该分区起始逻辑扇区[在线性寻址方式下的分区相对扇区地址] |
01CA ~ 01CD | 4 | 该分区占用的总扇区数 |
注释: 注意分区的起始地址 (磁头/扇区/柱面) 和结束地址 (磁头/扇区/柱面) 中字节分配:
00000000 01000001 00010101 (第一字节为磁头,第二字节2~7位为扇区,第二字节0~1位和第三字节为柱面)
DPT 总共64字节(01BE--01FD), 如上所示每个分区占16个字节, 所以可以表示四个分区, 这也就是为什么一个磁盘的主分区和扩展分区之和总共只能有四个的原因.
逻辑驱动器
扩展分区的信息位于以上所示的硬盘分区表(DPT)中, 而逻辑驱动器的信息则位于扩展分区的起始扇区, 即该分区的起始地址(柱面/扇区/磁道)所对应的扇区, 该扇区中的信息与硬盘主引导扇区的区别是不包含MBR,而16字节的分区信息则表示的是逻辑驱动器的起始和结束地址等.
所以, 在磁盘仅含有一个主分区, 一个扩展分区(包含多个逻辑驱动器)的情况下,即使由于病毒或其他原因导致硬盘主引导扇区的数据丢失(包括DPT),也可以通过逻辑驱动器的数据来恢复整个硬盘.
绝对扇区=磁头号*每道扇区数[3F]+ 柱面号*最大磁头数[一般是FF]*每道扇区数 + 扇区号 - 1
最大磁头数=(((总扇区数 + 起始逻辑扇 - 扇区止) / 每道扇区数[3F])-磁头号止) / 柱面号止
或 最大磁头数=(((起始逻辑扇 +1 - 扇区起) / 每道扇区数[3F])-磁头号起) / 柱面号起
例如: 以下是一个硬盘的分区情况.
|
磁头 | 柱面 |
扇区 |
磁头 | 柱面 |
扇区 |
起始扇(逻辑) |
结束扇 |
总共扇区 |
MBR |
0 |
0 |
1 |
||||||
C |
1 |
0 |
1 |
239 |
276 |
63 |
63 |
4,188,239 |
4,188,177 |
扩 |
0 |
277 |
1 |
239 |
554 |
63 |
4,188,240 |
8,391,599 |
4,203,360 |
D |
1 |
277 |
1 |
239 |
554 |
63 |
4,188,303 |
8,391,599 |
4,203,297 |
如果主分区表损坏, 则可以通过手工查找扩展分区表中所包含的逻辑驱动器数据, 在本例中就是D盘所对应的数据, 然后将其起始扇(逻辑)减去63就是所对应的扩展分区的起始扇(逻辑), 将其起始地址(磁头/扇区/柱面)改为0柱面就是扩展分区的起始地址. 然后通过扩展分区就可以得到主分区C的信息, 然后就可以使用FDISK/MBR命令和手工填写分区表恢复整个硬盘.
该例所对应的分区表数据:
80 01
01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00
41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
算法过程: (以第一个分区为例)
EF 7F 14 对应的磁头号EFH = 239D, 柱面号7F高二位与14H=114H = 276D, 扇区号7F低六位= 3FH = 63D
起始逻辑扇= 3F 00 00 00 = 3FH = 63D
分区总扇区数= 11 E8 3F 00 = 3FE811H = 4188177D
最大磁头数= ((((4188177+63)-63)/63)-239)/276=240D = 0F0H
01 01 00对应的逻辑扇 = 1*63 + 240*0*63 + 1 - 1 = 63D
EF 7F 14 对应的逻辑扇 = 239*63 + 240*276*63 + 63 - 1 = 4188239D
扩展分区表数据:
00 01
41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00
注意: 逻辑起始扇区和总共分区数是左边为低位, 如该例的扩展分区的起始地址为8F E8 3F 00转换十进制时要先变为00 3F E8 8F, 总共占用分区数21 23 40 00要先变为00 40 23 21, 同理当手工填写该值时也要进行高低位转换.
扩展逻辑盘寻找说明:
1 在主分区的分区表中,寻找扩展分区的物理地址
2 在扩展分区地址所指扇区尾部,查找扩展分区表(扩展卷),结构与主分区表相同
3 扩展分区表的物理地址中,将磁头数加1,其余不变,则为第一个逻辑驱动器(如D盘)的BOOT扇区物理地址
4 根据扩展驱动器的系统分类(FAT16/FAT32,以2048MB为界限),查看FAT表与ROOT区
5 如果还有E、F……等盘,则继续寻找符合要求的BOOT扇区,BOOT扇区规定在每个磁头的1号扇区