查看單個文章
舊 2003-05-17, 01:31 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 Windows多重啟動中的重要文件分析

現在安裝多重啟動的朋友越來越多了,但是很少有人能夠完全知道在多重啟動系統中的幾個重要文件的作用是什麼,下面讓筆者簡單的予以介紹,希望大家以後能關注這些文件以備不時之需。

由於Windows 95/98/ME(以下簡稱Win9X)和Windows NT/2000/XP/Server 2003(以下簡稱WinNT)的引導方式完全不同,所以在多重啟動系統裡面,微軟採用了一種很巧妙的方式來解決這個問題。

Win9X採用的直接讀取啟始扇區的方式來啟動系統,而WinNT是通過NTLDR和NTDETECT.COM來啟動系統的。

這也是為什麼Win9X害怕引導區電腦病毒的原因之一。

需要說明的是,在WinNT架構的啟動工作中,有一個文件也是需要注意的,這個文件就是經常被大家掛在嘴邊的BOOT.INI文件,但是由於這個文件的重要性被過度的強化,給大家造成了一種這個文件是無所不能的一種錯誤的印象,也就出現了一些「傳統」的錯誤,例如「制作備份雙系統啟動檔案只需要制作備份C碟根目錄下得BOOT.INI文件就可以了」。


其實不然,在某些情況下,只制作備份這個文件是不能夠解決問題的,詳細的解釋請看後面的說明。

本文將分析的在多重啟動系統中起重要重要作用的文件分別是以下幾個:BOOT.INI、BOOTFONT.BIN、BOOTSECT.DOS、NTDETECT.COM、NTLDR。

其中BOOT.INI是大家非常熟悉的一個配置文件,從這個文件可以選項啟動的操作系統是什麼?
而且還可以通過修改BOOT.INI文件控制啟動的方式,如在操作系統說明符後面加上「/fastdetect」參數可以使用快速自檢模式,同樣,還有「/nodetect」等參數可供使用。

但是,不是說沒有這個文件就不能夠啟動你的操作系統,丟失這個文件的後果就是從C碟啟動。同時,由於這個文件是完完全全的一個文本類型的文件,我們可以隨意使用任何一個文本編輯工具編輯這個文件,甚至可以在純DOS模式下使用外部指令EDIT編輯這個文件。


換句話說,BOOT.INI在多重啟動系統中不是最重要的一個文件,也就說不上「制作備份雙系統啟動檔案只需要制作備份C碟根目錄下得BOOT.INI文件就可以了」。

熟悉多重啟動系統啟動模式的朋友們都知道,操作系統的啟動的流程從NTLDR開始,NTLDR通過讀取BOOT.INI文件確定操作系統啟動分區的位置,對於只有一個操作系統的電腦,NTLDR啟動NTDETECT.COM開始下一步的啟動流程,而對於含有多重啟動操作系統的電腦,NTLDR將把BOOT.INI的選項功能表內容顯示在螢幕上供使用者選項。


可見,NTLDR是決定多重啟動系統的關鍵性文件。而常見的提示也是:「NTLDR is missing.」。那麼其他的文件又有什麼用處呢?

NTDETECT.COM是一個用於對硬體設備啟始化的一個系統級別的文件,然後把這些硬體信息傳遞給下一啟動步驟,最終完成操作系統的啟動。需要說明的是,這個文件僅存於NT架構的操作系統裡面,而在Win9X下的啟動流程又是另外的一種方式。

以上3個文件的重要性已經有不少讀者有所瞭解,但是下面這個文件的重要性恐怕很少有人知道了,這個文件就是在多重啟動中啟動Win9X操作系統的一個非常關鍵的文件:

BOOTSECT.DOS。從名字上是看不出這個文件有什麼特殊的用途的,但是這個如果你的多重啟動操作系統組合裡面含有Win9X,那麼你一定可以在C碟根目錄發現這個文件,這個文件不大,只有512字元。


其實這個文件裡面存放的就是大家非常熟悉的啟動扇區裡面的全部資料。那這個文件是如何產生的呢?當NTLDR被安裝的時候,安裝程序自動的將原先的啟動扇區儲存為BOOTSECT.DOS文件,然後使用新的啟動資料覆蓋這個扇區。


當這個文件丟失的時候,你再選項啟動Win9X時,你看到的不再是熟悉的藍天白雲的啟動畫面,而是螢幕上的一串英文提示,翻譯過來的大意就是I/O錯誤,系統無法啟動。為什麼會這樣?因為NTLDR從你的選項中得知你將啟動Win9X系統,然後去讀取BOOTSECT.DOS文件以開始Win9X啟動流程,但是由於BOOTSECT.DOS文件不存在,所以啟動程序當然失敗了。

另外的一個比較重要的文件就是BOOTFONT.BIN文件。這個文件實際上就是一個中文字體庫,用於在啟動的時候有中文顯示。否則你看到的只有滿屏的英文提示。

以上5個文件全部位於C碟根目錄下,而且都具有一定的屬性,例如隱藏、系統、只讀等。察看、修改這些文件需要先取消這些特別屬性,否則你的操作將不能夠進行。

最後需要注意的一點是:NTLDR、NTDETECT.COM兩個文件具有向下相容性,但是不具有向上相容性,也就是說你可以使用Windows XP的這2個文件啟動Windows 2000,但是卻不能夠啟動Windows Server 2003,這也解釋了為什麼很多朋友在已經安裝有Windows XP的電腦上安裝Windows 2000以後啟動Windows XP時白的原因,解決方法其實很簡單:


從Windows XP安裝光碟裡面取出這2個文件覆蓋C碟根目錄上的同名文件即可。還有就是那個容易被大家忽略的BOOTSECT.DOS文件,一旦這個文件丟失或損壞,當然是不能夠啟動Win9X了,解決方法也很簡單:
插入一張Win9X啟動碟,執行SYS C:指令,然後重新啟動,這個時候Win9X的啟動已經恢復,只需要再從WinNT安裝光碟選項修復即可恢復多重啟動的選項啟動模式。
就版主這篇文章,有若干問題與版主商榷

1、「Win9X採用的直接讀取啟始扇區的方式來啟動系統,而WinNT是通過NTLDR和NTDETECT.COM來啟動系統的。」


  這句話有些含糊,實際上,無論是win9X系統,還是NT內核,都是由啟始扇區的MBR(主引導記錄),來執行相關的啟動檔案。win9x是io.sys、msdos.sys其中,msdos.sys是文本形式的配置文件,當文件損壞或丟失時,出現的是none syste......的提示。


  NT內核的系統,則是由MBR的內容執行時裝入文件NTLDR(這個文件沒有副檔名,但它是可執行文件,你可以使用文件分析工具開啟這個文件,看一下這個文件的格式)。

裝入後,MBR就向NTLDR中的程式碼傳送控制指令。

然後NTLDR開始切換到32位模型,然後裝入特定的I/O文件,並讀取BOOT.INI文件。

BOOT.INI文件中包括了系統中安裝的可以裝入的操作系統資訊。接著NTLDR裝入NTDETECT.COM,這個程序開始收集並儲存當前安裝的硬體信息。絕大部分硬體信息都被儲存在註冊表中的HKEY_LOCAL_MACHINE中。

  下一步,就是系統內核的啟動了。

2、制作備份多重啟動系統檔案,這個概念本身我可能沒有太理解,從二者的引導程序上來看,實際上,就是由一個MBR選項不同的系統啟始化程序,當多重啟動被破壞時,一般都是由於MBR被破壞,破壞的原因有很多,比如病毒、硬體損壞、重裝系統等。


那麼,重新構建這個多重啟動實際上是一個重寫、修復MBR及相關引導文件的程序,實際上,在修復程序中,會產生系列的文件,只有一個文件是需要人為干預的,就是boot.ini,所以,有時候,制作備份boot.ini這個說法,也是可取的。

觀點沒有錯,系統啟動的時候的確是先MBR,然後從MBR到ntldr再到一系列的內核載入
對於winxp和win2k時隨便用哪一個的NTLDR、NTDETECT.COM文件來啟動系統是沒問題的,只是啟動時顯示不同而已。


關於多重啟動比較好的方式還是使用system commander。這樣修復系統啟動也是很容易的,在dos模式下執行scin重新修改一下mbr即可。


相比nt/2k/2k3的修復模式要簡單得多。

當然還有很多工具可用來制作備份這些(mbr,fat表等)。不過感覺都不如system commander用起來省事,同時安裝多系統時也是最方便的(例如solaris,使用其他的方法相對都麻煩多多)。

轉載自《電腦報》,
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次