Cover 在上一篇文章當中我們介紹了虛擬磁碟格式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」是大量的複製及解壓縮動作,從光碟執行費力又耗時。

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系統,並指定開機項目名稱,完成後會產生一組新的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這個差異鏈第二層的資料上移一層「融合」,方便清掃旗下分支過多的關係鍊。以後要「回溯系統」,就不必再靠華而不實的第三方軟體了。

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

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

大家的回應

  • 比克大魔王
    5人給推
    1.  比克大魔王 (發表於 2010年11月14日 18:18) 引用回覆
    「T客邦」真是了不起的網站,假日還這麼努力充實文章!

    相較於無論大小假日(甚至是颱風天)就不工作的「ZDNet」(同樣是走部落格資訊整合型態的網站),還是台灣本土的企業水準較高啊!

    其實「T客邦」內容深度也高於「ZDNet」那些國外專欄作者。ZDNet 過於「部落客心態」,很多文章稱不上報導,只能說是表達自己的態度罷了,於是或褒或貶時立場過於明顯,看那種文章比較像聽埋怨的人在批評、以及對自己的品牌喜好高度評價,往往五篇文章有三篇看完是在浪費時間。

    有「T客邦」真好,並相信有一天換台灣網站打向國際市場! <( ̄︶ ̄)>
  • 小Peggy
    2.  小Peggy (發表於 2010年11月14日 19:02) 引用回覆
    同意樓上 <( ̄︶ ̄)>

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


    同意樓上的樓上。好吧,那我給你 2 個讚。(≧▽≦)這篇文章講的真是好,有時間再來實際操練一番吧。
  • 狄亞哥
    4.  狄亞哥 (發表於 2010年11月14日 23:23) 引用回覆
    (≧▽≦)
    口米 TWO !!
  • Avatar
    5.  ToBe (發表於 2010年11月17日 20:02) 引用回覆
    這篇真的讚
    T客邦都已經這樣打了
    反觀最近的PCADV退步許多
    再加油點啊,覺得都沒想看的內容
  • Avatar
    6.  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

發表回應

登入會員可免填名稱、Email資料)