注意:1.分区表中的值都是用相对值来表示的,但选取的参考系又各不相同。
比如,用来定义本分区的16个字节中9~12字节表示开始扇区的相对扇区都是63,是因为相对扇区是以本分区的首扇区作为参考的;而用来描述下一个分区开始扇区的值却是以本分区结束扇区作为参考的。如果要构造新的分区表,就必须弄清楚分区表中的参数是以什么作为参考系的,描述的又是哪一部分的值,这是相当重要的。
2.由于在机器里的数据都是低位在前,高位在后,所以像54 DA 91 00符合我们计算方法的应该是00 91 DA 54。
3.工具软件中显示的硬盘总扇区数与所有分区的扇区数之和并不相等,因为硬盘中剩有7MB~8MB的空间是用来存储硬盘结构信息的。
现在我们对硬盘的分区表已经是了如指掌了,接下来的恢复就变得相当容易了,下面我们分两个步骤来完成。首先,做好整个硬盘分区表的备份工作,计算出原D盘分区表的位置;其次就是构造出正确的原D盘分区表,然后填入原位置即可完成。
由上面的信息我们不难得出原D盘的虚拟MBR的扇区位置是9558675,使用工具KVFIX(F3)定位到该扇区,会发现旧原始分区表已经不正确,但分区结束标志55AA仍在,这也说明我们找到的扇区是正确的。
接下来我们的工作就是构造完整的分区表,正如我们所知道的分区表描述了两部分内容。所以我们先定义原D盘分区,再描述剩余的空间,定义下一个分区。下面我们开始定义D分区:
第1个字节应该为“00”,表示非活动分区。
第2~4字节表示分区开始的磁头号为01、扇区号为01、柱面号为595,对应的十六进制值为“018153”。细心一点我们会发现这个值与C盘分区表中描述扩展分区表的开始值很相似,只是磁头号由00变成了01。由此,可以得出在描述下一分区时是包含隐藏的63个扇区的,而在定义本分区的时候,却是从63个隐藏扇区后面开始计算的。理论上对于不超过8.4GB的硬盘是采用偏移2H和偏移6H的方法计算扇区和柱面的,扇区占6位(bit),柱面占10位(bit)。用二进制来表示时,其中低六位用作扇区数的二进制表示,高两位用作柱面数10位中的高两位。“018153”中01表示磁头号为01,“81 53”对应的二进制为10000001 01010011,前八位中的低六位000001表示扇区号为01,剩余的高二位和后八位10 01010011表示柱面号为595。对于超过8.4GB的硬盘则采用Int13H技术的线性寻址方式来表示,通过偏移CH~偏移FH共4个字节32线性扇区地址来表示分区所占用的扇区总数,可以表示232个扇区,即2TB=2048GB,在此不再详述。
第5字节为“0B”表示分区的系统类型是FAT32。
第6~8字节表示分区开始的磁头号为254、扇区号为63、柱面号为1510,对应的十六进制值为“FEFFFF”。原D盘在7GB左右,在D盘结束时的扇区总数(绝对值)已超过8.4GB,可知其后的表示值采用线性的方式,通过观察后面分区表就可得出此处值必是FEFFFF。
第9~12字节为3F000000表示相对本分区首扇区的开始扇区值为63。
第13~16字节表示本分区总的扇区数(不包括隐藏的63个扇区),从图中很容易得出其值为14715477(E08A55),分区表中十六进制应为558AE000。
那么,定义D盘的分区表值就可以得出了:
0001 8153 0BFE FFFF 3F00 0000 558A E000
同样的方法我们构造出描述下一分区的分区表参数:
0000 C1FF 05FE FFFF 948A E000 948A E000
这里有一点需要说明的是:前一个948A E000是表示以D盘的首扇区为参考表示下一逻辑分区(E盘)开始的首扇区。而后一个948A E000(14715540)则表示E盘分区的总扇区数(包括隐藏扇区)。
最后,使用磁盘编辑工具KIVFIX,按F3键直接定位到我们上面找到的9558676扇区处,然后使用F5键进行参数修改。将偏移的01BE-01DD的32个字节修正为我们构造的参数。重启之后,使用DiskGen进行参数检查,发现无误;进入系统又见到以前精心收集的资料了。
看了本文,如果以后再遇到分区表丢失或者误删除分区表之类的,只要弄清楚问题所在,就可以自己动手恢复了。经过这次手动恢复硬盘分区表,我对硬盘的基本结构也有了更进一步的了解,对以后继续学习数据恢复方面的知识也更有信心了。
更多内容请看PCdog.com--备份恢复 硬盘分区 硬盘分区专题
