2005年06月10日

由于误操作(如:错误地使用压缩代理)或病毒感染等原因,硬盘有时会产生一种“硬盘死锁”故障。所谓硬盘死锁,是指电脑在引导机器载入操作系统过程中,由于循环分配驱动器盘符,导致驱动器逻辑盘符用尽而使机器陷入死循环状态,最后使机器无法正常启动操作系统。硬盘死锁一旦发生,其故障现象是:只要故障硬盘安装到电脑中,就无法从硬盘、软驱启动操作系统。即使把故障硬盘安装成从属IDE设备,同样会导致正常软硬盘无法引导机器。这种硬盘的故障现象,其表象似乎比真正的物理故障盘还严重,其实这是一种纯软故障。但由于这种故障硬盘安装到电脑中后,正常盘也不能引导机器了,所以一般的解决方法是,使用CMOS SETUP中的低级格式化功能对其进行低格。然而用这种方法存在很多弊病。   事实上解决这种故障的原理非常简单,即只要将硬盘上的主引导扇区的所有内容清为0,使这种硬盘如同新盘,就可以解决死锁问题。问题是这种硬盘接入机器后,机器无法引导操作系统,所以不能使用在操作系统下运行某些刷新主引导扇区程序的方法来解决。如何在未引导操作系统的情况下不低格硬盘解决死锁问题呢?为此,笔者通过实践研究,找到了一种非常简单的方法,无须启动操作系统或对硬盘进行低格,可万无一失解决硬盘循环死锁问题。   观察死锁硬盘的故障现象,不难看出这种故障是在引导操作系统的过程中产生的,如果能在分配驱动器盘符之前,把对硬盘引导扇区刷新的指令写入软系统盘的引导扇区,让BOIO程序执行这个特别的引导扇区,就可以达到目的。 具体操作方法如下: 1.先取下带有循环死锁故障硬盘,准备一张系统软盘(带有DEBUG调试程序)和一张空白软盘,并将空白软盘格式化。 2.生成一张特殊软盘。用系统软盘启动机器,执行DEBUG命令后,取出系统盘,插入空白软盘(待制作的特殊软盘),在DEBUG环境下进行如下操作: A:\>DEBUG -A 0100 XXXX:0100 XOR AX,AX XXXX:0102 PUSH AX XXXX:0103 POP DS XXXX:0104 PUSH AX XXXX:0105 POP ES XXXX:0106 MOV CX,100 XXXX:0109 MOV BX,7C00 XXXX:010C MOV WORD PTR [BX],00 XXXX:0110 INC BX XXXX:0111 INC BX XXXX:0112 LOOP 10C XXXX:0114 MOV AX,0301 XXXX:0117 MOV CX,0001 XXXX:011A MOV DX,80 XXXX:011D MOV BX,7C00 XXXX:0120 INT 13 XXXX:0122 JMP FFFF:0000 XXXX:0127 -W 100 0 0 1 -Q 通过以上操作,特殊软盘就制作好了。 3.关闭机器,制作好的特殊软盘保留在软盘驱动器中。将故障硬盘装回机器中,其电缆连接方法决定了上述MOV DX,80指令送入DX寄存器中的值。若将故障盘联接成第一硬盘或系统中只接有此故障硬盘,即上述MOV DX,80指令中送入DX寄存器的值为80H,若系统中接有两个硬盘,且将故障盘连接成第二硬盘,即送入DX寄存器的值应为81H。 4.上电重新启动机器,当机器开始从软盘载入操作系统时,大约过2-3秒钟后,机器会自动复位重启动。 5.将特殊软盘取出,插入正确系统软盘,让机器从软盘引导操作系统。若无意外,机器就会正常启动,当机器出现A:\>提示符时,标志着故障硬盘的循环死锁故障已经排除。此后就可以对该硬盘进行正常的分区格式化等操作。如果试图恢复硬盘上的数据,请不要分区格式化,接着进行下一步骤。 6.用KV300(Z+版以上)引导机器,执行KV300杀毒软件,用该软件的硬盘分区扫描恢复功能,对硬盘进行分区扫描,即按 F10功能键,然后插入一张格式化好的空盘,回答“Y”,耐心等待十几分钟,再回答“Y”,当屏幕显示“OK!OK!OK!”的提示时。就表示硬盘的分区已恢复。重新启动机器,一切完好如初。 硬盘逻辑锁巧解 老龚:  我记得在去年12月份的一期“你问我答”中,有人问到“在遭到某个黑客程序的袭击后,硬盘不能启动,甚至用光盘和软盘都启动不了,一启动就死机,甚至做副盘都不行”。我是一位装机店的技术人员,遇到过好几块类似的硬盘。你当时说可以找一个专门的软件来处理这个问题,这个软件在哪儿找?具体如何解决?( Nike) Nike :   以前我在一个反病毒网站上看到有详细处理类似问题的具体方法和软件,但遗憾的是现在这个网站好象已经关闭了。不过我在网上还找到了其他解决这个问题的方法。在谈论具体的解决方法前,我先讲述一下被“逻辑锁”锁住的硬盘为什么不能用普通办法启动的原因:计算机在引导DOS系统时将会搜索所有逻辑盘的顺序,当DOS被引导时,首先要去找主引导扇区的分区表信息,位于硬盘的零头零柱面的第一个扇区的OBEH地址开始的地方,当分区信息开始的地方为80H时表示是主引导分区,其他的为扩展分区,主引导分区被定义为逻辑盘C盘,然后查找扩展分区的逻辑盘,被定义为D盘,以此类推找到E,F,G…..“逻辑锁”就是在此下手,修改了正常的主引导分区记录将扩展分区的第一个逻辑盘指向自己,DOS在启动时查找到第一个逻辑盘后,查找下个逻辑盘总是找到是自己,这样一来就形成了死循环,这就是使用软驱,光驱,双硬盘都不能正常启动的原因。实际上这“逻辑锁”只是利用了DOS在启动时的一个小小缺陷,便令不少高手都束手无策。知道了“逻辑锁”的“上锁”原理,要解锁也就比较容易了。以前我看到有位朋友采用“热拔插”硬盘电源的方法来处理:就是在当系统启动时,先不给被锁的硬盘插上电源线,等待启动完成后再给硬盘“热插”上电源线,这时如果硬盘没有烧坏的话,系统就可以控制硬盘了。当然这是一种非常危险的方法,大家不要轻易尝试,下面介绍两种比较简单和安全的处理方法。 方法一:修改DOS启动文件   首先准备一张DOS6.22的系统盘,带上debug、pctools5.0、fdisk等工具。然后在一台正常的机器上,使用你熟悉的二进制编辑工具(debug、pctools5.0,或者windows下的ultraedit都行)修改软盘上的IO.SYS文件(修改前记住改该文件的属性为正常),具体是在这个文件里面搜索第一个“55aa”字符串,找到以后修改为任何其他数值即可。用这张修改过的系统软盘你就可以顺利地带着被锁的硬盘启动了。不过这时由于该硬盘正常的分区表已经被黑客程序给恶意修改了,你无法用FDISK来删除和修改分区,而且仍无法用正常的启动盘启动系统,这时你可以用DEBUG来手工恢复。使用DEBUG手工修复硬盘步骤如下: a:\>debug -a -xxxx:100 mov ax,0201 读一个扇区的内容 -xxxx:103 mov bx,500 设置一个缓存地址 -xxxx:106 mov cx,0001 设置第一个硬盘的硬盘指针 -xxxx:109 mov dx,0080 读零磁头 -xxxx:10c int 13 硬盘中断 -xxxx:10e int 20 -xxxx:0110 退出程序返回到指示符 -g 运行 -d500 查看运行后500地址的内容 这时候会发现地址6be开始的内容是硬盘分区的信息,发现此硬盘的扩展分区指向自己,这就使DOS或WINDOWS启动时查找硬盘逻辑盘进去死循环,在DEBUG指示符下用E命令修改内存数据 具体如下: E6BE xx.0 xx.0 xx.0…………… ……………………….. …………………..55 AA 55 AA表示硬盘有效的标记,不要修改,xx0表示把以前的数据“xx”改成0 再用硬盘中断13把修改好的数据写入硬盘就可以了,具体如下: A:\>debug a 100 表示修改100地址的汇编指令 -xxxx:100 mov ax,0301 写硬盘一个扇区 -xxxx: 这里直接按回车 -g 运行 -q 退出然后运行 FDISK/MBR(重置硬盘引导扇区的引导程序),再重新启动电脑就行了。 怎么样?用这种方法处理够简单的吧?而且这种方法还有一个好处就是可以保住盘上的数据!如果你不需要保数据的话,还有更加简单的处理方法: 方法二:巧设BIOS,用DM解锁 大家知道DM软件是不依赖于主板BIOS的硬盘识别安装软件,(所以在不能识别大硬盘的老主板上也可用DM来安装使用大容量硬盘)。就算在BIOS中将硬盘设为“NONE”,DM也可识别并处理硬盘。首先你要找到和硬盘配套的DM软件(找JS要或去网上荡),然后把DM拷到一张系统盘上。接上被锁硬盘,开机,按住DEL键,进CMOS设置,将所有IDE硬盘设为NONE(这是关键所在!),保存设置,重启动,这时系统即可 “带锁”启动。启动后运行DM,你会发现DM可以绕过BIOS,识别出硬盘,选中该硬盘,分区格式化,就OK了。这么简单?不过这种方法的弱点是硬盘上的数据将全部丢失。

Donews Blog