windows7的啟動(dòng)過程的常識(shí):電腦加電后,首先是啟動(dòng)BIOS程序,BIOS自檢完畢后,找到硬盤上的主引導(dǎo)記錄MBR,MBR讀取DPT(分區(qū)表),從中找出活動(dòng)的主分區(qū),然后讀取 活動(dòng)主分區(qū)的PBR(分區(qū)引導(dǎo)記錄,也叫dbr,究竟該叫什么,網(wǎng)絡(luò)上爭論未休,我們姑且叫它pbr吧),PBR再搜尋分區(qū)內(nèi)的啟動(dòng)管理器文件 BOOTMGR,在BOOTMGR被找到后,控制權(quán)就交給了BOOTMGR。BOOTMGR讀取ootcd文件(BCD=Boot Configuration Data ,也就是“啟動(dòng)配置數(shù)據(jù)”,簡單地說,windwows7下的bcd文件就相當(dāng)于xp下的boot.ini文件),如果存在著多個(gè)操作系統(tǒng)并且選擇操作系 統(tǒng)的等待時(shí)間不為0的話,這時(shí)就會(huì)在顯示器上顯示操作系統(tǒng)的選擇界面。在我們選擇啟動(dòng)WINDOWS7后,BOOTMGR就會(huì)去啟動(dòng)盤尋找 WINDOWSsystem32winload.exe,然后通過winload.exe加載windows7內(nèi)核,從而啟動(dòng)整個(gè)windows7系 統(tǒng)。
可以把這個(gè)過程簡單地概括為:BIOS-->MBR-->DPT-->pbr--> Bootmgr-->bcd-->Winload.exe-->內(nèi)核加載 -->整個(gè)windows7系統(tǒng)本文就來說一說MBR-->DPT-->pbr--> Bootmgr-->bcd這一段可能出現(xiàn)的故障的解決。mbr出現(xiàn)問題,主要是mbr代碼被改寫,因?yàn)楸桓膶懙拇a不同,所以出錯(cuò)信息也各不相同。比如我們裝了windows7與ubuntu雙系 統(tǒng),ubuntu改寫了mbr,在我們把ubuntu所在的分區(qū)格式化后,既進(jìn)不了windows7,也進(jìn)不了ubuntu,開機(jī)的時(shí)候會(huì)出現(xiàn)如圖的錯(cuò)誤 提示:
[圖一]解決的辦法就是重寫mbr。對(duì)于重寫mbr,我們所熟知的是在dos下用fdisk /mbr命令進(jìn)行重寫。fdisk /mbr所重寫的mbr與xp是兼容的,但是,與windows7已經(jīng)不那么兼容了。實(shí)踐表明:用fdisk /mbr命令重寫windows7的mbr后,需要重建bcd,否則不能正常啟動(dòng)windows7。有網(wǎng)友指出,這里面的原因是fdisk /mbr命令改寫了mbr中的硬盤簽名。一般的分區(qū)工具都是可以重寫mbr的,比如diskgenius,它所重寫的mbr與windows7是兼容的。 也可以用bootrec /fixmbr命令重寫。要運(yùn)行 Bootrec.exe 工具,必須啟動(dòng) Windows RE。為此,請(qǐng)按照下列步驟操作:插入windows 7安裝光盤,從光盤啟動(dòng)電腦,在光盤啟動(dòng)完成后,按下shift+f10鍵,調(diào)出cmd命令提示符。在cmd命令提示符中輸入:bootrec /fixmbr回車。這樣也就重寫了mbr。
[圖二]
分區(qū)表存在問題,對(duì)于這個(gè)問題,限于篇幅,不做詳細(xì)探討。系統(tǒng)盤不是活動(dòng)的主分區(qū),這種情形只要用分區(qū)工具(比如diskgenius)把系統(tǒng)盤設(shè)為活動(dòng)的主分區(qū)即可。pbr出現(xiàn)問題,主要是pbr代碼被改寫,因?yàn)楸桓膶懙拇a不同,所以出錯(cuò)信息也不相同。比如WINDOWS7系統(tǒng)的活動(dòng)分區(qū),卻被寫入了適合于XP的 pbr,這樣開機(jī)的時(shí)候就會(huì)出現(xiàn)如圖的提示:
[圖三]
簡單的解決辦法就是用bootrec /fixboot命令重寫pbr:插入windows7安裝光盤,從光盤啟動(dòng),在光盤啟動(dòng)完成后,按下shift+f10鍵,調(diào)出cmd命令提示符。在命令提示符中輸入:bootrec /fixboot回車。這樣也就重建了活動(dòng)分區(qū)的pbr。這里面還有一個(gè)常用的命令也要提一下,這就是bootsect:插入windows7安裝光盤,從光盤啟動(dòng),在光盤啟動(dòng)完成后,按下shift+f10鍵,調(diào)出cmd命令提示符。在cmd命令提示符中輸 入:bootsect /nt60 sys /mbr回車。這個(gè)命令會(huì)改寫活動(dòng)分區(qū)的pbr,并同時(shí)會(huì)改寫mbr,使得mbr和pbr適合于windows7和vista。bootsect.exe程序位于windows7安裝光盤的boot目錄下,可以把這個(gè)文件提取出來,在xp下的命令行可以運(yùn)行這個(gè)程序,也可以在 winpe下的命令行運(yùn)行這個(gè)程序,因而這個(gè)程序在使用時(shí)很方便。而bootrec.exe命令的使用就沒這么方便了。
所以BOOTSECT命令被應(yīng)用得 更為廣泛一些。另外有一個(gè)要點(diǎn)需要指出,vista的安裝光盤里面的boot文件夾也存在著這個(gè)小工具,但vista的bootsect命令沒有/mbr參數(shù),因而它只 能改寫pbr,而不能改寫mbr,這是必須要注意的。實(shí)踐表明:把一個(gè)硬盤的mbr清零,然后運(yùn)行windows7的bootsect命令,確實(shí)可以發(fā)現(xiàn) mbr被恢復(fù)正常。這也就表明了windows7的bootsect命令的確能夠重寫mbr。另外,bootsect命令也可以重寫xp的mbr和pbr,而這也是bootrec命令所做不到的。xp的恢復(fù)控制臺(tái)用fixmbr命令改寫mbr,用 fixboot命令改寫pbr。
如果是引導(dǎo)文件的問題,一般可以用bcdboot命令重新寫入引導(dǎo)文件:插入windows7安裝光盤,從光盤啟動(dòng),在光盤啟動(dòng)完成后,按下shift+f10鍵,調(diào)出cmd命令提示符。在命令提示符中輸入:bcdboot x:windows /s x:注意,這前一個(gè)x:是windows7的windows文件夾所在的盤,一般是c:,如果你的不是c盤,請(qǐng)改為對(duì)應(yīng)的盤符。這后一個(gè)x:是活動(dòng)主分區(qū)的盤 符所在,一般也是c盤。所以這個(gè)命令一般的寫法是:bcdboot c:windows /s c:但需要注意,在windows re環(huán)境下所看到的盤符與你在windows7下所看到的盤符未必一樣。所以需要首先用dir /a命令確認(rèn)各盤是否正確。比如:cd /d c:dir /a這兩個(gè)命令的作用是,首先進(jìn)入c:盤的根目錄,然后顯示c盤根目錄下的所有文件和文件夾,根據(jù)所顯示的文件或者文件夾,可以判斷這個(gè)盤具體是你在 windows7下所看到的哪一個(gè)盤。windows7的引導(dǎo)文件主要是bootmgr和boot文件夾里面的文件,而boot文件夾里面的文件主要是bcd文件。bcdboot命令會(huì)在指定 的分區(qū)內(nèi)重新寫入全部windows7的引導(dǎo)文件。如果只是bcd文件有問題,則可以用bootrec命令重建bcd:插入windows7安裝光盤,從光盤啟動(dòng),在光盤啟動(dòng)完成后,按下shift+f10鍵,調(diào)出cmd命令提示符。在命令提示符中輸入:bootrec /RebuildBcd 這個(gè)命令如果搜到?jīng)]有寫入bcd的windows7或者vista的操作系統(tǒng),會(huì)提示你是否寫入,按提示輸入Y也就會(huì)寫入了的?;蛘哂胋cdedit命令手動(dòng)改寫bcd,但操作要復(fù)雜得多。具體案例分析:
案例一:怪事,系統(tǒng)盤不是活動(dòng)的主分區(qū)在網(wǎng)上看到一則求助,windows7系統(tǒng)運(yùn)行正常,只是在磁盤管理中所看到的則是:系統(tǒng)盤不是活動(dòng)的主分區(qū)。
[圖四]
我們?cè)诎惭b了一鍵還原精靈裝機(jī)版后,在開機(jī)的時(shí)候按下F11鍵可以啟動(dòng)一鍵還原程序。但我們?cè)诟袷交到y(tǒng)盤后,在開機(jī)的時(shí)候仍是可以這樣操作的。而所謂的 pbr是高級(jí)格式化的時(shí)候產(chǎn)生的。這表明了,一鍵還原精靈的啟動(dòng)代碼不是寫入了活動(dòng)分區(qū)的pbr(如果是的話,在格式化的時(shí)候已經(jīng)被清除了),而是寫入了 MBR。通過在MBR中設(shè)定首先讀取一鍵還原精靈的隱藏分區(qū),然后才讀取活動(dòng)的主分區(qū)。那么,現(xiàn)在我們所遇到的這種情形是不是也通過改寫mbr而指向特定 的分區(qū)?假設(shè)mbr沒有問題,那么問題就可能出在pbr(也就是所謂的dbr),win7的pbr中寫入的代碼應(yīng)該是去找bootmgr,但如果這個(gè)代碼中規(guī)定了 要找的是另外的一個(gè)特殊的文件,而再通過這個(gè)文件去啟動(dòng)另一個(gè)分區(qū)中的bootmgr,這樣就能實(shí)現(xiàn)把另一個(gè)不是活動(dòng)的主分區(qū)變?yōu)橄到y(tǒng)盤的目的。通過上面的分析,我們可以得到結(jié)論:問題不是出在mbr,就是出在pbr,解決的辦法就是先試著重建mbr,如果不能解決,那就可以肯定問題出在pbr, 只要重建pbr就能解決問題的。
于是首先重建mbr,問題依舊,然后再重建pbr,問題果然得到解決。
案例二:開機(jī)的時(shí)候出現(xiàn):BOOTMGR is missingpress ctrl+alt+del to restart.翻譯成漢語就是:bootmgr缺失,按Ctrl + Alt + Del重新啟動(dòng)這是很常見的故障。既然是bootmgr缺失,我們一般只要用bcdboot命令重建引導(dǎo)文件即可。這種情形產(chǎn)生的原因,一般可能有:bootmgr文件確實(shí)沒有了,這是最為常見的。一種則是由磁盤錯(cuò)誤導(dǎo)致的,這種情形下,在winpe下運(yùn)行一下 chkdsk /f命令也可能解決。有朋友使用 Diskeeper 對(duì)MFT碎片進(jìn)行整理,開機(jī)的時(shí)候也出現(xiàn)了這個(gè)提示。估計(jì)可能是用DISKEEPER進(jìn)行的MFT磁盤整理后,這或者是diskeeper的一個(gè)bug, 因而不建議用diskeeper進(jìn)行mft碎片整理。一位網(wǎng)友因?yàn)楹闷?。把C盤設(shè)成了活動(dòng)的(active partition )。
是這樣設(shè)置活動(dòng)的:對(duì)計(jì)算機(jī)點(diǎn)右鍵-管理-硬盤管理。右鍵點(diǎn)C盤,設(shè)置為活動(dòng)的。靠。怎么回事啊。重啟后居然無法啟動(dòng)!顯示bootmgr is missing,Ctrl+Alt+Delete to restart。然后還是如此。這是從網(wǎng)上找到的一個(gè)案例,分析可以得出結(jié)論。他所裝的windows7應(yīng)該存在著一個(gè)隱藏的“系統(tǒng)保留”分區(qū),這個(gè)隱藏的系統(tǒng)保留分區(qū)才是真正的活動(dòng)主 分區(qū),而他的c盤則應(yīng)該不是活動(dòng)的。他把c盤設(shè)為活動(dòng),這也就意味著取消了“系統(tǒng)保留”分區(qū)的活動(dòng)狀態(tài)。但引導(dǎo)文件是在“系統(tǒng)保留”分區(qū),而不是在c 盤,c盤變成了活動(dòng)的主分區(qū),mbr就會(huì)啟動(dòng)c盤的pbr,而c盤的pbr又會(huì)去c盤找bootmgr,但c盤沒有bootmgr,所以出錯(cuò)也就是必然的 了。解決的辦法其實(shí)只要簡單地再把系統(tǒng)保留分區(qū)設(shè)為活動(dòng)即可。這位朋友制造了問題,但好象并沒能最后解決問題。真所謂會(huì)者不難,難者不會(huì)。
案例三:開機(jī)的時(shí)候出現(xiàn):BOOTMGR is compressedPress Ctrl+Alt+Del to restart翻譯成漢語就是:bootmgr被壓縮,按Ctrl + Alt + Del重新啟動(dòng)這種情形產(chǎn)生的原因是因?yàn)閷?duì)系統(tǒng)盤進(jìn)行了壓縮。奇怪的是,對(duì)于這種情形,我們用bcdboot命令重建引導(dǎo)文件卻并不能解決。但是,我們可以運(yùn)行命令:compact /u /a /f /i /s c:*這樣可以使得問題得到解決。compact程序位于windowssystem32文件夾下,所以我們要先用CD命令進(jìn)入windows system32目錄。這里是假設(shè)c:盤是bootmgr所在的盤,如果不是,要改為對(duì)應(yīng)的盤符。網(wǎng)上有朋友用這個(gè)命令的時(shí)候并沒有解決問題,原因則在于,這位朋友所運(yùn)行的命令是:compact /u /a /f /i /s c:沒有后面這個(gè)*,所以命令并沒有實(shí)現(xiàn)運(yùn)行者的目的。從命令本身所提供的幫助說明來看,這個(gè)*似乎是沒有必要的,但實(shí)際操作表明,這個(gè)*是必須的。這個(gè)命令會(huì)把已經(jīng)壓縮的C盤文件完全解壓,真所謂解鈴還須系鈴人。注意,只運(yùn)行命令:compact /u /a /f /i c:ootmgr并不能解決問題。有網(wǎng)友發(fā)現(xiàn),運(yùn)行“Bootrec.exe /fixmbr、Bootrec /fixboot"然后重啟,這樣可以解決問題。測(cè)試表明,其實(shí)只需要運(yùn)行Bootrec /fixboot這一個(gè)命令即可。這是另類的解決的辦法。猜想可能是,對(duì)驅(qū)動(dòng)壓縮后,PBR中的BPB表并沒有隨之修改,所以BPB表中所記錄的分區(qū)信息 與實(shí)際的分區(qū)信息不一致。運(yùn)行Bootrec /fixboot命令后重寫了bpb,這樣就使得二者變?yōu)榱艘恢?。?shí)踐表明:用bootsect命令也能實(shí)現(xiàn)對(duì)這個(gè)問題的解決。有網(wǎng)友發(fā)貼,說是裝了xp與vista雙系統(tǒng),啟動(dòng)vista系統(tǒng)出現(xiàn)了BOOTMGR is compressed ,于是他在xp下取消了系統(tǒng)盤的壓縮狀態(tài)。但這位網(wǎng)友的話未必可信,因?yàn)槿绻鹡tldr也被壓縮了的話,則xp啟動(dòng)的時(shí)候會(huì)出現(xiàn):ntldr is compressedPress Ctrl+Alt+Del to restart除非這位朋友只壓縮了bootmgr,而沒有壓縮ntldr,但這一般不太可能。這種壓縮一般是對(duì)整個(gè)盤進(jìn)行壓縮的時(shí)候產(chǎn)生的,如果壓縮指定文件的話,一 般不會(huì)有人去壓縮bootmgr和ntldr的。實(shí)踐表明,在windows7下,即便指定對(duì)整個(gè)的系統(tǒng)盤進(jìn)行壓縮,一般也不能壓縮bootmgr的,會(huì) 提示拒絕訪問,但是,在開機(jī)的時(shí)候仍會(huì)出現(xiàn)出錯(cuò)提示:bootmgr is compressed
案例四:先裝的windows7,后裝的linux,在linux系統(tǒng)出問題后,既進(jìn)不了linux,也進(jìn)不了windows7,這里面的原因是mbr和活動(dòng)分區(qū) 的pbr被改寫。只要重建mbr和活動(dòng)分區(qū)的pbr,也就可以進(jìn)入windows7了。最簡單的辦法是用bootsect命令解決:bootsect /nt60 sys /mbr
案例五:先裝的windows7,后裝的xp,沒有了windows7的啟動(dòng)項(xiàng):
這個(gè)需要三步解決問題:
一、用bcdboot命令重建windows7的引導(dǎo)文件。
二、用bootsect命令恢復(fù)windows7的mbr和pbr
三、進(jìn)入windows7后,用bcdedit命令添加xp的啟動(dòng)項(xiàng)