1. 程式人生 > >Vista的MBR磁盤簽名(Disk Signature) (轉帖)

Vista的MBR磁盤簽名(Disk Signature) (轉帖)

otl sign RR .cn 分區 工作 color 接班人 最新

原帖:Vista的MBR磁盤簽名(Disk Signature)_存夢_新浪博客 http://blog.sina.com.cn/s/blog_6fed14220100qq71.html

存夢發表於(2008-05-28 14:45:28)

和以前的Windows相比,Vista引導操作系統和它使用磁盤MBR中的磁盤ID號的方式都有所不同。這個ID號從NT 3.5開始就有了,這個ID號位於MBR扇區的0x1B8偏移處,也就是啟動代碼和分區表之間,其長度為4字節。它也被稱為錯誤容忍簽名(Fault Tolerance Signature),現在通常被微軟稱為磁盤簽名。在以前的NT操作系統中,對ntldr發起Windows啟動過程來說,磁盤簽名的完整性通常都不是至關重要的。然而對於Vista來說,如果簽名被改掉或找不到,那麽bootmgr(Vista中ntldr的接班人)將在Windows啟動之前掛起(halt),並顯示錯誤信息“winload.exe..... is missing or corrupt.”事實上,這是一條不準確的並有誤導性的錯誤消息,因為winload.exe並沒有被移動或修改。如果我們修改簽名的某一位就會顯示winload.exe錯誤,如果再改回來Vista又可以正常啟動了。

磁盤簽名的最初目的主要是與正在啟動的或已經啟動的操作系統能唯一識別單個的硬盤有關,比如用於錯誤容忍的動態硬盤軟件RAID配置,在boot.ini文件中放置SCSI硬盤的磁盤標簽以啟動Windows,幫助NT跟蹤維護盤符的分配等等。除了這些之外,磁盤簽名對於Vista有著新的意義,它對Vista的啟動過程至關重要。

Vista MBR

技術分享圖片

Vista之前磁盤簽名可以是字母和數字的任意組合,只要和機器中已有的磁盤簽名不同就可以,在Vista中,這個規則看起來並沒有改變。

為了啟動一個操作系統,首先必須加載並運行啟動加載器(bootloader)。Vista中,這個工作由bootmgr完成,通過BCD數據來查找啟動加載器的位置。以前的NT操作系統有些許差別,因為ntldr既是啟動管理器又是啟動加載器,對它來說,主要的任務是查找操作系統文件所在的位置。ntldr和bootmgr的首要任務都必須是識別它們應該去哪個硬盤上尋找所需的文件。ntldr通過boot.ini文件的幫助來實現,這個文件列出的硬盤號和計算機BIOS看到的硬盤號順序一致,ntldr首先獲得用戶選擇啟動項對應的硬盤號,然後檢查BIOS來找到對應的位置。在Vista中,BCD數據不會包含硬盤號,而是它們唯一的磁盤簽名。當bootmgr通過BCD數據獲得對應的磁盤簽名後,它就遍歷所有連接的磁盤知道發現具有這個磁盤簽名的硬盤。如果沒有找到匹配的硬盤,bootmgr就沒法找到Vista的啟動加載器(winload.exe),從而顯示錯誤信息“winload.exe..... is missing or corrupt.”

因此現在磁盤簽名對於啟動過程來說至關重要,必須為bootmgr維護好。如果簽名改變了,那麽BCD中所有的跟這個磁盤相關的啟動選項都必須更新,以包含最新的磁盤簽名。如果簽名被清零,那麽必須產生一個新的簽名寫到磁盤上,同時通知BCD模塊。對於普通用戶來說,很少有情況使得操作會修改或破壞磁盤簽名,因此這整個過程都是透明的。然而,在使用克隆工具或安裝多操作系統時可能會出現問題。

除了磁盤簽名外,BCD還包含了更多關於磁盤分區位置的信息,這些信息也被bootmgr用來查找winload.exe。如果一個分區在磁盤的起始位置發生變化,bootmgr也將找不到這個分區,從而也不能定位winload.exe。

技術分享圖片

Vista的MBR磁盤簽名(Disk Signature) (轉帖)