论文部分内容阅读
由于我换了块板子,原来的老系统可不能用了,连安全模式都进不去了,郁闷,于是,我便翻出了箱底的XP克隆盘,开始安装XP了。
克隆XP本是一件很简单的事情,可这回终于出了问题了,克隆进度到99%就不动了,我看进度条滞在那里足足有10分钟,无奈之下重启机器,令人郁闷的事情发生了:硬盘不能启动。
没关系,没关系,再来克隆一次不就OK了?于是又把光盘放入光驱启动,可是更另人郁闷的事情接着发生了:连光盘启动都无法进入DOS!
经我多次试验,症状是:用光驱启动,启动不了XP安装程序,进不了DOS,也进不了WINPE,但可以进入效率源修复工具,却检测不到硬盘。我又挂上另一块可启动的硬盘,问题依旧。
进不了DOS,就意味着我不能通过PQMAGIC、DISKGEN等软件来修复了。
是硬盘坏了么?但SMART没报警,且因为我有编写逻辑炸弹的经验,直觉告诉我,很可能是在克隆中程序造成分区逻辑错误,无意中形成了硬盘逻辑锁。
先从硬盘逻辑炸弹说起吧,一提起逻辑炸弹,相信很多老玩家都会想到江民逻辑炸弹,10多年前,江民公司为了对抗KV300系列的盗版,在L++版本中加入了逻辑炸弹,KV300启动时若发现是盗版,则会改写分区表,使得硬盘根本无法启动,且只要接上了硬盘,连软驱,光驱都不能启动。
其实,江民逻辑炸弹是利用了DOS的一个现在看起来很傻的特性:启动时必须把所有硬盘分区都搜索一次,而众所周知,硬盘分区表是链状的,例如C:的分区表内有链表项指示下一分区(即D:)表的物理位置。而D:分区表内有链表项指示E:,以此类推。但如果因为程序错误或人为造成分区表链形成环状,那么,DOS对分区的搜索将无穷进行下去,于是造成了无法启动的故障,江民逻辑炸弹的关键机理就是如此。
好了,既然有了这样的判断,那就开始着手解决问题了,这个问题通常有以下方法解决:
(1) 利用热插拔法,在启动时不接入硬盘,启动后才把硬盘接上。
(2) 用debug编写程序写入软盘0磁道0磁头1扇区,拦截INT 13H(硬盘中断),然后用fdisk/mbr修复。
(3) 因为DISKGEN可以绕过BIOS设置直接识别硬盘,在BIOS设置屏蔽硬盘,启动后再用DISKGEN恢复。
但我在实践中,分别把这三种方法否决了:
(1) 热插拔法:太危险了,说句实话,我还没热插拔过SATA的硬盘。
(2) 我没软驱,这年头,找软驱比找老婆还难。
(3) 我的板子不能屏蔽掉SATA硬盘,只能屏蔽掉SATA控制器。但屏蔽掉SATA控制器之后,DISKGEN也无法识别硬盘了。
似乎已经山穷水尽了,但此时我突然想到了Linux。对!就是Linux!在Linux中硬盘是挂载上去的,Linux启动机制跟微软完全不同,不会吃这种逻辑炸弹的亏。于是我找到了UBUNTU 7.04安装光盘,顺利启动,开始安装,前面的什么选择语种,设置键盘等就不再赘述了。
到了分区的这一步,这是关键的一步,Linux把我的硬盘认成没有任何分区,于是我给UBUNTU分了8GB的和1GB的swap,略小于我原来的C盘大小(10G),不要建立扩展分区。然后,开始安装。在安装进程进行到完成分区后的复制文件这一步的时候,马上点取消。
什么?为什么要取消?
各位看官,可别认为是我糊涂了,请不要忘记我在做什么——修复分区逻辑错误。Linux安装程序已经完成任务了,它的作用,只是建立一个引导分区并修复主引导区。于是拿出XP工具盘,顺利启动DOS,并用DISKGEN的“人工交互”方式修复分区,我的D、E、F、G、H盘都好好的在那里呢,修复完成,除了C盘,数据全部恢复,其实C盘本来我就要克隆掉的,数据也不要的。接着顺利安装XP,一切如常。
最后我把解决问题的思路再复述一次:
(1) 利用Linux与DOS不一样的启动机制,绕过逻辑锁。
(2) 利用Linux的分区工具,建立一个新的引导分区并修复主引导区,建立的新分区千万不要大于原来C盘的大小,否则可能会覆盖扩展分区表。
(3) 因为DISKGEN可以逐磁道查找分区表信息,而我前面的操作都不会影响扩展分区的分区表(第2步的用意就是在此),于是可以完全恢复扩展分区下的逻辑分区。
巧用Linux修复分区逻辑错误,不涉及DEBUG编程,也不涉及热插拔等危险操作。
本文只为抛砖引玉之用。
克隆XP本是一件很简单的事情,可这回终于出了问题了,克隆进度到99%就不动了,我看进度条滞在那里足足有10分钟,无奈之下重启机器,令人郁闷的事情发生了:硬盘不能启动。
没关系,没关系,再来克隆一次不就OK了?于是又把光盘放入光驱启动,可是更另人郁闷的事情接着发生了:连光盘启动都无法进入DOS!
经我多次试验,症状是:用光驱启动,启动不了XP安装程序,进不了DOS,也进不了WINPE,但可以进入效率源修复工具,却检测不到硬盘。我又挂上另一块可启动的硬盘,问题依旧。
进不了DOS,就意味着我不能通过PQMAGIC、DISKGEN等软件来修复了。
是硬盘坏了么?但SMART没报警,且因为我有编写逻辑炸弹的经验,直觉告诉我,很可能是在克隆中程序造成分区逻辑错误,无意中形成了硬盘逻辑锁。
先从硬盘逻辑炸弹说起吧,一提起逻辑炸弹,相信很多老玩家都会想到江民逻辑炸弹,10多年前,江民公司为了对抗KV300系列的盗版,在L++版本中加入了逻辑炸弹,KV300启动时若发现是盗版,则会改写分区表,使得硬盘根本无法启动,且只要接上了硬盘,连软驱,光驱都不能启动。
其实,江民逻辑炸弹是利用了DOS的一个现在看起来很傻的特性:启动时必须把所有硬盘分区都搜索一次,而众所周知,硬盘分区表是链状的,例如C:的分区表内有链表项指示下一分区(即D:)表的物理位置。而D:分区表内有链表项指示E:,以此类推。但如果因为程序错误或人为造成分区表链形成环状,那么,DOS对分区的搜索将无穷进行下去,于是造成了无法启动的故障,江民逻辑炸弹的关键机理就是如此。
好了,既然有了这样的判断,那就开始着手解决问题了,这个问题通常有以下方法解决:
(1) 利用热插拔法,在启动时不接入硬盘,启动后才把硬盘接上。
(2) 用debug编写程序写入软盘0磁道0磁头1扇区,拦截INT 13H(硬盘中断),然后用fdisk/mbr修复。
(3) 因为DISKGEN可以绕过BIOS设置直接识别硬盘,在BIOS设置屏蔽硬盘,启动后再用DISKGEN恢复。
但我在实践中,分别把这三种方法否决了:
(1) 热插拔法:太危险了,说句实话,我还没热插拔过SATA的硬盘。
(2) 我没软驱,这年头,找软驱比找老婆还难。
(3) 我的板子不能屏蔽掉SATA硬盘,只能屏蔽掉SATA控制器。但屏蔽掉SATA控制器之后,DISKGEN也无法识别硬盘了。
似乎已经山穷水尽了,但此时我突然想到了Linux。对!就是Linux!在Linux中硬盘是挂载上去的,Linux启动机制跟微软完全不同,不会吃这种逻辑炸弹的亏。于是我找到了UBUNTU 7.04安装光盘,顺利启动,开始安装,前面的什么选择语种,设置键盘等就不再赘述了。
到了分区的这一步,这是关键的一步,Linux把我的硬盘认成没有任何分区,于是我给UBUNTU分了8GB的和1GB的swap,略小于我原来的C盘大小(10G),不要建立扩展分区。然后,开始安装。在安装进程进行到完成分区后的复制文件这一步的时候,马上点取消。
什么?为什么要取消?
各位看官,可别认为是我糊涂了,请不要忘记我在做什么——修复分区逻辑错误。Linux安装程序已经完成任务了,它的作用,只是建立一个引导分区并修复主引导区。于是拿出XP工具盘,顺利启动DOS,并用DISKGEN的“人工交互”方式修复分区,我的D、E、F、G、H盘都好好的在那里呢,修复完成,除了C盘,数据全部恢复,其实C盘本来我就要克隆掉的,数据也不要的。接着顺利安装XP,一切如常。
最后我把解决问题的思路再复述一次:
(1) 利用Linux与DOS不一样的启动机制,绕过逻辑锁。
(2) 利用Linux的分区工具,建立一个新的引导分区并修复主引导区,建立的新分区千万不要大于原来C盘的大小,否则可能会覆盖扩展分区表。
(3) 因为DISKGEN可以逐磁道查找分区表信息,而我前面的操作都不会影响扩展分区的分区表(第2步的用意就是在此),于是可以完全恢复扩展分区下的逻辑分区。
巧用Linux修复分区逻辑错误,不涉及DEBUG编程,也不涉及热插拔等危险操作。
本文只为抛砖引玉之用。