拯救我的操作系统
最近公司新裝操作系統image都強制裝win7,公司電腦一直拖著沒有升級,家里也一直是用番茄花園版的xp,突然心血來潮去買了個win7的碟,心想最好是破解版的,回來一裝,發現是所謂的旗艦版的,可惡的是這個還是要激活的,只有30天試用期,本想拿去找老板退,后來想想老板那可憐的樣子,估計他也不懂啥叫破解,就說一直賣這個,還挺好賣。后來網上一搜,發現下載link多多,唉,浪費。
草草的安裝一把,正好吃晚飯,晚飯后回到桌前一看,完了,原來xp系統不見了。心里不禁一驚,這試用期30天是小,原來的系統掛了可麻煩了,好多好多的程序哦,還有那網銀整起來好麻煩的。好在,簡單配置一下,先把win7下的網絡給通了。然后google安裝win7后雙系統,不少的文章,竊喜。
仔細分析一下我的機器的場景:原來的xp安裝在D盤,現在的win7安裝在C盤,于是,按照http://www.pcjsh.com/win7/201007/28-3094.html里面的,用bcdedit命令新建了一個引導記錄。
bcdedit -create {ntldr} -D "Windows XP"
bcdedit -set {ntldr} device partition=D:
bcedit -set {ntldr} path ntldr
bcedit -displayorder {ntldr} -addlast
又參考文章http://www.hensejz.com/index.php/archives/118,我xp的安裝盤一時找不到了,我原來D盤下根本沒有Ntldr、Boot.ini、NTDetect.com這幾個文件,還好,從老婆的本本上面拷貝過來這仨文件,如上所述放到D盤(xp系統根目錄)下。重啟后,的卻有多出個“Windows XP”的啟動選項,可是點了之后,卻出來文件ntldr丟失,無法加載所選項。再仔細想想,原來set path的時候第一篇文章少了bcedit -set {ntldr} path \ntldr, 我猜這個就是路徑不對的問題。在重啟發現,出現老婆機器一樣的界面,Windows XP以及Ghost 一鍵恢復,但是一閃而過又重新重啟了。想了想,可能是boot.ini文件,打開一看,里面是按老婆機器的設置,
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
C:\GHLDR=一鍵GHOST v2009.07.15
老婆的機器xp是裝在C盤下的,之前我倒是想過,但是自以為partition也是從0開始,1就是第二個分區么,后來仔細查了一下,應該是從1開始,順便把那個Ghost條目給刪了。重啟后還是不行,快崩潰了。又看到http://wenwen.soso.com/z/q190320111.htm里說把這3個文件都拷到win7的根目錄下面,也就是俺的C盤下。再重啟,終于OK了。
看到很多文章說,這3個文件在xp根目錄下就行了,在我這里就是不通。于是想應該多想想他的原理么,看到http://bbs.51cto.com/topic/thread-23342.html里面
Windows XP Professional計算機啟動過程概述
--------------------------------------------------------------------------------
概述
本文講述了Microsoft Windows XP 在x86架構計算機上的啟動過程,旨在使讀者更加了解Windows XP專業版啟動的基本知識。了解了這些知識以后,當啟動發生問題時,可以更快地找到解決方案以避免可能發生的各方面的損失。但要注意的是,本文并沒有涉及到故障處理以及任何關于故障的闡述,本文僅僅介紹Windows XP引導/啟動過程。
--------------------------------------------------------------------------------
目錄
1. Windows XP啟動階段概覽
2. 每個啟動階段的詳細介紹
--------------------------------------------------------------------------------
Windows XP啟動階段概覽
從按下計算機開關啟動計算機,到登入到桌面完成啟動,一共經過了以下幾個階段:
1. 預引導(Pre-Boot)階段;
2. 引導階段;
3. 加載內核階段;
4. 初始化內核階段;
5. 登陸。
--------------------------------------------------------------------------------
每個啟動階段的詳細介紹
a) 預引導階段
在按下計算機電源使計算機啟動,并且在Windows XP專業版操作系統啟動之前這段時間,我們稱之為預引導(Pre-Boot)階段,在這個階段里,計算機首先運行Power On Self Test(POST),POST檢測系統的總內存以及其他硬件設備的現狀。如果計算機系統的BIOS(基礎輸入/輸出系統)是即插即用的,那么計算機硬件設備將經過檢驗以及完成配置。計算機的基礎輸入/輸出系統(BIOS)定位計算機的引導設備,然后MBR(Master Boot Record)被加載并運行。在預引導階段,計算機要加載Windows XP的NTLDR文件。
b) 引導階段
Windows XP Professional引導階段包含4個小的階段。
首先,計算機要經過初始引導加載器階段(Initial Boot Loader),在這個階段里,NTLDR將計算機微處理器從實模式轉換為32位平面內存模式。在實模式中,系統為MS-DOS保留640kb內存,其余內存視為擴展內存,而在32位平面內存模式中,系統(Windows XP Professional)視所有內存為可用內存。接著,NTLDR啟動內建的mini-file system drivers,通過這個步驟,使NTLDR可以識別每一個用NTFS或者FAT文件系統格式化的分區,以便發現以及加載Windows XP Professional,到這里,初始引導加載器階段就結束了。
接著系統來到了操作系統選擇階段,如果計算機安裝了不止一個操作系統(也就是多系統),而且正確設置了boot.ini使系統提供操作系統選擇的條件下,計算機顯示器會顯示一個操作系統選單,這是NTLDR讀取boot.ini的結果。(至于操作系統選單,由于暫時條件不夠,沒辦法截圖,但是筆者模擬了一個,見圖一。)
在boot.ini中,主要包含以下內容:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows Windows 2000 Professional"
其中,multi(0)表示磁盤控制器,disk(0)rdisk(0)表示磁盤,partition(x)表示分區。NTLDR就是從這里查找Windows XP Professional的系統文件的位置的。
(*gnaw0725 注:關于boot.ini的操作請參考:
[url=http://support.microsoft.com/kb/289022/zh-cn]http://support.microsoft.com/kb/289022/zh-cn[/url]
[url=http://support.microsoft.com/kb/314081/zh-cn]http://support.microsoft.com/kb/314081/zh-cn[/url]
)
如果在boot.ini中只有一個操作系統選項,或者把timeout值設為0,則系統不出現操作系統選擇菜單,直接引導到那個唯一的系統或者默認的系統。在選擇啟動Windows XP Professional后,操作系統選擇階段結束,硬件檢測階段開始。
在硬件檢測階段中,ntdetect.com將收集計算機硬件信息列表并將列表返回到NTLDR,這樣做的目的是便于以后將這些硬件信息加入到注冊表HKEY_LOCAL_MACHINE下的hardware中。
硬件檢測完成后,進入配置選擇階段。如果計算機含有多個硬件配置文件列表,可以通過按上下按鈕來選擇。如果只有一個硬件配置文件,計算機不顯示此屏幕而直接使用默認的配置文件加載Windows XP專業版。
引導階段結束。在引導階段,系統要用到的文件一共有:NTLDR,Boot.ini,ntdetect.com,ntokrnl.exe,Ntbootdd.sys,bootsect.dos(可選的)。
c) 加載內核階段
在加載內核階段,ntldr加載稱為Windows XP內核的ntokrnl.exe。系統加載了Windows XP內核但是沒有將它初始化。接著ntldr加載硬件抽象層(HAL,hal.dll),然后,系統繼續加載HKEY_LOCAL_MACHINE\system鍵,NTLDR讀取select鍵來決定哪一個Control Set將被加載。控制集中包含設備的驅動程序以及需要加載的服務。NTLDR加載HKEY_LOCAL_MACHINE\system\service\...下start鍵值為0的最底層設備驅動。當作為Control Set的鏡像的Current Control Set被加載時,ntldr傳遞控制給內核,初始化內核階段就開始了。
d) 初始化內核階段
在初始化內核階段開始的時候,彩色的Windows XP的logo以及進度條顯示在屏幕中央,在這個階段,系統完成了啟動的4項任務:
內核使用在硬件檢測時收集到的數據來創建了HKEY_LOCAL_MACHINE\HARDWARE鍵。
內核通過引用HKEY_LOCAL_MACHINE\system\Current的默認值復制Control Set來創建了Clone Control Set。Clone Control Set配置是計算機數據的備份,不包括啟動中的改變,也不會被修改。
系統完成初始化以及加載設備驅動程序,內核初始化那些在加載內核階段被加載的底層驅動程序,然后內核掃描HKEY_LOCAL_MACHINE\system\CurrentControlSet\service\...下start鍵值為1的設備驅動程序。這些設備驅動程序在加載的時候便完成初始化,如果有錯誤發生,內核使用ErrorControl鍵值來決定如何處理,值為3時,錯誤標志為危機/關鍵,系統初次遇到錯誤會以LastKnownGood Control Set重新啟動,如果使用LastKnownGood Control Set啟動仍然產生錯誤,系統報告啟動失敗,錯誤信息將被顯示,系統停止啟動;值為2時錯誤情況為嚴重,系統啟動失敗并且以LastKnownGood Control Set重新啟動,如果系統啟動已經在使用LastKnownGood值,它會忽略錯誤并且繼續啟動;當值是1的時候錯誤為普通,系統會產生一個錯誤信息,但是仍然會忽略這個錯誤并且繼續啟動;當值是0的時候忽略,系統不會顯示任何錯誤信息而繼續運行
Session Manager啟動了Windows XP高級子系統以及服務,Session Manager啟動控制所有輸入、輸出設備以及訪問顯示器屏幕的Win32子系統以及Winlogon進程,初始化內核完畢。
e) 登陸
Winlogon.exe啟動Local Security Authority,同時Windows XP Professional歡迎屏幕或者登陸對話框顯示,這時候,系統還可能在后臺繼續初始化剛才沒有完成的驅動程序。
提示輸入有效的用戶名或密碼。
Service Controller最后執行以及掃描HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servives來檢查是否還有服務需要加載,Service Controller查找start鍵值為2或更高的服務,服務按照start的值以及DependOnGroup和DepandOnService的值來加載。
只有用戶成功登陸到計算機后,Windows XP的啟動才被認為是完成,在成功登陸后,系統拷貝Clone Control Set到LastKnownGood Control Set,完成這一步驟后,系統才意味著已經成功引導了。
--------------------------------------------------------------------------------
結論
本文簡單講述了Windows XP Professional在32位計算機上的啟動/引導過程,包括每個啟動階段,以及階段中的詳細步驟。雖然本文沒有提及錯誤處理,但是通過讓讀者了解這些啟動過程,當遇到錯誤時他們會變得更加從容以及更加容易找到錯誤的原因。
--------------------------------------------------------------------------------
參考資料
[1] Microsoft Windows XP 專業版幫助;
[2] MCSE: Windows XP Professional Study Guide. Sybex Press.
[3] MCSE Training Kit Microsoft Windows XP Professional. Microsoft Press.[/quote]
我想NTLDR讀取boot.ini,為啥開始我放到D盤下就不行呢?我在C,D根目錄下都放了boot.ini,似乎他只認C盤下面的,為了驗證,我用msconfig命令,我將C盤下面的boot.ini改名為boot_.ini,這時候msconfig里面看不到boot.ini選項了。說明其作用的的確是C盤下面的,我當初裝xp的時候確實是裝在D盤下面的,似乎是因為裝win7把我C盤下面的boot.ini等文件都革沒了,所以我開始會找不到那3個文件只能到我老婆機器上面去拷了。
至于原因,我想會不會和我的分區有關,于是用Diskpart命令查看我的磁盤(Diskpart -> select disk 0 -> list partition),發現只有C盤是主分區,其他驅動器都是掛在擴展分區底下,至于為什么,就是裝機的時候,那幫人用極快的速度我看都沒看清楚的方式幫我把分區搞定的緣故。是否是次原因,我實在是不想再深究了。我突然想到,為啥一定要把win7新建的引導記錄寫成[bcdedit -set {ntldr} device partition=D:]呢?為驗證心中的想法,我把這條修改成了[bcdedit -set {ntldr} device partition=C:],反正我都要在C盤下放那幾個文件的,重啟機器,OK,果然和我想的一樣,也可以進XP的,反正不就是要找到ntldr么,不得不提的這篇文章可能更清晰些,畢竟英文原版的可能才是出處么。http://www.dewassoc.com/kbase/multiboot/boot_ini.htm。
終于寫完了,好像很亂的,和我想象的還是不一樣,看來想表達清楚的確很難啊,還好只是給自己瞅瞅,留個印象么。完!
轉載于:https://www.cnblogs.com/davi/archive/2011/05/08/2040670.html
總結
- 上一篇: css 控制图片最大宽度
- 下一篇: Windows Phone 7.1 “芒