之前的文章提到了Windows 7對VHD檔案的內建支援,從此以後VHD檔案的地位得到了提升:-) 它可以被作業系統認為是一塊物理的硬碟進行管理和讀寫。
我們知道,現在啟動系統的方式多種多樣,可以從光碟片、硬碟、磁碟片、隨身碟、網路等等不同的渠道來完成。既然VHD可以被Windows 7認為是一塊獨立的物理硬碟,那麼我們是否可以從VHD啟動作業系統呢?
答案是肯定的。Windows 7的引導程式也同樣包含了對VHD檔案的讀寫驅動,因此在裝有Windows 7引導程式(Boot Loader)的電腦上,可以通過配置BCDEdit的方式,把VHD上的作業系統加入到啟動時顯示的多系統選擇菜單。
下面我們來看一下具體的步驟:
注意,我們不能在實體電腦上通過光碟片把系統安裝到VHD檔案。首先我們需要一個已經安裝了作業系統的VHD檔案,這可以通過幾種方式來完成:
1. 在Virtual PC或者Hyper-V中完成安裝,並且運行sysprep,然後關機,這是的VHD檔案可以被Windows 7的Boot Loader啟動。
2. 使用ImageX工具,把之前備份的作業系統鏡像檔案(ImageX格式)恢複到VHD中。
這兩種方法的具體步驟,在Aviraj Ajgekar的部落格中有詳細的描述。
Adding the VHD Entry in Boot Menu and then Boot from VHD
當成功的建立VHD檔案並且在VHD系統之上部署了作業系統之後,我們需要使用Windows 7的BCDEdit工具來配置系統的多啟動菜單:
C:\>bcdedit /copy {current} /d "My New VHD Description"
Note: This will Return the GUID of the Loader Object that you will use to replace <guid> below
C:\>bcdedit /set <guid> device vhd=[driveletter:]\<directory>\<vhd filename>
C:\>bcdedit /set <guid> osdevice vhd=[driverletter:]\<directory>\<vhd filename>
Note: vhd=[driveletter:]\<directory>\<vhd filename> is the new syntax supported for BCDEdit.exe to locate VHD File and Bootmgr will locate the partition containing the VHD File to boot from.
C:\>bcdedit /set <guid> detecthal on
Note:
Following is the attached screenshot of the my machine. In this case I have Windows 7 as the default OS and I have added the VHD File in the Boot Entry.
Well just after that run the following command to test if your boot entry is successfully created using C:\>bcdedit /v
Similarly, if you want to add multiple VHDs into Boot entry you can use the following lines to the command prompt
C:\>bcdedit /copy {current} /d "New VHD Description"
C:\>bcdedit /set <guid> device vhd=[driveletter:]\<directory>\<vhd filename>
C:\>bcdedit /set <guid> osdevice vhd=[driverletter:]\<directory>\<vhd filename>
C:\>bcdedit /set <guid> detecthal on
Note: detecthal is used to force windows to auto detect the Hardware Abstraction Layer.
If you want to delete any existing VHD entry from the Boot Menu you can always use the command C:\>bcdedit /delete <guid> /cleanup This deletes the specified operating system entry from the store and removes the entry from the display order.
Well, we are ready to Boot from VHD. Once you restart the computer you will see additional entry in Boot Menu along with the default Windows 7 or Windows Server 7 OS.
Here is the screenshot from newly booted Windows Server 2008 R2 Beta from VHD. I have installed Desktop Experience Pack and enabled Aero Glass.
看到這裡,大家不免有一些問題:從VHD啟動之後的系統,到底是運行在虛擬機器上?還是直接運行在物理硬體之上?從VHD啟動,還需要哪些必備的條件?是否會有效能的損失?下面我來回答這些問題:
1. Windows 7的引導程式和Windows 7本身都包含了對VHD檔案的讀寫驅動程式,因此我們可以在啟動電腦的時候,訪問VHD並且從其上啟動;我們也可以在Windows 7中直接建立、載入和卸載VHD檔案。這些都是VHD讀寫驅動的功勞,跟Virtual PC或者Hyper-V沒有直接的關係。因此Windows 7不需要安裝任何虛擬化軟體。
2. 從VHD啟動之後,電腦的作業系統直接存取硬體,不是以虛擬化的方式運行。
3. 這裡面唯一的區別,就是對檔案系統讀寫訪問的時候,需要經過額外的一層VHD讀寫驅動的解析,這裡面有一些微量的I/O效能開銷,但是跟虛擬化的情況相比,效能基本上接近了真機。我查了一些測試資料,有一組直接讀取硬碟和讀寫VHD的比較,效能差別微乎其微。如:
4. 因為對VHD的支援僅包含在Windows 7中,因此我們不能在Windows 7中建立VHD後通過光碟片給VHD安裝任何作業系統。
這些僅僅是對這個功能的一些簡單介紹和概括,相信大家在今後的應用中會有更多的體會和收穫。
更多資料請看 http://book.51cto.com/art/201001/176973.htm