1. 程式人生 > >Windows 7的啟動過程常識和故障修復

Windows 7的啟動過程常識和故障修復

Windows7的啟動過程的常識

電腦加電後,首先是啟動BIOS程式,BIOS自檢完畢後,找到硬碟上的主引導記錄MBR,MBR讀取DPT(分割槽表),從中找出活動的主分割槽,然後讀取活動主分割槽的PBR(分割槽引導記錄,也叫dbr),PBR再搜尋分割槽內的啟動管理器檔案 BOOTMGR,在BOOTMGR被找到後,控制權就交給了BOOTMGR。BOOTMGR讀取\boot\bcd檔案(BCD=Boot Configuration Data ,也就是“啟動配置資料”,簡單地說,Windows7下的bcd檔案就相當於xp下的boot.ini檔案),如果存在著多個作業系統並且選擇操作系 統的等待時間不為0的話,這時就會在顯示器上顯示作業系統的選擇介面。在我們選擇啟動WINDOWS7後,BOOTMGR就會去啟動盤尋找WINDOWS\system32\winload.exe,然後通過winload.exe載入Windows7核心,從而啟動整個Windows7系 統。

可以把這個過程簡單地概括為:BIOS-->MBR-->DPT-->pbr-->Bootmgr-->bcd-->Winload.exe-->核心載入 -->整個Windows7系統

本文就來說一說MBR-->DPT-->pbr--> Bootmgr-->bcd這一段可能出現的故障的解決。

mbr出現問題,主要是mbr程式碼被改寫,因為被改寫的程式碼不同,所以出錯資訊也各不相同。比如我們裝了Windows7與ubuntu雙系 統,ubuntu改寫了mbr,在我們把ubuntu所在的分割槽格式化後,既進不了Windows7,也進不了ubuntu,開機的時候會出現如圖的錯誤 提示:


解決的辦法就是重寫mbr。對於重寫mbr,我們所熟知的是在dos下用fdisk /mbr命令進行重寫。fdisk /mbr所重寫的mbr與xp是相容的,但是,與Windows7已經不那麼相容了。實踐表明:用fdisk /mbr命令重寫Windows7的mbr後,需要重建bcd,否則不能正常啟動Windows7。有網友指出,這裡面的原因是fdisk /mbr命令改寫了mbr中的硬碟簽名。一般的分割槽工具都是可以重寫mbr的,比如diskgenius,它所重寫的mbr與Windows7是相容的。也可以用bootrec /fixmbr命令重寫。要執行Bootrec.exe 工具,必須啟動 Windows RE。為此,請按照下列步驟操作:

插入Windows 7安裝光碟,從光碟啟動電腦,在光碟啟動完成後,按下shift+f10鍵,調出cmd命令提示符。在cmd命令提示符中輸入:bootrec /fixmbr

回車。這樣也就重寫了mbr。


分割槽表存在問題,對於這個問題,限於篇幅,不做詳細探討。

系統盤不是活動的主分割槽,這種情形只要用分割槽工具(比如diskgenius)把系統盤設為活動的主分割槽即可。

pbr出現問題,主要是pbr程式碼被改寫,因為被改寫的程式碼不同,所以出錯資訊也不相同。比如WINDOWS7系統的活動分割槽,卻被寫入了適合於XP的 pbr,這樣開機的時候就會出現如圖的提示:


簡單的解決辦法就是用bootrec /fixboot命令重寫pbr:

插入windows7安裝光碟,從光碟啟動,在光碟啟動完成後,按下shift+f10鍵,調出cmd命令提示符。在命令提示符中輸入:bootrec /fixboot

回車。這樣也就重建了活動分割槽的pbr。

這裡面還有一個常用的命令也要提一下,這就是bootsect:

插入windows7安裝光碟,從光碟啟動,在光碟啟動完成後,按下shift+f10鍵,調出cmd命令提示符。在cmd命令提示符中輸入:bootsect /nt60 sys/mbr回車。這個命令會改寫活動分割槽的pbr,並同時會改寫mbr,使得mbr和pbr適合於windows7和vista。

bootsect.exe程式位於windows7安裝光碟的boot目錄下,可以把這個檔案提取出來,在xp下的命令列可以執行這個程式,也可以在 winpe下的命令列執行這個程式,因而這個程式在使用時很方便。而bootrec.exe命令的使用就沒這麼方便了。所以BOOTSECT命令被應用得更為廣泛一些。

另外有一個要點需要指出,vista的安裝光盤裡面的boot資料夾也存在著這個小工具,但vista的bootsect命令沒有/mbr引數,因而它只能改寫pbr,而不能改寫mbr,這是必須要注意的。實踐表明:把一個硬碟的mbr清零,然後執行windows7的bootsect命令,確實可以發現 mbr被恢復正常。這也就表明了windows7的bootsect命令的確能夠重寫mbr。

另外,bootsect命令也可以重寫xp的mbr和pbr,而這也是bootrec命令所做不到的。xp的恢復控制檯用fixmbr命令改寫mbr,用 fixboot命令改寫pbr。

如果是引導檔案的問題,一般可以用bcdboot命令重新寫入引導檔案:

插入windows7安裝光碟,從光碟啟動,在光碟啟動完成後,按下shift+f10鍵,調出cmd命令提示符。在命令提示符中輸入:

bcdboot x:\windows /s x:

注意,這前一個x:是windows7的windows資料夾所在的盤,一般是c:,如果你的不是c盤,請改為對應的碟符。這後一個x:是活動主分割槽的碟符所在,一般也是c盤。所以這個命令一般的寫法是:

bcdboot c:\windows /s c:

但需要注意,在windows re環境下所看到的碟符與你在windows7下所看到的碟符未必一樣。所以需要首先用dir /a命令確認各盤是否正確。

比如:

cd /d c:

dir /a

這兩個命令的作用是,首先進入c:盤的根目錄,然後顯示c盤根目錄下的所有檔案和資料夾,根據所顯示的檔案或者資料夾,可以判斷這個盤具體是你在 windows7下所看到的哪一個盤。

windows7的引導檔案主要是bootmgrboot資料夾裡面的檔案,而boot資料夾裡面的檔案主要是bcd檔案。bcdboot命令會在指定 的分割槽內重新寫入全部windows7的引導檔案。

如果只是bcd檔案有問題,則可以用bootrec命令重建bcd:

插入windows7安裝光碟,從光碟啟動,在光碟啟動完成後,按下shift+f10鍵,調出cmd命令提示符。在命令提示符中輸入:

bootrec /RebuildBcd  

這個命令如果搜到沒有寫入bcd的windows7或者vista的作業系統,會提示你是否寫入,按提示輸入Y也就會寫入了的。

或者用bcdedit命令手動改寫bcd,但操作要複雜得多。