奇特的硬盘故障

Author: 刘新 Date: 2000年 第45期

  日前,我朋友的网吧内忽然在连续两天内有五个硬盘相继“阵亡”,其中三个为希捷3.2GB,一个为昆腾大脚4.3GB,一个为钻石4.3GB。据朋友叙述:关机前还好好的,关机后就再无法启动,而BIOS自检时却能正确识别硬盘。更为奇特的是,即便他用软盘或光盘启动计算机也不行,到BIOS自检完成后在应该出现“Starting Windows98”的地方就死机了;唯一的办法就是在BIOS中将硬盘设置为“NONE”,才能从软盘启动,但再也无法找到硬盘。他一时心急,将两个希捷硬盘、一个昆腾硬盘和一个钻石硬盘均做了低级格式化(利用BIOS的格式化功能),但只有钻石硬盘成功地完成了格式化过程,并可以正常使用了,其他三个硬盘均只进行到一半就出现连续的坏道显示,根本无法进行下去。电脑公司的维修人员告诉他,已经无法修复,只有换硬盘了。
  听完朋友介绍,我马上断定这绝对不会是物理损坏,因为几个硬盘不可能损坏的位置一模一样,而很有可能是遭受某种病毒或恶意程序的攻击。但我也从未听说过这种故障现象,并没有把握修好这些硬盘,权且“死马当作活马医”吧。
  首先,将坏盘作为从盘连到好机子上,并在BIOS中,将它设为NONE。这样一来,虽能用正常主盘启动Windows,但Windows仍不能识别该坏从盘。上网讨教,也未获得良方上策。于是,陷入深深的沉思之中。
  一番冥思苦想之后,忽然灵光一闪,想起1997年曾经闹得沸沸扬扬的“逻辑炸弹”事件,众多被炸硬盘均出现“假死”现象,一般用户根本无法修复,我虽未亲眼目睹其惨状,但估计跟目前这情况也差不多。以前我曾经从网上下载了一个“逻辑炸弹模拟器”,但出于恐惧,从未敢在我的机器上试过,今天倒是派上了用场。回家启动我的机器,调出该模拟器的README,上面清清楚楚地写着“先用附带的RESCUE.EXE制作一张挽救软盘,当硬盘被炸之后从软盘启动计算机,当屏幕上出现“UNLOCKED!”即表示成功,再重新启动计算机即可。”马上拿来一张空白软盘,插入软驱运行RESCUE,屏幕提示挽救盘制作成功。带着它又立即赶往朋友的机房。
  先拿了个已经低级格式化过的希捷4.3GB硬盘放入机箱,确认连线无误后,重新设置CMOS,让其自动检测硬盘参数,并将启动顺序设为“A:C:”,然后插入挽救软盘,满怀希望地重新启动计算机。在令人难熬的软盘“嘎吱嘎吱”响过之后,屏幕上终于出现了“UNLOCKED!”,真令人喜不自禁。马上抽出软盘重启机器,咦,怎么还是死机?再启动一次,故障依旧。明明提示成功,难道什么地方做错了吗?
  在一边一直没吭声的朋友又拿来一个昆腾的坏硬盘装入机箱,准备再试一试。软盘启动后仍然出现的是“UNLOCKED!”,我机械地抽出软盘重启,令人难以置信的是,屏幕上居然出现了久违的“INVALID SYSTEM DISK,REPLACE THE DISK,AND THEN PRESS ANY KEY...”,随后再用挽救盘启动,屏幕出现的提示是“NO BOMB!”难道真的成功了吗?我插入DOS启动盘,果然引导成功,随后进行的FDISK、FORMAT、安装Win98、一切顺利,这个硬盘完全起死回生了。
  接下来当然对剩余的两个希捷硬盘如法炮制,其中一个不仅恢复生机,连原先安装的软件也毫发无损;但那个已低级格式化了的希捷硬盘仍“沉睡不醒”。
  第二天,我便开始研究这张挽救盘的奥秘。先用DIR查看,发现盘上什么文件也没有,再用NORTON 8.0的DISKEDIT调出该盘的引导扇区,果然发现和普通启动盘的引导扇区有所不同,有“FOR KV300”的字样在上面,估计该引导程序是特制的。于是马上动手写了个小程序,将引导扇区的内容读出来,生成一个文件,取名叫“BOOT.COM”。再用TD将其反汇编过来,并跟踪其执行。该程序非常简单,只是读取硬盘0道0面1扇区(也就是硬盘的主引导扇区)的数据,然后比较第508字节,看是否为0AAAAH,如不是,就显示“NO BOMB”;否则就读取0道0面2扇区的数据并写到第1扇区上,然后再显示“UNLOCKED!”,从而完成恢复工作。
  毫无疑问,操作系统在启动时只要发现有硬盘的存在,都必定会从硬盘的主引导扇区读取硬盘的有关数据,通常情况下,如果数据有错,操作系统都可能会报错并进而做出相应处理。为了避免因意外事故导致主引导扇区的破坏,厂家在硬盘的0道0面2扇区上通常都存有主引导扇区的备份,所以只要从该扇区读取数据覆盖到第1扇区就可以恢复硬盘数据。但不幸的是,我的朋友在给两个希捷硬盘做低级格式化时可能破坏了这一备份数据,导致硬盘无法恢复。
  不过,既然找到了问题的症结所在,要恢复也并非难事。只要先从相同型号的硬盘的主引导扇区读取正确的数据,暂时存放在软盘上,然后再写回坏硬盘的主引导扇区,问题就可解决。整个过程分为两部分,一步是从好硬盘读取数据并写到软盘上,第二步是从软盘写到坏硬盘上。不过写回数据的这一过程不能用普通程序做,因为普通程序必须运行在操作系统下,而操作系统在有坏硬盘的情况下又不能启动,所以只能写成引导程序的形式(引导程序实质上也是一个COM文件,只是它的数据格式有更严格的要求,而且没有文件名,必须放到引导扇区)。备份的数据也不能以文件形式存放,因为在没有操作系统的情况下,引导程序是无法处理文件的。以下是我写的程序段:
  1.读取好硬盘数据并写到软盘的0道0面2扇区(这是备份程序的一部分)
  MOV AX,OFFSET buffer ;buffer的空间必须大于512字节
  MOV DS,AX
  MOV ES,AX
  MOV AL,1
  MOV AH,2
  MOV CX,02
  MOV DX,0080H
  LEA BX,buffer
  INT 13H ;读取硬盘第二扇区
  TEST AH,AH
  JNZ error ;读取失败
  MOV AH,03
  MOV AL,01
  MOV CX,02
  MOV DX,00
  LEA BX,buffer
  INT 13H ;写到软盘第二扇区
  TEST AH,AH
  JNZ error ;写失败
  2.从软盘0道0面2扇区读取数据并写到坏硬盘主引导扇区(这是引导程序的一部分)
  XOR AX,AX
  MOV DS,AX
  MOV ES,AX
  MOV AL,1
  MOV AH,2
  MOV CX,02
  MOV DX,00
  MOV BX,7F00H
  INT 13H ;读取软盘第二扇区
  TEST AH,AH
  JNZ error ;读取失败
  MOV AH,03
  MOV AL,01
  MOV CX,01
  MOV DX,00
  MOV BX,7F00H
  INT 13H ;写到硬盘第一扇区
  TEST AH,AH
  JNZ error ;写失败
  做完这张特殊的引导盘后,重新引导朋友的机器,一切OK!
  问题虽然解决了,但疑虑随之而来:这到底是病毒还是玩笑?不管是哪一种,其破坏威力都令人心惊。朋友的机器并未装软驱,只可能来源于网上,因此上网的朋友可要多加小心了!如果你有什么疑虑或更好的方法,欢迎来信探讨,我的E-mail是:liuxin_new@263.net。