Windows2008 BCD改變系統啓動方式

在下一代Windows操作系統 Windows Server 2008裏面,Microsoft引入了很多新的特性,其中就包括新的引導模式。對於一臺計算機來說,操作系統的啓動是很關鍵的一個步驟,對於目前佔據了大量桌面計算機市場領域的Microsoft Windows操作系統來說,其能否正常的啓動會影響所有使用Microsoft Windows操作系統的用戶。衆所周知,Windows 的引導方式前前後後經歷過多次的變動,基本上是每換一代Windows操作系統,Windows的啓動方式均要發生一次變動。Windows Server 2008作爲第6代Windows操作系統,其啓動方式再次發生了變動。
在Windows Server 2008 以及Windows Vista 裏面,無論是早期的從純DOS模式下引導還是現在Windows 2000/XP/Server 2003採用的ntldr+ntdetect.com 的引導方式,均被拋棄了。一種被稱爲Boot Manager的組件取代了ntldr+ntdetect.com 的引導方式,成爲Microsoft在Windows Server 2008 以及Windows Vista裏面採用的Windows引導方式。
在Windows Server 2008 以及Windows Vista中,微軟引入了一種全新的boot loader架構, Windows Boot Manager (Bootmgr.exe)。與Ntldr嚴重地依賴於硬件不同的是,Windows Server 2008中的新架構可以實現完整的硬件獨立性,且能夠與多種操作系統無縫結合,讓Windows Server 2008的啓動/引導過程更加快速與安全。同時,將之前Windows 系統中由Boot.ini管理的內容移交給新的Boot Configuration Data (BCD : 啓動設置數據),當然,也提供了新的啓動選項編輯工具,BCDEdit (BCDEdit.exe),來管理啓動設置。對於安裝了Windows Server 2008的機器,Microsoft將修改被激活的主分區的啓動扇區(Windows 安裝程序將在磁盤的第一個扇區裏面寫入MBR內容),使用新的啓動扇區內容替代原有的啓動扇區的內容。經典的錯誤提示信息:“Ntldr is missing”將被“Bootmgr is missing” 所取代。
什麼是BCD 存儲
Boot Configuration Data (BCD)用來存儲啓動配置參數並且控制Windows Server 2008 以及Windows Vista系統如何啓動。這些參數在之前的操作系統中是被存儲在Boot.ini文件之中(存在於基於BIOS的操作系統)或者是記錄在非易失性的RAM上(NVRAM)。用戶可以使用Bcdedit.exe這個命令行工具來控制在預操作系統環境下運行的Windows® code,從而實現對BDC存儲的添加,刪除,編輯以及加載等操作。
Bcdedit.exe工具存放在Windows Vista分區的\Windows\System32目錄下。對於基於BIOS的操作系統,BCD的註冊文件存儲在主分區的\Boot\Bcd目錄下。而對於基於EFI的操作系統,BCD註冊文件則是定位在EFI的系統分區上。只有擁有管理員權限的用戶纔可以修改BCD。
C:\Boot\BCD 文件就是整個 BCD 數據庫。在Windows Vista 運行的時候,這個文件是不能夠被刪除或者改名的,這是因爲系統一直佔用它。如果用戶將這個文件刪除,且已經安裝了Boot Manager,那麼用戶的系統將不能夠啓動,因爲 Boot Manger 無法找到合適的BCD數據文件來使用。
爲什麼Boot.ini要升級爲BCD?
BCD的誕生主要是爲了描述啓動配置數據提供了一種新的改進的機制。隨着新的固件模型的發展(例如,擴展固件接口(EFI)),用戶需要爲底層固件抽象提供一個可擴展的通用接口。這一全新的設計將爲Windows Server 2008 以及Windows Vista的許多新特性提供必要的支持(例如,啓動恢復工具以及多用戶安裝快照)。
修改BCD的方法
根據修改內容的不同,用戶可以選擇下面的某種工具來修改BCD:
· Startup and recovery. 如果用戶安裝了多個操作系統,那麼在 Startup and recovery 對話框中用戶可以選擇默認的啓動操作系統以及倒計時數。這些設置都存儲在System Properties 對話框的Advanced 頁籤中。
· System Configuration utility (Msconfig.exe). Msconfig.exe 是一個更加高級的工具,它主要包括了以下的操作 /debug, /safeboot, /bootlog, /noguiboot, /basevideo, 以及 /numproc.
· BCD WMI provider. 這個工具是一個管理接口,使用它用戶可以利用腳本來修改BCD。
· BCDEdit.exe. 在Windows Server 2008和Windows Vista中這個命令行的工具替代了原來的 Bootcfg.exe 工具,用戶也不能用Bootcfg.exe來修改BCD,不過,Bootcfg.exe工具在系統中依然有效,用以支持之前的操作系統。
BCD要比XP的Bootmgr強大得多,因此你還能夠用它做其它很多的事。不過BCDEdit是比較難理解與使用的,BCD中管理啓動數據的規則也要比你所想象的更爲複雜得多。使用Bcdedit.exe,用戶可以在Windows Server 2008中創建一個BCD存儲,也可以爲現有BCD存儲添加新的登錄項,修改或者刪除現有登錄項,此外,Bcdedit.exe工具還可以導入導出現有的Bcd存儲,查詢指定項以及應用全局修改。 新的引導環境被分爲兩個部分,Windows Boot Manager 和引導環境中運行的多種引導應用程序。Windows Boot Manager簡單的說就是一個迷你的操作系統,這個系統控制着用戶的引導過程,並且允許用戶選擇哪個引導應用程序需要運行。每個引導應用程序都有着自己的不同的作用,例如Windows Boot Loader應用程序就是用來引導Windows的。
當用戶使用/enum參數時,用戶可以看到一個Windows Boot Manager登錄(因爲只有一個boot manager),對於每個Windows Server 2008 或者Windows Vista操作系統用戶還可以看到對應的Windows Boot Loader應用程序。例如,如果用戶在計算機的不同分區中安裝了兩個不同版本的Windows Vista操作系統,那麼用戶就可以看到兩個Windows Boot Loader登錄。此外,用戶還可以看到一個legacy登錄,這個登錄並不是一個引導應用程序,而是使用NTLDR以及Boot.ini來引導Windows Server 2008 以前的操作系統,例如Windows Server 2003, Windows XP以及更早的操作系統。
當用戶需要在已經安裝了Windows Server 2008 或者Windows Vista的計算機上安裝早期的Windows 操作系統時,用戶需要按照下面的步驟依次進行:首先安裝早期的Windows系統,然後登錄到舊的操作系統上,通過運行活動分區中\boot目錄下的fixntfs /lh 來恢復最新的boot manager。然後爲舊的操作系統創建一個BCD登錄,找到定位在\Windows\System32目錄下的Bcdedit.exe,然後輸入下面的命令:

Bcdedit /create ...{legacy}
/d “Description”Bcdedit /set
...{legacy} device bootBcdedit /set
...{legacy} path \ntldrBcdedit /displayorder ...{legacy}
/addlast注意Description代表的是舊操作系統新的登錄的描述.


要想創建一個引導Windows Imaging Format (WIM)鏡像的登錄,那麼用戶需要創建一個帶有指向引導分區的RAMDISK選項的OSloader類型的登錄。要想完成這些操作,要使用下面的程序:首先引導路徑爲multi(0)disk(0)rdisk(0)partition(1)來對應計算機的C盤,然後鏡像還要是一個標準的Boot.wim文件,WIM鏡像的System32文件夾下還要包含Winload.exe文件。具體步驟如下:首先創建在BCD存儲上創建一個{ramdisktoptions}對象:

bcdedit /create ...{ramdiskoptions}
/d "Ramdisk options"bcdedit /set
...{ramdiskoptions} ramdisksdidevice partition=Drivebcdedit /set
...{ramdiskoptions} ramdisksdipath \boot\boot.sdi注意Drive代表的是包含鏡像的分區


然後創建一個新的引導應用程序:bcdedit /create /d "Boot from WIM" /application OSLOADER,完成後新創建的登錄會返回一個標識符(GUID),下面的操作全部是依據這個GUID來進行的:

bcdedit /set
...{GUID} device ramdisk=[c:]\sources\boot.wim,...{ramdiskoptions}bcdedit /set
...{GUID} path \windows\system32\winload.exebcdedit /set
...{GUID} osdevice ramdisk=[c:]\sources\boot.wim,...{ramdiskoptions}bcdedit /set
...{GUID} systemroot \windows



如果用戶希望引導到Windows Preinstallation Environment (Windows PE)環境中,那麼還需要完成下面的操作:

bcdedit /set
...{GUID} winpe yesbcdedit /set
...{GUID} detecthal yes


最後在顯示列表上添加上新的登錄:

· bcdedit /export “D:\BCD Backup\Bcd Backup : 將啓動設置備份到D盤 “BCD Backup” 目錄下;· bcdedit /import “D:\BCD Backup\Bcd Backup : 恢復之前備份在D盤 “BCD Backup”目錄下啓動選項。


  使用BCDEdit修改啓動菜單選項

  作爲一種良好的操作習慣,在對Windows Server 2008的啓動選項進行任何修改前,首先要對BCD中的啓動選項進行備份,相應的命令上面已經介紹過,在此不再贅述;其次,使用“bcdedit ”或“ bcdedit /enum all ”來查看系統中硬盤或分區的正確 GUID 標識,並將其記錄下來。畢竟,BCDEdit只是一款命令行工具,我們操作時需手動輸入類似“{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”這樣的長字符串時,很容易出錯,而這往往會導致Windows Vista啓動失敗。

此外如果用戶需要改變特定的登錄選項的debugger設置,可以按照下面的步驟操作: 要設計一個連續的debugging:bcdedit /set
...{GUID} debugtype:serialbcdedit /set
...{GUID} baudrate:Baudratebcdedit /set
...{GUID} debugport:Port要設置一個USB的debugging:bcdedit /set
...{GUID} debugtype:usbbcdedit /set
...{GUID} targetname:debugging要設置1394的debugging:bcdedit /set
...{GUID} debugtype:1394bcdedit /set
...{GUID} targetname:32下面的命令行演示的是爲c74b751a-ff09-11d9-9e6e-0030482375e4在115200波特com1端口設置連續debugging:Bcdedit /set
...{c74b751a-ff09-11d9-9e6e-0030482375e4} debugtype:serialBcdedit /set
...{c74b751a-ff09-11d9-9e6e-0030482375e4} baudrate:115200Bcdedit /set
...{c74b751a-ff09-11d9-9e6e-0030482375e4} debugport:1




最後需要說明的是,Windows Server 2008 對BCD鍵是採用了保護措施的。Windows Server 2008 默認設定,只允許 SYSTEM 用戶能夠完全控制這個鍵,而Administrators組用戶只有讀取的權限,沒有寫入的權限。而其他類型的用戶則根本沒有查看的權限。換句話說,要修改這個鍵,就需要手動調整註冊表的安全描述符的內容了。調整註冊表安全描述符的方法很簡單,只需要右鍵點擊將要被修改的鍵,然後選擇權限,然後點擊添加按鈕把自己的賬戶加入列表,並打開寫入權限即可,這裏不再詳細的描述。

BCD 是一個非常複雜的話題,涉及到很多Windows比較深入的技術。本文簡單的描述了Windows Server 2008 BCD的一些特性,對於普通的用戶來講,BCD也許與之前的Boot.ini區別不大,但是對於開始使用基於EFI (Extensible Firmware Interface : 可擴展固件接口,以後採用這種接口的PC會越來越多 )的計算機用戶而言,全新的引導技術將會帶給用戶全面的管理體驗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章