绝大数人最初接触VHD格式文件,是在使用VirturlPC或者VirtualServer时,VHD 是以文件形式存储在虚拟机的磁盘。微软在2005年公开了VHD格式文件的全部细节,可以从微软的TechNet网站下载VirtualHardDiskImageFormatSpecification。
 让我们抛开虚拟机,把目光集中在VHD文件本身。VHD是一块虚拟的硬盘,不同于传统硬盘的盘片、磁头和磁道,VHD硬盘的载体是文件系统上的一个VHD文件。既然VHD是一块硬盘,那么就可以跟物理硬盘一样,进行分区、格式化、读写等操作。
在Windows 7中,微软把VHD的驱动内置进了操作系统,也包括在了Windows 7的引导程序中。这也就是说,我们可在使用Windows 7的时候,直接访问VHD文件中的内容(把VHD的硬盘映射到一个盘符,后面会详细描述),也可以通过Windows 7的引导程序,启动位于VHD磁盘上的另一个操作系统。理解VHD驱动的工作细节,需要比较多的Windows底层知识,下图是一个比较简单和抽象的结构,可以发现,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。(我实在想不出有什么实际的用处,据说这个功能可能会在正式版中被去掉,以免把用户搞糊涂)
 方法三:如果你还没有被上面的嵌套VHD搞糊涂的话,还记得VHD文件的差异磁盘功能吧?Bar.VHD在嵌套的基础上,使用物理C盘上的BarParent.VHD做成了一个差异磁盘。   其实这种方法还是挺实用的,不考虑嵌套,Foo.VHD可以使用BarParent.VHD做差异磁盘,如果这样的话,从Foo.VHD启动计算机,每次用完都通过批处理自动销毁,硬盘保护卡的市场,恐怕从此要消失了。。。
方法四:我们可以把网络共享里面的VHD文件,映射到系统中来。这个功能,结合上面的那个差异磁盘,对,小硬盘学生机,都不用硬盘保护卡勒!