微軟在2005年公開了VHD格式檔案的全部細節,可以從微軟的TechNet網站下載Virtual Hard Disk Image Format Specification。
基本介紹
- 中文名:vhd模式
- vhd實質:虛擬的硬碟
- 分類:2.5寸、3.5寸等
- 作業系統:Windows 7
簡介,實現方式,VHD套用,方法一:,方法二:,方法三:,方法四:,啟動電腦,注意事項,
簡介
絕大多數人最初接觸VHD格式的檔案,是在使用Virtual PC或者Virtual Server時,VHD是以檔案形式存在的虛擬機的磁碟。微軟在2005年公開了VHD格式檔案的全部細節,可以從微軟的TechNet網站下載Virtual Hard Disk Image Format Specification。這說明了微軟不僅僅要把VHD套用在虛擬機領域,更希望VHD能夠成為一種新的磁碟格式和載體在業界得到更多的支持。
讓我們拋開虛擬機,把目光集中在VHD檔案本身。VHD是一塊虛擬的硬碟,不同於傳統硬碟的碟片、磁頭和磁軌,VHD硬碟的載體是檔案系統上的一個VHD檔案。如果大家仔細閱讀VHD檔案的技術標準,就會發現標準中定義了很多Cylinder、Heads和Sectors等硬碟特有的術語,來模擬針對硬碟的I/O操作。既然VHD是一塊硬碟,那么就可以跟物理硬碟一樣,進行分區、格式化、讀寫等操作。
我們這可以這樣認為,VHD也是硬碟的一種,就像2.5寸、3.5寸、SCSI、SATA、IDE等不同規格的硬碟一樣,VHD是在一個檔案中的硬碟。
實現方式
在討論具體的技術實現方式之前,我們首先需要理解作業系統對磁碟和檔案的管理。作業系統有磁碟系統和檔案系統兩部分,分別處理對硬碟的I/O讀寫指令(磁碟系統),和管理硬碟之上的分區、數據和檔案格式(檔案系統)。VHD是存在於檔案之上的磁碟,可想而知它的技術實現必須橫跨磁碟系統和檔案系統這兩部分。如果您對作業系統中這一部分不是非常的了解,可以聽一聽微軟網站上的Windows存儲技術系列Webcast。
簡單的說,要把VHD檔案當作硬碟一樣讀寫,必須有相應的驅動程式。在Virtual PC和Virtual Server中,微軟就是通過在虛擬機種加入VHD的驅動程式,使得虛擬機可以從VHD啟動並進行後續的操作。
在Windows 7中,微軟把VHD的驅動內置進了作業系統,也包括在了Windows 7的引導程式中。這也就是說,我們可在使用Windows 7的時候,直接訪問VHD檔案中的內容(把VHD的硬碟映射到一個盤符,後面會詳細描述),也可以通過Windows 7的引導程式,啟動位於VHD磁碟上的另一個作業系統。理解VHD驅動的工作細節,需要比較多的Windows底層知識,下圖是一個比較簡單和抽象的結構,可以發現,VHD的驅動是跟磁碟驅動和檔案系統緊密結合的。
VHD套用
既然在Windows 7中可以對VHD直接讀寫,讓我們來看看這個強大的功能到底能有多少過人之處。
首先,我們可以用命令行工具Diskpart創建VHD檔案!(是的,命令行工具,你可能已經想到了自動化批處理和批量部署可以用到這個技術,沒錯,網管說:要硬碟,於是,大量的VHD就被創建出來了… )
上面這段命令,創建了一個固定尺寸的VHD檔案,並且進行了分區、分配盤符和格式化,一氣呵成。Diskpart還能做很多事情,具體參數,請參考這個文檔,如果你不喜歡命令行,那么Windows 7的磁碟管理工具,一樣可以完成上述操作。現在我們看看VHD在Windows 7中直接訪問的幾種方法:
方法一:
Foo.VHD檔案中可以包含一個以上的磁碟分區,這些分區都可以映射到Windows作業系統中,可以為之分配盤符,也可以映射到一個NTFS的目錄。
方法二:
VHD的磁碟中可以包含VHD檔案,這個VHD檔案還可以被映射到作業系統中,目前版本的Windows支持2層嵌套VHD。(我實在想不出有什麼實際的用處,據說這個功能可能會在正式版中被去掉,以免把用戶搞糊塗)
方法三:
如果你還沒有被上面的嵌套VHD搞糊塗的話,還記得VHD檔案的差異磁碟功能吧?Bar.VHD在嵌套的基礎上,使用物理C糟上的BarParent.VHD做成了一個差異磁碟。
其實這種方法還是挺實用的,不考慮嵌套,Foo.VHD可以使用BarParent.VHD做差異磁碟,如果這樣的話,從Foo.VHD啟動計算機,每次用完都通過批處理自動銷毀,硬碟保護卡的市場,恐怕從此要消失了。。。
方法四:
這些功能的確令人眼花繚亂,我們冷靜一下,看看VHD有什麼局限性和功能上的限制:
最多可以同時映射的VHD檔案數量是512個(似乎也夠用了)
VHD磁碟的父分區,不支持Volume Snapshot
映射的VHD磁碟,不能被配置為動態磁碟,也就是不能在VHD上建軟RAID(知足吧,VHD實現已經很複雜了,軟RAID就不要來添亂了)
啟動電腦
如果說你對在Windows 7中映射和使用VHD檔案無動於衷,那么,我相信從VHD啟動計算機一定會抓住你的眼球。
我之前提到了,在Windows 7中,微軟把VHD的驅動內置進了作業系統,也包括在了Windows 7的引導程式中。這也就是說,在啟動計算機的階段,Windows 7的引導程式可以大搖大擺的直接訪問VHD檔案,並且啟動VHD中安裝的系統。
慢著,什麼是Windows 7的引導程式?簡單地說,引導程式就是在作業系統核心或用戶應用程式運行之前運行的一段小程式。通過這段小程式,我們可以初始化硬體設備(載入必要的驅動程式)、建立記憶體映射圖,從而將系統的軟硬體環境帶到一個合適的狀態,以便為最終調用作業系統核心或用戶應用程式準備好正確的環境。我們在裸機上安裝Windows 7時,首先做的,就是把Windows 7的引導程式寫入磁碟的特殊位置。Windows 7的引導程式帶有VHD驅動,因此可以從VHD啟動。
注意事項
1. 從VHD啟動是有版本限制的,目前(2009年1月)的文檔指出只有Windows Server 2008 R2、Windows 7商業版及以上版本,才支持此功能,未來正式發布時可能會有變化,敬請留意。
2. UDFS檔案系統暫時不被支持(UDFS是什麼?不支持也罷…)
3. 啟動用的VHD檔案,不能保存在壓縮或者加密的NTFS磁碟之上(這一點很多人會忽略)
4. 根據一些朋友的反饋,動態的VHD檔案無法啟動,需要在建立vhd是設定成立即分配才可以從vhd啟動
5. 如果你的物理硬碟是RAID格式,則必須要在VHD中的作業系統鏡像中注入RAID的驅動程式,可以使用peimg命令。