4.3.2 数据恢复实例
启动后硬盘不能引导,无法进入系统。用DOS软盘引导后,硬盘所有盘符尽失,什么都见不到。用FDISK命令查看硬盘信息时,回答是“未定义任何分区”。用DOS版的硬盘分区软件PQMagic6.0查看硬盘各分区时,硬盘以一整条暗灰色长条标识出来,没有任何分区,给出的文字信息是“Unallocated”,意为未分配存储单元的原始硬盘。
这种情况给人造成硬盘数据全部毁坏的初步印象。盘符找不到,扫描病毒就无从谈起。如果病毒的袭击目标真是40GB硬盘每一个扇区的数据的话,对于CPU为1GHz的计算机而言,没有8~10分钟的时间是完不成的。而病毒发作时只是黑屏死机,对硬盘的长时间读/写并没有发生,这从硬盘指示灯在黑屏时没有长时间闪亮、也没有产生持续的硬盘读/写噪声可以判断出来。因此,硬盘数据全部遭到破坏的可能性基本上可以排除。既然数据尚在只是没法读出来,就没有不挽救的道理。从全部盘符都看不到的故障现象分析,最大的可能是病毒袭击了硬盘的主引导扇区。如果病毒只是袭击了某个分区的引导扇区或FAT表,只可能导致该分区不能引导或该分区某些文件丢失,其余的分区仍然可以引导,扩展分区中两个逻辑驱动器的盘符也应该能看得到。
既然做出了主引导扇区可能被毁的判断,其余的事情就是寻找硬盘数据修复工具。在比较了几款可在DOS环境下对磁盘做编辑工作的工具软件后,笔者以为KV3000计算机杀毒工具的F6(硬盘救护箱)功能是不错的选择,用起来比较顺手。你要做的看起来烦琐的事,它几乎都能帮上忙。恢复工作使用了KV3000的V65版,现在KV3000已经发布了V71版。
用KV3000杀毒软盘引导后(该盘有建立Windows98DOS环境足够的系统文件,相当于DOS7.10),键入KV3000然后按Enter键,就进入KV3000主界面。再按F6键,就可以见到0柱(磁道)、0面(磁头)、1扇区,即主引导扇区的数据结构排列。所看到的主引导扇区数据同对故障的判断果然相吻合:主引导扇区全部被清零了。
由于事先没有做过硬盘主引导扇区或任何一个分区引导扇区的备份,所以只能用人工填写的方法恢复主引导扇区数据。
主引导扇区有三个关键代码,其中第一关键代码是主引导记录程序代码,位于该扇区前446个字节,可以用带参数的命令FDISK/mbr重写。于是退出KV3000,软驱内换上Windows 98启动盘,键入FDISK/mbr。然后软驱内换回KV3000杀毒软盘,重新查看主引导扇区内容,发现第一关键代码(主引导程序代码)已经重新写过,第三关键代码(主引导记录结束标志)也已经正确恢复。但是,由于FDISK不支持多操作系统分区,也就是不支持多个基本分区,所以它写出的第二关键代码(硬盘分区表)与硬盘原有的分区情况不符。硬盘原有三个基本分区,扩展分区中还有两个逻辑分区,可是现在的分区表(如图4-21所示)只有一个8.4GB的基本分区,没有扩展分区。显然,用这样的分区表是不能正确引导硬盘的。用人工填写的方法恢复硬盘分区表已无法避免。虽然我们事先知道每个分区大小的粗略值,但却不知道精确值。不知道每个分区的起始扇区号和它所占用的扇区数。而准确无误地填写分区表的每一个值对恢复全部硬盘数据都是至关重要的。
图4-21 用FDISK/mbr命令写出的硬盘分区表示意图
从第一分区开始,逐个分区地填写分区信息字段,直至记录结束标志AA55H之前扩展分区的最后一个信息字段填写完毕为止。
按F2键,察看第一分区引导扇区的BPB,从中获取应填入主引导扇区分区表的参考信息。第一分区引导扇区从偏移11开始到偏移90结束的BPB各字段信息如图4-22所示。
图4-22 第一分区引导扇区BPB各字段信息
从图4-22可以看出,从偏移17至偏移19、从偏移19至偏移21、从偏移22至偏移24的这几个字段都被置零,说明该分区的文件格式是FAT32。从偏移28至偏移32的分区起始扇区号3F000000翻转调位后是3FH,转换为十进制是63。从偏移32至偏移36的分区占用扇区数8281BC00翻转调位后是BC8182H,转换为十进制是12353922。系统隐藏扇区数通常为63,分区占用扇区数12353922转换成以字节为单位的长度则是12353922×512=6.32GB。这两个数字是正确的,说明第一分区引导扇区没有受到病毒攻击。将3F000000填入分区表第1部分的第8至第11字节(分区起始扇区号),8281BC00填入分区表第1部分的第12至第15字节(分区占用扇区数)。硬盘数据被破坏之前究竟哪一个分区是活动分区已经不重要,我们假设第一分区是活动分区,因此分区表第1部分第0字节填入80。因为是FAT32格式,而且又是活动分区,所以分区表第1部分的第4字节应填写“0B”。
接下来是第1~3字节(分区起始地址)和第5~7字节(分区终止地址)的填写。起始地址就是分区引导扇区,位于0柱(磁道)、1面(磁头)、1扇区。第1字节是磁头号,故应填入01。第2、3两个字节填入值的确定如图4-23所示。因为扇区号是1,故第2字节的低6位应为000001B。因为用10位二进制数表示的柱面号为0,故第2字节的高2位和第3字节的8个二进制位均应为0。这样,由图4-23可以看到的结果是第2字节应填写的十六进制数为01H,第3字节为00H。
图4-23 第2、3字节的二进制表示
分区终止地址的(绝对)扇区号为起始地址扇区号与分区占用扇区数之和减1,即:
63+12353922−1=12353984
它的柱面号采用以下公式计算:
C=N\(Sm*(Hm+1))
式中C为柱面号,N为从零开始计的绝对扇区号,Sm为最大扇区号,Hm为最大磁头号,符号“\”的含义是整除,若人工计算,则符号两端相除后略去小数部分取整。
磁头号用以下公式计算:
H=(N−C*Sm*(Hm+1))\Sm
式中H为磁头号。
扇区号用以下公式计算:
S=N−C*Sm*(Hm+1)−H*Sm+1
式中S为扇区号。
上述公式中最大扇区号Sm和最大磁头号Hm是硬盘几何构成参数。用Norton Utilities DOS8.0的磁盘编辑工具测得硬盘参数为:扇区号范围1~63;磁头号范围0~254;柱面号范围0~4980。
将绝对扇区号12353984、最大扇区号Sm=63和最大磁头号Hm=254代入上述公式,得C=768,H=254,S=63,把磁头号254转换为十六进制数FEH,填入第5字节,第6、7字节的填写方法与第2、3字节类似,如图4-24所示。因为扇区号是63,故第6字节的低6位应为111111B。因为用10位二进制数表示的柱面号为768,转换为二进制数为1100000000B,故第6字节的高2位为11B,第7字节的8个二进制位均应为0。这样,由图可以看到的结果是第6字节应填写的十六进制数为FFH,第7字节为00H。
图4-24 第6、7字节的二进制表示
到现在为止,分区表的第一部分填写完毕,如图4-25所示。
第二分区起始扇区就是该分区引导扇区,它紧跟在第一分区终止扇区后面,故第二分区引导扇区号为:
12353984+1=12353985
图4-25 填写完毕的分区表第一分区信息(颜色较浅的部分)
按F3键,输入12353985,按Enter键显示第二分区引导扇区,查看它的BPB,从中获取应填入分区表第二部分的参考信息。第二分区引导扇区从偏移11开始到偏移90结束的BPB各字段信息如图4-26所示。
图4-26 第二分区引导扇区BPB各字段信息
从图4-26中可以看出,从偏移17至偏移19、从偏移19至偏移21、从偏移22至偏移24的这几个字段都被置零,说明该分区的文件格式是FAT32。从偏移28至偏移32的分区起始扇区号C181BC00翻转调位后是BC81C1H,转换为十进制是12353985。从偏移32至偏移36的分区占用扇区数也是C181BC00,所以转换为十进制数也是12353985。扇区数12353985转换成以字节为单位的长度则是12353985×512=6.32GB,这两个数字是正确的,表明第二分区长度略长于第一分区,紧随第一分区之后,看来第二分区引导扇区也没有受到病毒攻击。将C181BC00分别填入分区表第2部分的第8至第11字节(分区起始扇区号)和第12至第15字节(分区占用扇区数)。在填写分区表第一部分时已经把第一分区设为活动分区,因此分区表第2部分第0字节应填入00,表明是非活动分区,在多操作系统共存的硬盘上,非活动分区通常是隐藏的,以免被误删系统文件。因为是FAT32格式,而且又是隐藏分区,所以分区表第2部分的第4字节应填写“1B”。
接下来又是第1~3字节(分区起始地址)和第5~7字节(分区终止地址)的填写。起始地址就是分区引导扇区,扇区号为12353985。将此值及硬盘几何构成参数Hm、Sm代入公式,得到起始地址的柱面号C=769,磁头号H=0,扇区号S=1。第1字节是磁头号,故应填入00。因为扇区号是1,故第2字节的低6位应为000001B。因为用10位二进制数表示的柱面号为769,转换为二进制数为1100000001B,故第2字节的高2位应为11B,第3字节为00000001B。
采用上述类似的方法,计算和填写完分区表第四部分,用手工重新填写分区表的工作即告结束。
分区表填写完毕后经校核无误,重新启动计算机。开机后硬盘恢复原状,没有发生数据丢失。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。