Windows XP 和 Windows PE 2.0 的雙引導

來源:互聯網
上載者:User
在前幾期的“案頭檔案”中,我提到了 Windows PE 已成為一種恢複工具,還介紹了如何從另一個分區使用它。最近有人問了我一個問題,使我覺得有必要討論一下此主題的最新發展趨勢 — 同時使用 Windows PE 2.0 和 Windows XP,
畢竟許多使用者可能使用 Windows XP 一段時間了,而且 Windows PE 2.0 是 Microsoft 將繼續提供支援的版本(請注意,對 Windows PE 1.x 將不再做進一步的更新)。
Windows PE 1.x 和 2.x 之間的一個重要區別在於 Windows PE 2.x 可以通過標準引導介面進行引導,而 Windows PE 1.x 必須使用特有的引導方法。儘管可以從另一個分區引導 Windows PE 1.x 或 2.x,但在作業系統所在的引導分區進行引導可能會有許多便利(我會在稍後加以介紹)。

Windows 的雙引導
一直以來,Windows NT 對雙引導的支援都不太好。但是,由於基於可延伸韌體介面 (EFI) 的電腦逐漸開始取代舊的 IBM PC AT BIOS,Microsoft 更改了 Windows 的引導機制,以便與 EFI 更好地協同工作並在所有體繫結構中採用同一引導機制。從 Windows Vista 開始,Windows 採用了稱為開機設定資料庫或 BCD 的新引導機制(請參閱 microsoft.com/whdc/system/platform/firmware/bcd.mspx)。但是,無論是使用原來的 boot.ini 還是新的 BCD 機制,Windows 通常都可以引導其他動作系統,雖然這樣做就將引導過程轉交給其他引導載入程式。
開始前必須先明確一點:Windows PE 2.0 只能在完全相容進階配置與電源介面 (ACPI) 並且記憶體至少為 384MB(最好為 512MB)的系統上運行。我在五月份的專欄 (technetmagazine.com/issues/2007/05/DesktopFiles) 中提到,非 ACPI 系統將無法引導 Windows PE 2.0,並且由於必須將 Windows PE 2.0 引導到 RAMDisk,因此它需要配有足夠的 RAM 來存放 RAMDisk、任意暫存空間以及所有 RAM 工作集。如果您的系統 RAM 少於 384MB,請趁早放棄這種途徑而改用 Windows PE 1.6。即使是擅長給 Windows PE 瘦身的高手也無法在 256MB 記憶體的情況下流暢運行。

對了,別忘了要解決的問題
現在,讓我們來瞭解一下通過從與 Windows XP 相同的分區引導 Windows PE 2.0 可以解決的問題。
完全系統復原 這是通過從 Windows XP 所在分區引導 Windows PE 可以實現的其中一個任務。由於 Windows PE 2.0(與之前的 Windows PE 1.6 一樣)可完全引導到 RAMDisk,因此您可以重新映像整個磁碟 — 或使用 ImageX 單獨還原 Windows XP 檔案,而不必重新映像整個分區。
由於允許使用者在啟動時引導到 Windows PE,因此現在甚至可以遠程恢複系統。映像可以來自輔助分區、網際網路共用(如果使用者不是移動使用者)、恢複 DVD 或 USB 硬碟,如果使用的是 ImageX,甚至還可以將其儲存在要恢複的分區上。這種磁碟恢複方法對許多問題(物理磁碟損壞除外)而言都是一種不錯的解決方案。但是很明顯,它不適合於還原使用者資料,除非最初受到保護的資料作為恢複的一部分加以還原。請記住,應使用漫遊設定檔並備份 PC 中的資料以防止此情況下的資料丟失。還應確保使用的任何恢複機制都考慮到使用者的需要,減少任何潛在的資料丟失風險(包括由於重設 EFS 加密金鑰而造成的丟失)。
檔案恢複 Windows PE 還提供了啟動和運行系統的機制(即使 Windows 的主安裝不能引導)。在這種情況下,可將使用者資料引導並恢複到其他系統(使用者必須有熱備份系統)或其他位置,以便使用者能夠很快重新開始工作。
系統修複 最後,在 Windows XP 分區上引導 Windows PE 後,可通過運行一組故障排除指令碼或一個簡單的、使用者驅動的修複或恢複應用程式來修複系統。此過程類似於完全系統復原,但它涉及的範圍較小,並且不會危及使用者資料。
現在我們瞭解了在 Windows XP 分區上引導 Windows PE 可實現的功能,接下來讓我們看一看後台情況以便將此過程應用到所需的任何解決方案中。

在 Windows Vista 之前
在 Windows Vista 出現之前,對於基於 BIOS/主引導記錄 (MBR) 的系統,其引導方式如下所述。BIOS 指向引導裝置(對硬碟而言,它指向磁碟的 MBR)。MBR 執行可指定待引導分區的代碼。注意,它是設定了主動標記的第一個分區。在最早版本的 diskpart 中,無法將分區設為不活動(即無法移除主動標記)。在 diskpart 中添加了開關來解決此問題 — 否則,它將是分區表順序中具有主動標記的第一個分區。該分區包含開機磁區 — 它會指出接下來要執行的代碼。從 Windows NT 到 Windows Server 2003,要啟動並執行代碼都位於一個名為 ntldr 的沒有副檔名的檔案中。如果磁碟已格式化但未安裝 Windows,則當您試圖進行引導時,將看到錯誤訊息“NTLDR not found”。
您可能有興趣知道 ntldr 是完全向後相容的,而不會向前相容。這就表示 Windows XP 的 ntldr 可引導 Windows 2000,反之卻不行。這就是實現雙引導必須首先安裝舊版本作業系統的原因。並且由於 ntldr 沒有附帶版本號碼,因此弄清這一點顯得尤為重要。
Ntldr 是一個啟動 NTDetect.com 的實模式(16 位)應用程式,它執行基本的裝置檢測然後啟動核心 ntoskrnl.exe(這可能是多個檔案中的其中一個檔案 — 始終重新命名為 ntoskrnl.exe)。核心是 Windows 引導過程中的關鍵組件。
此引導過程摘要顯得有點簡單,我省略了 Win32 的整個初始化過程,因為它與本討論並不相關。如果希望瞭解有關此引導過程的更多資訊,建議您閱讀 Mark Russinovich 和 David Solomon 合著的《Windows Internals, Fourth Edition》(Windows 核心,第四版)(Microsoft Press,2004)。
另外,還要注意,從光碟片引導時,Windows Setup 和 Windows PE 啟動並執行是 setupldr.bin 而不是 ntldr。此檔案實際包含的引導代碼略有不同,目的是為了使其可以從光碟片引導(ntldr 則不能)。這就是為什麼引導 Windows PE 1.x 時,必須將 setupldr.bin 重新命名為 ntldr 並放到磁碟上的原因所在。也是為什麼該檔案無法隨後載入 boot.ini 檔案的原因(因為 setupldr.bin 僅用於光碟片引導,因此 boot.ini 並非是必需的檔案)。

Windows Vista 及更高版本
Windows Vista 更改了此過程的許多方面。Windows Server 2008 對其做了進一步的更改,包括允許 IA32(支援 32 位)從 EFI 引導(到目前為止,除了基於 Itanium 的系統以外均無法實現此引導)。對於基於 BIOS 的系統,引導過程的初始步驟大部分都沒變。關鍵區別在於 BOOTMGR 是引導載入程式,初始化後執行以下步驟。
它在引導目錄中尋找 BCD 檔案(實際上是其自身的註冊表登錄區)。BCD 包含要引導的引導條目(包括預設條目)。請參見圖 1 瞭解映像類型(可執行檔類型),參見圖 2 瞭解要啟動的特定應用程式類型。ntldr 可以引用一個(或多個)此類條目。但其中僅有一個條目可實際引用眾所周知的用於載入 ntldr 的 GUID(請參見圖 3 中的第五行)。bootmgr 隨後決定接下來要載入的條目,具體取決於是否正在引導系統、系統是否正在休眠或者是否要引導到 ntldr 或其他引導管理器(在這種情況下它會指向另一個開機磁區並啟動該載入程式)。在使用非 Windows 作業系統進行雙引導時,這種情況最常見。可在以下網站找到更多資訊:microsoft.com/whdc/system/platform/firmware/bcd.mspx。
Figure 3 標準應用程式對象

說明 BCDEdit ID GUID
Windows 引導管理器 {bootmgr} 9dea862c-5cdd-4e70-acc1-f32b344d4795
韌體引導管理器 {fwbootmgr} a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba
Windows 記憶體測試程式 {memdiag} b2721d73-1db4-4c62-bf78-c548a880142d
Windows 恢複應用程式 無別名 147aa509-0358-4473-b83b-d950dda00615
傳統 Windows 載入程式 {ntldr} 466f5a88-0af2-4f76-9038-095b170dc21c
當前引導條目 {current} fa926493-6f1c-4193-a414-58f0b2456d1e
預設引導條目 {default} 無預定義的 GUID

Figure 2 應用程式類型

說明 值 說明
韌體引導管理器 0x1 僅適用於 EFI 系統。
Windows 引導管理器 0x2 控制引導流。在雙引導系統中,向使用者顯示引導選擇菜單。
Windows 引導載入程式 0x3 載入特定的 Windows 版本或配置。
Windows 恢複應用程式 0x4 當電腦從休眠狀態恢複時將 Windows 還原到其運行狀態。
Windows 記憶體測試程式 0x5 記憶體診斷應用程式。
Ntldr 0x6 僅適用於 PC/AT BIOS 系統。載入 Windows Vista 之前的 Windows 版本。
開機磁區 0x8 16 位實模式應用程式。僅適用於 PC/AT BIOS 系統。可用於重新啟動引導過程並載入非 Windows 作業系統。

Figure 1 映像類型

說明 值
韌體應用程式 0x1
引導應用程式 0x2
基於 Ntldr 的載入程式對象 0x3
實模式應用程式 0x4

您會注意到,改進後的 Windows Vista 引導基礎架構與以前的版本相比更具條理性 — 除 bootmgr 外,所有引導代碼均位於根層級 \boot 目錄中,並且在 BCD 指定後,還可以轉到 Windows 特定的二進位檔案中。

引導 Windows XP 和 Windows PE 2.0
現在讓我們來瞭解一下使用 Windows Vista 引導管理器,如何能夠以 Windows PE 為中介,在繼續引導 Windows XP 或 Windows 早期版本的同時,將 Windows PE 2.0 添加到整合的恢複工具組中。
當然,還要向引導過程中添加另一個 Microsoft 事先設計好的步驟。由於新的 bootmgr 基礎架構需要向後相容現有的 ntldr 和其他第三方引導管理器,因此專門構建了 bootmgr 來支援此類解決方案。
因此,在研究了 Windows 的啟動方式以及新 BCD 的工作方式後,我們如何才能將二者聯絡起來並將 Windows PE 2.0 應用到現有的 Windows XP 安裝呢?有兩種方法可記下 Windows Vista 開機磁區(用來告知系統啟動 bootmgr 的引導代碼)。其中一種方法是使用 diskpart,通過 Windows PE 2.0 建立並格式化一個新分區。但在這裡不能選擇此方法,因為您已安裝了 Windows XP 並且不希望損壞或移動它。因此改為使用以下過程:
確保 Windows PE 2.0 引導光碟片上有 bootsect.exe 和 bcdedit.exe 的副本(都可以在 Windows Vista 安裝 DVD 上找到)。
將 Windows XP 系統引導到 Windows PE 2.0 光碟片。
引導後,運行以下命令:
複製代碼
bootsect.exe /NT60 ALL

這會將開機磁區設定為 Windows Vista 相容的開機磁區,它知道如何啟動 bootmgr。
4. 將引導管理器複製到硬碟:
複製代碼
xcopy BOOTMGR C:\BOOTMGR /I

5. 將 boot.SDI 檔案複製到硬碟上的 \BOOT 目錄中。必須在引導前製作一個副本,因為 Windows PE 運行時會鎖定此檔案,從而無法複製:
複製代碼
xcopy BOOT.SDI C:\BOOT\

相應地更正源路徑。
6. 將 boot.WIM 複製到硬碟。與 SDI 類似,應準備一份輔助副本,否則您將無法複製正在啟動並執行檔案:
複製代碼
xcopy BOOT.WIM C:\BOOT\BOOT.WIM

相應地更正源路徑。
7. 現在建立新的 BCD 儲存:
複製代碼
bcdedit /createstore

8. 接下來建立 BCD 條目以載入 Windows PE:
複製代碼
bcdedit /create {ramdiskoptions} /d
"Boot Windows PE"
bcdedit /set {ramdiskoptions}
ramdisksdidevice partition=c:
bcdedit /set {ramdiskoptions}
ramdisksdipath \boot\boot.sdi
bcdedit /create /d "Windows PE" /
application
OSLOADER

9. 最後一行將返回 GUID。使用返回的實際 GUID 替換 {YOURGUID}。它們是 RAMDisk 的條目,用來從硬碟引導 Windows PE( 4 所示)。
Figure 4 RAMDisk 的條目,從硬碟引導 Windows PE
複製代碼
bcdedit /set {YOURGUID} device ramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} path \windows\system32\winload.exe
bcdedit /{YOURGUID} osdeviceramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} systemroot \windows
bcdedit /set{YOURGUID} winpe yes
bcdedit /set {YOURGUID} detecthal yes

10. 現在,建立 bootmgr 條目以啟動引導管理器:
複製代碼
bcdedit /create {bootmgr} /d
"Boot Manager"
bcdedit /set {bootmgr} device boot

11. 最後,為現有的 Windows 安裝設定 BCD 條目(將 Windows XP 中的顯示文本更改為您希望在引導管理器引導菜單中顯示的任意文本)。最後的命令還會將它設定為引導菜單中的第一個(預設)條目:
複製代碼
bcdedit /create {ntldr} /d "Windows XP"
bcdedit /set {ntldr} device partition=C:
bcdedit /set {ntldr} path \ntldr
bcdedit /displayorder {ntldr} /addfirst

12. 現在,通過選擇適當的引導菜單條目,即可重新啟動系統並使其啟動先前安裝的 Windows 或 Windows PE 2.0。圖 5 顯示了 bcdedit /enum all 的樣本輸出。此命令將在向 BCD 中添加完條目後列出所有條目(來自 Windows PE 1.6)。

樣本輸入 (單擊該映像獲得較大視圖)
我一直在使用一個指令碼來自動執行此任務。目前它只能將引導檔案複製到硬碟並設定 BCD 條目。還無法在運行 Windows 的同時將開機磁區設定為新的 Windows Server 2008 的值 — 必須在 Windows PE 環境下離線執行。您可在《TechNet 雜誌》網站的代碼下載部分找到此指令碼,網址為 technetmagazine.com。要運行該指令碼,運行 VBScript 的目錄下必須具有下列項:
BCDEdit
BOOTMGR
\BOOT\ 目錄(來自 Windows Vista 或 Windows PE 2.0 媒體)
\SOURCES\ 目錄,包含有效、可引導的 Windows PE 2.0 BOOT.WIM 檔案
它會建立 BCD 並複製相應的引導檔案。引導到 Windows PE 並運行 bootsect 後,即可進行雙引導。

撤消雙引導
撤消雙引導要比實現雙引導容易得多。只需運行以下命令將開機磁區還原到之前的 Windows Vista 開機磁區即可:
複製代碼
bootsect.exe /NT52 ALL

還原完畢後,即可刪除 bootmgr 和 \boot 目錄。下次重新啟動時,開機磁區將改為強制啟動 ntldr,而從引導流中徹底移除 Windows PE 2.0 和所有 Windows Vista 引導二進位檔案。

http://technet.microsoft.com/zh-cn/magazine/cc194422.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.