解析Windows 7下的BCD管理工具
BCD(Boot ConfigurationDate)即系統引導配置數據,這是從WindowsVista開始才引入的。我們知道,在WindowsVista/Server2008中BootManager組件負責系統的初始化和引導工作,而與之相匹配系統的引導數據就存儲在BCD中。相信大家非常關心Windows7下的BCD數據管理吧,下面筆者和大家一道就這方面進行一番探討。
1、BCD數據管理工具
也許最常用也最熟悉的系統引導管理就是系統高級引導菜單了,在Windows7下也不例外。當系統發生引導故障時,為了成功進入系統或者進行排錯我們會選擇在系統啟動的過程中按下F8鍵進入高級引導選項菜單,并從這個菜單中選擇一種高級啟動模式進行引導嘗試。在此可供我們選擇的引導方式主要有安全模式、啟用引導日志、最近一次正確配置、目錄服務還原模式以及禁用驅動程序前面強制等。需要說明的是,索然這些高級模式會暫時性地修復操作系統的啟動方式,以幫助故障的解決和診斷,但是這些模式并不會對引導配置或者BCD存儲做出任何永久性的修改。所以,系統高級引導菜單并不是有效的BCD數據管理工具。和此前的Windows系統類似,在Windows7中可用于修改引導配置和管理BCD存儲的工具主要有“啟動和故障恢復”控制臺,系統配置使用工具(msconfig.exe),以及比較高級的BCD編輯器(bcdedit.exe)。本文就以這三個工具為例說說BCD數據的管理。
2、用“啟動和故障恢復”控制臺實施系統引導配置
在Windows7的“啟動和故障恢復”控制臺中我們可以配置系統啟動過程中的基本選項,可以使用這些選項設置默認的操作系統、可用操作系統選擇菜單的顯示時間,以及在需要的時恢復選項的顯示時間。無論是否需要將計算機引導到不同的操作系統,都可以通過優化這些設置減少系統啟動所需的時間,并加速系統的啟動過程。
依據下面的操作步驟可進入Windows7的“啟動和故障恢復”控制臺:右鍵單擊桌面上的“計算機”圖標選擇“屬性”,在系統屬性窗口中單擊左窗格中任務下的“高級系統設置”鏈接。在系統屬性對話框的“高級”選項卡下,單擊“啟動和故障恢復”選項下的“設置”按鈕就會進入如圖2所示的“啟動和故障恢復”控制臺。在控制臺中,我們可以選擇默認的啟動的操作系統,在安裝了多個操作系統的計算機上,單擊“默認操作系統”下列列表即可選擇希望默認啟動的操作系統,如果只安裝了一個系統則當前系統就是默認的啟動的系統。選中“顯示操作系統列表的時間”復選框,并在右側的文本框中輸入要使用的時間(以秒為單位),即可設置操作系統選擇列表的顯示時間。為了加速系統的啟動速度,如果計算機中只有一個系統可以將其設置為“0”,這樣就不會顯示啟動菜單直接引導默認系統。另外,在“啟動和故障恢復”控制臺中可設置系統發生故障時的后續操作。因為這部分內容與BCD的關系不大,而且已經有作者對此做了非常深入的解析,所以就此略過。
3、用“系統配置工具”管理系統引導配置
通過“系統配置工具(msconfig.exe)”,我們可以在Windows7中調整計算機的啟動方式。通常情況下,高級用戶使用該工具進行系統故障的排錯和診斷。例如,作為排錯的一部分,可與配置計算機使用診斷啟動模式,只加載最基本的驅動和服務。
依次點擊“開始”→“運行”輸入msconfig.exe回車后可啟動“系統配置工具”,該工具提供了很多選項,應該說是我們管理BCD最方便的工具。在“常規”選項卡下可用于配置系統的啟動方式,以及是否需要將系統啟動到排錯和診斷模式下。通過使用這些選項,可以選擇進行常規啟動、診斷啟動或選擇性啟動。在重啟計算機并解決問題后,需要再次打開系統配置工具,并在“常規”選項卡中選中“正常啟動”單選按鈕。
在“系統配置工具”的“啟動”選項卡下可用于控制特定啟動過程的工作方式。在此我們可以配置計算機啟動到某種安全啟動模式下,并可選擇其他選項,例如無GUI啟動等。如果在排錯后發現需要保留這些設置,則可以選中“使所有啟動設置成為永久設置”復選框,以便將這些設置保存到引導配置啟動項中。
另外,在“啟動”選項頁面中還有一個“高級選項”按鈕,單擊該按鈕可進入“啟動高級選項”對話框。在此,除了可以鎖定PCI、檢測HAL以及啟用測試,還可以使用高級選項實現某些特殊應用。
(1).指定操作系統可以使用的處理器數量。在多處理器的系統中通常會發生某些莫名的故障,如果我們要進行排錯以了解該故障是否是由此引起的,可以使用該選項。
(2).設定操作系統可以使用的內存最大數量。如果我們懷疑某些系統引導問題是有安裝了額外的內存引起的,則可以使用該選項。比如,系統本來是2GB的內存,如果在安裝了另外的一條2GB內存后導致系統不能引導,為了判斷是否是有這條額外的內存導致了上述故障,我們就可以暫時限制系統只能使用2048MB的內存。
如果懷疑安裝到計算機上的某個服務導致系統引導故障,可以在“系統配置工具”的“常規”選項卡下選擇診斷或者選擇性啟動模式的方式進行判斷。如果確信是某服務導致了啟動故障,那么可以在“服務”選項卡下禁用該服務。在禁用后問題不再發生,應該可以確認是該服務的問題,那么我們就可永久性地禁用該服務或更新該服務。同理,如果懷疑某個在啟動時自動運行的程序導致了系統引導故障,那么可以通過“啟用”選項卡下的設置來進行排錯。
另外,在“啟動”選項頁面中還有一個“高級選項”按鈕,單擊該按鈕可進入“啟動高級選項”對話框。在此,除了可以鎖定PCI、檢測HAL以及啟用測試,還可以使用高級選項實現某些特殊應用。
(1).指定操作系統可以使用的處理器數量。在多處理器的系統中通常會發生某些莫名的故障,如果我們要進行排錯以了解該故障是否是由此引起的,可以使用該選項。
(2).設定操作系統可以使用的內存最大數量。如果我們懷疑某些系統引導問題是有安裝了額外的內存引起的,則可以使用該選項。比如,系統本來是2GB的內存,如果在安裝了另外的一條2GB內存后導致系統不能引導,為了判斷是否是有這條額外的內存導致了上述故障,我們就可以暫時限制系統只能使用2048MB的內存。
如果懷疑安裝到計算機上的某個服務導致系統引導故障,可以在“系統配置工具”的“常規”選項卡下選擇診斷或者選擇性啟動模式的方式進行判斷。如果確信是某服務導致了啟動故障,那么可以在“服務”選項卡下禁用該服務。在禁用后問題不再發生,應該可以確認是該服務的問題,那么我們就可永久性地禁用該服務或更新該服務。同理,如果懷疑某個在啟動時自動運行的程序導致了系統引導故障,那么可以通過“啟用”選項卡下的設置來進行排錯。
(3).導入、導出BCD
利用bcdeidt.exe命令我們可以導入或者導出BCD存儲,要導出系統的BCD存儲中的內容到特定文件需要使用“/export”參數。在命令行下執行命令“bcdedit/exportstorepath”,storepath就是用于保存系統BCD存儲內容的實際文件路徑,例如執行命令“bcdedite/exportd:\ctocio\backup”就會將系統的BCD信息保存到d:\ctocio\backup文件中。如果要還原系統的BCD信息,我們可以通過bcdedit.exe的“/import”參數將BCD備份導入進來。其命令格式為“bcdedicdt/importimportpath”,其中importpath為保存了BCD信息的文件夾的實際路徑。例如執行命令“bcdedit/importd:\ctocio\backup”就可將剛才備份的BCD信息重新導入進來。
(4).顯示Windows 7隱藏的BCD項目
默認情況下我們在命令行下執行bcdedit.exe是不能顯示所有的BCD項的,Windows7隱藏了某些BCD項目。如果要查看被隱藏的BCD項目,我們需要執行命令打開顯示開關將其顯示出來。假如當前系統的標識符是ba50c1f0-3752-11de-90d5-cdf8d52a3222,在命令行下依次執行命令“bcdedit/displayorderba50c1f0-3752-11de-90d5-cdf8d52a3222/addfirst”和“bcdedit/displayorderba50c1f0-3752-11de-90d5-cdf8d52a3222/addfirst”。這樣當我們重新執行bcdedit.exe時就會顯示Windows7中被隱藏的BCD項目。同時,當重啟Windows7時就會在開機菜單中出現RamdiskOptions選項,這是Windows7集成的WindowsRecoveryEnvironment,該選項在系統修復/恢復是非常有用。
(5).快速添加系統菜單
安裝多系統的用戶,往往會因為系統安裝次序不夠科學而造成系統啟動選擇菜單不全或者有誤,此時我們需要手動添加系統菜單項。下面分別說說如何利用bcdedit.exe命令添加WindowsXP啟動菜單項和Windows7啟動菜單項。
假設WindowsXP系統安裝在C盤,在Windows7中添加其系統啟動菜單項可以依次執行下面的命令或者將其保存為一個批處理文件(bat或者cmd文件)。
bcdedit /create ntldr /d "Microsoft Windows XP"
bcdedit /set ntldr device partition=C:
bcdedit /set ntldr path \ntldr
bcdedit /displayorder ntldr /addfirst
同樣我們假設Windows7安裝在C盤,其語言版本為簡體中文版,系統標識符為ba50c1f0-3752-11de-90d5-cdf8d52a3222,要添加其系統啟動菜單項依次執行下面的命令或者將其保存為一個批處理文件(bat或者cmd文件)。
set id=ba50c1f0-3752-11de-90d5-cdf8d52a3222
bcdedit /create %id% /d "Windows 7" /application osloader
bcdedit /set %id% locale zh-cn
bcdedit /set %id% device partition=C:
bcdedit /set %id% osdevice partition=C:
bcdedit /set %id% path \Windows\system32\winload.exe
bcdedit /set %id% inherit bootloadersettings
bcdedit /set %id% systemroot \windows
bcdedit /set %id% nx OptOut
bcdedit /displayorder %id% /addfirst
(6).更改系統顯示順序
如果要更改系統引導管理器中諸如Windows 7、Windows Vista、WindowsServer2008、WindowsXP在操作系統選擇菜單上的顯示順序,我們可以通過bcdedit.exe的“/displayorder”參數來實現。其命令格式是“bcdedit/displayorderid1 id2 id3...idn”,其中id1是顯示在第一位的操作系統對于的操作系統對應的系統標識符,id2是顯示在第二位的操作系統對應的系統標識符,依次類推。比如我們執行命令“bcdedit/displayorderba50c1f0-3752-11de-90d5-cdf8d52a3222d6be0d13-413a-11de-b285-b6ee0ebcf10e”則第一項系統標識符對于的系統會第一個顯示。另外,我們還可以使用“/addfirst”參數配合“/displayorder”參數設置某系統為第一項,比如執行“bcdedit/displayorderba50c1f0-3752-11de-90d5-cdf8d52a3222/addfirst”。此外執行命令“bcdedit/displayorderba50c1f0-3752-11de-90d5-cdf8d52a3222/addlast”則該系統成為最后一項。
(7).其他BCD管理
除了上面比較常用的BCD管理外,筆者再列舉幾個比較有用的bcdedit命令參數。執行命令“bcdedit/defaultd6be0d13-413a-11de-b285-b6ee0ebcf10e”將該操作系統標識符對應才操作系統設置為默認引導系統。執行“bcdedit/timeout10”,將系統啟動菜單停留的時間設置為10秒。另外,在特殊情況下我們需要將從特定系統引導一次,然后恢復為默認的引導順序。這是我們需要用到bcdedit的“/bootsequence”參數。例如,執行命令“bcdedit/bootsequenced6be0d13-413a-11de-b285-b6ee0ebcf10e”,這樣當計算機重啟時系統就會從該系統引導,當下次重啟計算機時就恢復從默認的系統進行引導。
總結:上面筆者以Windows7系統為例,演示了利用“啟動和故障恢復”控制臺、“系統配置工具”、BCD編輯器這三個工具配置和管理系統BCD數據的主要技術細節。雖然上面的演示是在Windows7中進行的,但其中大多數同樣實用于WindowsVista和Windows Server2008系統,希望本文能夠對大家有所幫助。
【編輯推薦】