Windows XP 與Win7 VHD雙啟動
一、目的:在裝有Windows XP的硬盤上部署Windows 7 VHD鏡像,修改啟動信息,最終實現(xiàn) Windows XP與Windows 7雙系統(tǒng)啟動。這樣做的好處顯而易見,無需安裝系統(tǒng),適合于快速批量部署Win7,用于對Win7的測試和試用
二、環(huán)境
1、可啟動的VHD文件。建議使用vpc在實際要部署win7的物理機上制作,并安裝好驅(qū)動(VHD成功啟動后,在Win7 VHD下安裝驅(qū)動)。將制作好的vhd文件Win7.vhd放到物理機的D盤,C盤為Windows XP系統(tǒng)。
2、將win7安裝盤中的boot文件夾、sources下的boot.wim、bootmgr拷貝到文件服務(wù)器上,并共享
使用命令拷貝
xcopy k:\boot\*.* e:\share\boot /s /r
copy k:\bootmgr e:\ share\
Copy k:\sources\boot.wim e:\sources
K為Win7安裝光盤的盤符 E為文件共享服務(wù)器的盤符
3、將BCD備份文件放到文件服務(wù)器上,共享。(如何制作,后面會講到)這個BCD備份數(shù)據(jù)是在已經(jīng)配置好雙啟動的機器上備份出來的,當(dāng)配置下一個機器時可以直接從備份恢復(fù)BCD數(shù)據(jù),并加以修改。
三、原理
1、XP和win7的引導(dǎo)方式有著根本性的不同。
在XP時代系統(tǒng)通過NTLODER讀取boot.ini的數(shù)據(jù)進行引導(dǎo),win7則使用bootmgr即啟動管理器,去讀取BCD中的數(shù)據(jù),從而引導(dǎo)系統(tǒng)。BCD:Boot Configure Data 引導(dǎo)配置數(shù)據(jù),它的作用就是用于存放當(dāng)前機器上的操作系統(tǒng)信息,安裝了多少操作系統(tǒng),每個操作系統(tǒng)所在分區(qū)等等。它相當(dāng)于XP的boot.ini
2、單純修改xp下的boot.ini并不能引導(dǎo)win7.需要使用Bootmgr.exe來引導(dǎo)
3、引導(dǎo)win7的幾個必要文件需要放到當(dāng)前系統(tǒng)分區(qū),即XP的所在的系統(tǒng)分區(qū)C盤。
4、對于修改啟動配置信息,可以使用系統(tǒng)安裝過程中的修復(fù)計算機工具中的系統(tǒng)恢復(fù)工具,或者使用bootrec.exe工具修復(fù)系統(tǒng)引導(dǎo)文件,再或者直接用bcdedit工具導(dǎo)入BCD備份數(shù)據(jù),并加以修改。以上三種方式均可以實現(xiàn)正確引導(dǎo)雙系統(tǒng),第一種圖形界面的適用個人用戶,第三種可以實現(xiàn)腳本化的則適用于企業(yè)的批量部署。
四、過程
1、將物理機引導(dǎo)到winPE,可以用安裝盤、也可以用WDS,我用的是后者
2、在選擇語言處,按shift+F10,調(diào)出命令行,當(dāng)前命令行位置是X:\sources
3、連接文件服務(wù)器,拷貝所需文件(也可以在xp系統(tǒng)下拷貝):
net use z: \\server\share
輸入用戶名和密碼,將服務(wù)器上的文件映射到本地Z盤
share下有三個文件夾一個文件
bootmgr:啟動管理器,相當(dāng)于XP/2003時期的Ntldr
文件夾boot:存放安裝光盤中的boot文件
文件夾sources:存放本地WinPE啟動文件boot.wim
文件夾bcdback:存放BCD備份數(shù)據(jù)BCD.back
md c:\boot
md c:\sources
z:
copy z:\sources\boot.wim c:\sources (只是第一種方式需要boot.wim文件)
xcopy bootmgr c:\ /s /y /r
xcopy z:\boot\*.* c:\boot
copy z:\bcdback\BCD.back c:\boot
A、修復(fù)啟動項:第一種方式,圖形界面修復(fù)
C:
Cd boot
Bootsect.exe /nt60 sys (更新系統(tǒng)分區(qū)上的主啟動代碼,由NTLDR切換到BOOTMGR)
重啟電腦,系統(tǒng)自動從本地的boot.wim啟動,在選擇語言和鍵盤的地方停止,按shift+F10執(zhí)行以下命令
Diskpart
List disk
Select disk 0 (winXP所在硬盤)
Select vdisk file=d:\win7.vhd
Attach vdisk
List volume (查看被掛載的vhd的盤符,本例中為H)
回到圖形界面,選擇時區(qū)、鍵盤,點擊下一步
不選擇安裝系統(tǒng),選擇左下角的“修復(fù)計算機”,自動進入系統(tǒng)修復(fù)程序
系統(tǒng)會自動查找磁盤中所安裝的系統(tǒng),并添加到啟動項。
重啟電腦,第一種方式修復(fù)結(jié)束
(此外:通過另一個圖形界面工具,也可修復(fù),文件在
X:\sources\recovery\RecEnv.exe
使用這個工具就不需要拷貝boot.wim,不需要重啟系統(tǒng)進入本地的WinPE了)
4、附加VHD盤
Diskpart
List disk
Select disk 0 (winXP所在硬盤)
Select vdisk file=d:\win7.vhd
Attach vdisk
List volume (查看被掛載的vhd盤符,本例中為H)
Exit (退出diskpart)
B、修復(fù)啟動項——第二種方式,bootrec工具
Bootrec /rebuildbcd (掃描磁盤中所安裝的系統(tǒng),并將啟動項添加到BCD中)
系統(tǒng)會掃描到H盤存在一個系統(tǒng),即VHD的Win7系統(tǒng),問是否保存到BCD,鍵盤上敲入Y,回車保存。
Bcdedit 查看是否存在添加啟動項
最后備份BCD文件,這就是第三種方式中的備份文件來源
Bcdedit /export c:\boot\BCD.back (備份BCD數(shù)據(jù))
Copy c:\boot\BCD.back z:\bcdback (將備份放到文件服務(wù)器)
重啟電腦,第二種方式修復(fù)結(jié)束
C、修復(fù)啟動項——第三種方式,導(dǎo)入BCD備份文件
Bootrec /fixmbr (可以刪除 MBR 中的非標(biāo)準(zhǔn)代碼)
Bootrec /fixboot (修改xp時代的NTLDR啟動為Bootmgr啟動)
Bcdedit /import c:\boot\BCD.back(從備份文件恢復(fù)引導(dǎo)信息數(shù)據(jù)BCD)
導(dǎo)入BCD數(shù)據(jù)之后,device、osdevice信息顯示為未知,需要重新修改
Bcdedit /set {default} device vhd=[d:]\win7.vhd
Bcdedit /set {default} osdevice vhd=[d:]\win7.vhd
Bcdedit 查看啟動信息是否正確,正確的顯示如下:
Windows Boot Manager
--------------------
identifier {bootmgr}
device unknown
path \bootmgr
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
displayorder {default}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {default}
device unknown
path \Windows\system32\winload.exe
description Windows 7 Enterprise
locale zh-CN
osdevice unknown
systemroot \Windows
重啟電腦,第三種方式修復(fù)結(jié)束
5、恢復(fù)XP系統(tǒng)(在WinPE環(huán)境下,也可以在啟動win7后,在win7環(huán)境下)
Bcdedit /create {ntldr} /d “windows XP”
Bcdedit /set {ntldr} device partition=c: (選擇xp系統(tǒng)所在盤)
bcdedit /set {ntldr} path \ntldr
Bcdedit /displayorder {ntldr} –addlast
Bcdedit /set {ntldr} description “Windows XP”
Bcdedit
至此,Windows XP和win7 VHD雙啟動全部完成
五、其他說明
1、查看BCD中的備份信息
bcdedit /store z:\bcdback\BCD.back
2、清除windows XP下的 BCD啟動信息
Bcdedit /export c:\boot\bcd_back01 (備份BCD數(shù)據(jù))
Attrib c:\boot\bcd –s –h –r (去掉隱藏只讀)
Ren c:\boot\bcd bcd.old (改名)
3、第二種修復(fù)方式中,理論上可以做到完全腳本化
將Bootrec /rebuildbcd改成
Echo Y|Bootrec /rebuildbcd 即可以在提示輸入YES|NO|ALL的時候,自動輸入Y,不需要人工敲入Y
但是在這個命令下卻不能用,不知何故