理解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是在一個文件中的硬盤。
Windows 7支持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就被創建出來了… )
1: diskpart 2: create vdisk file=c:windows7.vhd maximum=25600 type=fixed 3: select vdisk file=c:windows7.vhd 4: attach vdisk 5: create partition primary 6: assign letter=r 7: format quick label=vhd 8: exit上面這段命令,創建了一個固定尺寸的VHD文件,並且進行了分區、分配盤符和格式化,一氣呵成。Diskpart還能做很多事情,具體參數,請參考這個文檔,如果你不喜歡命令行,那麼Windows 7的磁盤管理工具,一樣可以完成上述操作。現在我們看看VHD在Windows 7中直接訪問的幾種方法:
方法一:如右圖,Foo.VHD文件中可以包含一個以上的磁盤分區,這些分區都可以映射到Windows操作系統中,可以為之分配盤符,也可以映射到一個NTFS的目錄。
圖片看不清楚?請點擊這裡查看原圖(大圖)。
方法二:如右圖,VHD的磁盤中可以包含VHD文件,這個VHD文件還可以被映射到操作系統中,目前版本的Windows支持2層嵌套VHD。(我實在想不出有什麼實際的用處,據說這個功能可能會在正式版中被去掉,以免把用戶搞糊塗)