把 Windows 7 灌進 VHD 虛擬磁碟(下)

把 Windows 7 灌進 VHD 虛擬磁碟(下)

在上一篇文章當中我們介紹了虛擬磁碟格式VHD的由來,它的大致用途及三種主要存檔型態,並且示範在Windows 7內建的磁碟管理工具如何建立與掛載VHD,接下來就是實戰在上面安裝Windows 7系統碟了,這個VHD系統碟就像實體磁碟一樣,是可以原生開機的,主要可歸納成兩種類型:

一、用VHD安裝Windows 7

這是最正規、也最為萬無一失的安裝方法,有官方公式可循,作法就是利用安裝佈署工具(WAIK)把原版安裝光碟裡面的佈署檔(install.wim)佈署到VHD磁碟後,重新開機使其自我安裝,安裝完成就是乾淨的Windows 7系統。 需要特別說明的是,以下教學將以命令列模式來示範,VHD磁碟的建立也可直接以前述磁碟管理工具來達成,兩者並無相異之處。

Step 1 建立VHD磁碟

請在有管理員權限的命令列模式鍵入以下指令:

diskpart
create vdisk file=c:\windows7.vhd maximum=25600 type=fixed
select vdisk file=c:\windows7.vhd
attach vdisk
create partition primary
assign letter=r
format quick label=vhd
exit

以上指令可以直接取代磁碟工具程式的操作,等於完成了「建立一個VHD檔,掛載後並格式化」的動作。

Step 2 載入Windows 7安裝檔

這部份主要是利用imagex工具,把原版Windows 7光碟裡的安裝檔佈署到虛擬磁碟, 前提是你要先有imagex這個程式。此工具可直接從網路獨立取得,要不然它會包在龐大、高達1.7GB的「Windows Automated Installation Kit」(WAIK)套件裡面,可直接免費由微軟官網下載

這裡的正規作法是乖乖下載WAIK for Windows 7並安裝,鍵入以下命令:

cd /d "c:\program files\\tools\\" imagex /apply install.wim 1 r:\

如果是x86系統,就到「C:\Program files\WindowsAIK\Tools\x86」資料夾裡執行imagex這個程式,並指定要「/apply」的來源是「install.wim」原版光碟映像,還原的目的是虛擬磁碟「r」。install.wim位在安裝光碟根目錄下的「sources」目錄內,你最好先把它拷貝到硬碟,因為「/apply」是大量的複製及解壓縮動作,從光碟執行費力又耗時。

把 Windows 7 灌進 VHD 虛擬磁碟(下)

Step 3 修改開機引導選項

接下來, 我們就要用這個虛擬磁碟開機並安裝Windows 7。假如已經有一個Windows 7開機功能表,可透過BCDedit命令來修改及新增開機項目:

bcdedit /copy {default} /d “Win7_VHD”
bcdedit /set {guid} device file=[C:]\windows7.vhd
bcdedit /set {guid} osdevice file=[C:]\windows7.vhd

把 Windows 7 灌進 VHD 虛擬磁碟(下)

第一行的意思,是代表把Windows 7原本的開機設置複製一份給VHD系統,並指定開機項目名稱,完成後會產生一組新的GUID,複製這個GUID,填入第二、三行的GUID欄位並執行即可,重新開機後便是現成的Windows 7系統。

二、用備份檔掛載成開機磁碟

眼尖的讀者一定早就已經發現,Windows 7的備份檔案其實就是一個VHD檔,直接將其掛載成虛擬磁碟後、設置好開機參數就是現成可用的Windows 7系統,因為是運行於同樣的硬體之上,所以不必重新安裝。

至於利用現成備份檔的掛載方式,直接參考前述的Step1及Step3即可,等於是省去了佈署及安裝的步驟。完成後可能會出現幾次錯誤,重開機數次便可解決。

超精簡VHD備份還原

事實上,不管是利用VHD原生安裝或備份掛載的佈署方式,都不會比「在實體硬碟上安裝Windows 7」快多少,因為VHD原生安裝需要花時間佈署、第一次備份Windows 7系統也要花上不少時間。微軟官方所謂「VHD可以加快系統佈署」的說法,主要是針對有大量主機需要安裝Windows 7時才能倍顯成效,對於通常只有一台主機的個人玩家端而言,善用「差異備份」才讓VHD發揮所長。

本尊照顧好,分身隨你玩

所謂的「差異備份」,實質上並沒有進行任何的備份行為,充其量就是以安裝了Windows 7的VHD碟為基準,再建立一個「差異磁碟」而已。這麼做有什麼好處?你不必真的幫原系統複製一套完整的備份,就可以直接使用它的「分身」,玩壞了不必擔心,對原系統不會造成任何影響,重點是還可以把分身「合體」回原系統內,一舉數得。

但有得必有失,差異備份也有它的缺點,就是「本尊」必須原封不動,備份完後只能更動分身資料,意味著你不能再進入原系統,或者以原系統開機了。因為只要本尊有任何風吹草動,其下的差異備份關係鍊就會整個受影響甚至作廢,是要特別留意之處。差異備份如何建立?得從命令列模式鍵入以下指令:

create vdisk file=c:\windows7_diff.vhd parent=c:\windows7.vhd

其實最主要的差異,就是在參數後面加上一個parent參考檔即可。上面這一行的意義即為:在C槽下建立一個名為windows7_diff的差異VHD,以C槽下的windows7.vhd為參考檔。另外與原生VHD不同的是開機資訊的設置,形式如下:

bcdedit /copy {default} /d “Win7_VHD”
bcdedit /set {guid} device vhd=[locate]\windows7.vhd
bcdedit /set {guid} osdevice vhd=[locate]\windows7.vhd

紅字代表相異之處,差異VHD一定要以「vhd」參數來指定檔案,而原本的「C:」得改成「locate」這個固定字串才行。完成後一樣重新開機,就能進入以差異備份建立的VHD系統。

玩多P也不佔空間

如果你以差異VHD系統開機,並進入「我的電腦」觀看,會發現系統磁碟區的容量與原生VHD一模一樣。事實上,在還沒寫入這個映像檔之前,差異VHD所佔用的實際磁碟容量非常小,所以你可以一次建立許多個差異VHD,只要別達到「255」這個系統上限即可。

值得一提的是,差異VHD本身也可以當作原生VHD使用,其下還可以如老鼠會般延伸出多層的參考鍊,也就是你可以用差異VHD為參考檔再建立新的差異VHD,參數語法也都一樣。

玩膩了,就合體吧

如果要讓差異VHD的內容套用回原生VHD檔,需要注意的就是「層數」的差異,如下例:

select vdisk file=c:\windows7_diff.vhd depth=2 merge vdisk depth=1

上面敘述,是表示把windows7_diff.vhd這個差異鏈第二層的資料上移一層「融合」,方便清掃旗下分支過多的關係鍊。以後要「回溯系統」,就不必再靠華而不實的第三方軟體了。

把 Windows 7 灌進 VHD 虛擬磁碟(下)

▲多層次的差異備份鍊,除了最底層的差異VHD,其餘全部都得設為唯讀。

把 Windows 7 灌進 VHD 虛擬磁碟(下)

▲利用單一參考檔建立多個平行差異VHD的情況,可安心試用不同版本的軟體,砍掉重練方便多了。

T小編
作者

使用 Facebook 留言
小白
2.  小白 (發表於 2010年11月14日 23:15)
※ 引述《小Peggy》的留言:
> 同意樓上 <( ̄︶ ̄)>
>
> 給你一個讚 (≧▽≦)


同意樓上的樓上。好吧,那我給你 2 個讚。(≧▽≦)這篇文章講的真是好,有時間再來實際操練一番吧。
E0a67554aacda12b8b22a6d1de8ae15d?size=48&default=wavatar
4.  ToBe (發表於 2010年11月17日 20:02)
這篇真的讚
T客邦都已經這樣打了
反觀最近的PCADV退步許多
再加油點啊,覺得都沒想看的內容
D715745d7e3fcf08ee5f7102247bf8ed?size=48&default=wavatar
5.  Ben (發表於 2011年11月30日 14:00)
hi,
請教是否有法子將下列所取得的guid,自動代入嗎???謝謝
bcdedit /copy {default} /d “Win7_VHD”
bcdedit /set {%guid%} device vhd=[locate]\windows7.vhd
bcdedit /set {%guid%} osdevice vhd=[locate]\windows7.vhd

6e45dcc959627d17f1db52d73a6c2827?size=48&default=wavatar
6.  Macro (發表於 2012年11月11日 18:07)
╮(╯_╰)╭ 不好意思 請教一下:我照你上一篇的方法成功建立了VHD,可是為什麼我電腦重開後、打開檔案總管卻沒有看到磁碟,是不是還需要設定什麼才可自動掛載VHD磁碟?

麻煩你回覆指教一下 謝謝您

PS:我是想把 Win8 灌進 VHD 玩雙系統
5891d8ec190bcb04b0195d65a6d0d0e9?size=48&default=wavatar
7.  James (發表於 2012年12月08日 18:08)
請問一下:如果vhd容量設定太小要怎麼調整??
也麻煩回覆一下吧!! 感謝<( ̄︶ ̄)>
pcnick
1人給推

8.  pcnick (發表於 2013年2月21日 14:06)
這問題研究了一陣子總算有答案了...
個人人因為VHD設太小,一直遇到容量不足的問題~

以系統管理員模式進入 CMD,
輸入 powershell 開啟 PowerShell,
輸入

Resize-VHD -path <要修改的 VHD 路徑> -SizeByte <要變更的大小,可用MB、GB、TB>

過程中 VHD 不能為使用中,建議複製一份來修改,完成後
exit 離開 PowerShell,進入 diskpart,輸入

select vdisk file=<要修改的 VHD 路徑>
attach vdisk
select partition 1
extend
detach vdisk
exit

修改一下開機 VHD 指定位置就 OK,
第一次開機會檢查磁碟狀況會比較久一點,要有點耐心...<( ̄︶ ̄)>
龍之絕
10.  龍之絕 (發表於 2014年10月29日 09:38)
請教,有一個硬碟250G,假如分割成C碟120G剩下的給D碟名稱DATA,C碟安裝WIN8 X64系統,設一個VHD的虛擬Fixed碟為F,使用imagex.exe /apply e:\sources\install.wim 1 f:\指令,BCDEDIT /copy {current} /D "Windows 8-1 VHD"
BCDEDIT /set {b9b6cb92-4900-11e2-a8af-c520e488c4ad} device vhd=[C:]\win8-1.vhd
BCDEDIT /set {b9b6cb92-4900-11e2-a8af-c520e488c4ad} osdevice vhd=[C:]\win8-1.vhd
BCDEDIT /set {b9b6cb92-4900-11e2-a8af-c520e488c4ad} detecthal on
BCDEDIT /timeout 10

diskpart
select vdisk file="c:\win8-1.vhd"
detach vdisk
exit
重開機進入Windows 8-1 VHD開檔案總管會出現虛擬磁碟在C碟原安裝碟在D碟,我如何在進入虛擬磁碟時只看到C碟的虛擬磁碟或者C碟跟D碟合併,跟原來設的D碟為DATA呢??

HAO
11.  HAO (發表於 2015年9月11日 20:44)
C:\WINDOWS\system32>BCDEDIT /set {af5308b2-013a-11e5-824e-6c71d9841204} osdevice
file=[D:]\Windows 7.vhd
The element data type specified is not recognized, or does not apply to the
specified entry.
Run "bcdedit /?" for command line assistance.
Element not found.
為什麼???????????????????
發表回應
謹慎發言,尊重彼此。按此展開留言規則