由于我換了塊板子,原來的老系統(tǒng)可不能用了,連安全模式都進不去了,郁悶,于是,我便翻出了箱底的XP克隆盤,開始安裝XP了。
克隆XP本是一件很簡單的事情,可這回終于出了問題了,克隆進度到99%就不動了,我看進度條滯在那里足足有10分鐘,無奈之下重啟機器,令人郁悶的事情發(fā)生了:硬盤不能啟動。
沒關系,沒關系,再來克隆一次不就OK了?于是又把光盤放入光驅啟動,可是更另人郁悶的事情接著發(fā)生了:連光盤啟動都無法進入DOS!
經(jīng)我多次試驗,癥狀是:用光驅啟動,啟動不了XP安裝程序,進不了DOS,也進不了WINPE,但可以進入效率源修復工具,卻檢測不到硬盤。我又掛上另一塊可啟動的硬盤,問題依舊。
進不了DOS,就意味著我不能通過PQMAGIC、DISKGEN等軟件來修復了。
是硬盤壞了么?但SMART沒報警,且因為我有編寫邏輯炸彈的經(jīng)驗,直覺告訴我,很可能是在克隆中程序造成分區(qū)邏輯錯誤,無意中形成了硬盤邏輯鎖。
先從硬盤邏輯炸彈說起吧,一提起邏輯炸彈,相信很多老玩家都會想到江民邏輯炸彈,10多年前,江民公司為了對抗KV300系列的盜版,在L++版本中加入了邏輯炸彈,KV300啟動時若發(fā)現(xiàn)是盜版,則會改寫分區(qū)表,使得硬盤根本無法啟動,且只要接上了硬盤,連軟驅,光驅都不能啟動。
其實,江民邏輯炸彈是利用了DOS的一個現(xiàn)在看起來很傻的特性:啟動時必須把所有硬盤分區(qū)都搜索一次,而眾所周知,硬盤分區(qū)表是鏈狀的,例如C:的分區(qū)表內有鏈表項指示下一分區(qū)(即D:)表的物理位置。而D:分區(qū)表內有鏈表項指示E:,以此類推。但如果因為程序錯誤或人為造成分區(qū)表鏈形成環(huán)狀,那么,DOS對分區(qū)的搜索將無窮進行下去,于是造成了無法啟動的故障,江民邏輯炸彈的關鍵機理就是如此。
好了,既然有了這樣的判斷,那就開始著手解決問題了,這個問題通常有以下方法解決:
(1) 利用熱插拔法,在啟動時不接入硬盤,啟動后才把硬盤接上。
(2) 用debug編寫程序寫入軟盤0磁道0磁頭1扇區(qū),攔截INT 13H(硬盤中斷),然后用fdisk/mbr修復。
(3) 因為DISKGEN可以繞過BIOS設置直接識別硬盤,在BIOS設置屏蔽硬盤,啟動后再用DISKGEN恢復。
但我在實踐中,分別把這三種方法否決了:
(1) 熱插拔法:太危險了,說句實話,我還沒熱插拔過SATA的硬盤。
(2) 我沒軟驅,這年頭,找軟驅比找老婆還難。
(3) 我的板子不能屏蔽掉SATA硬盤,只能屏蔽掉SATA控制器。但屏蔽掉SATA控制器之后,DISKGEN也無法識別硬盤了。
似乎已經(jīng)山窮水盡了,但此時我突然想到了Linux。對!就是Linux!在Linux中硬盤是掛載上去的,Linux啟動機制跟微軟完全不同,不會吃這種邏輯炸彈的虧。于是我找到了UBUNTU 7.04安裝光盤,順利啟動,開始安裝,前面的什么選擇語種,設置鍵盤等就不再贅述了。
到了分區(qū)的這一步,這是關鍵的一步,Linux把我的硬盤認成沒有任何分區(qū),于是我給UBUNTU分了8GB的和1GB的swap,略小于我原來的C盤大小(10G),不要建立擴展分區(qū)。然后,開始安裝。在安裝進程進行到完成分區(qū)后的復制文件這一步的時候,馬上點取消。
什么?為什么要取消?
各位看官,可別認為是我糊涂了,請不要忘記我在做什么——修復分區(qū)邏輯錯誤。Linux安裝程序已經(jīng)完成任務了,它的作用,只是建立一個引導分區(qū)并修復主引導區(qū)。于是拿出XP工具盤,順利啟動DOS,并用DISKGEN的“人工交互”方式修復分區(qū),我的D、E、F、G、H盤都好好的在那里呢,修復完成,除了C盤,數(shù)據(jù)全部恢復,其實C盤本來我就要克隆掉的,數(shù)據(jù)也不要的。接著順利安裝XP,一切如常。
最后我把解決問題的思路再復述一次:
(1) 利用Linux與DOS不一樣的啟動機制,繞過邏輯鎖。
(2) 利用Linux的分區(qū)工具,建立一個新的引導分區(qū)并修復主引導區(qū),建立的新分區(qū)千萬不要大于原來C盤的大小,否則可能會覆蓋擴展分區(qū)表。
(3) 因為DISKGEN可以逐磁道查找分區(qū)表信息,而我前面的操作都不會影響擴展分區(qū)的分區(qū)表(第2步的用意就是在此),于是可以完全恢復擴展分區(qū)下的邏輯分區(qū)。
巧用Linux修復分區(qū)邏輯錯誤,不涉及DEBUG編程,也不涉及熱插拔等危險操作。
本文只為拋磚引玉之用。