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