一、什么是VHD

VHD 是Microsoft Virtual Hard Disk format(微软虚拟磁盘文件)的简称。可以由Microsoft Virtual PC 2007,Windows VistaWindows 7/8,Hyper-VWindows Server 2008 R2/2012,Microsoft Virtual Server 2005等创建,Virtual BoxVMWare等可以挂载使用。

VHD文件格式可以被压缩成单个文件存放在宿主机器的文件系统上,主要包括虚拟机启动所需系统文件

二、VHD文件类型

VHD虚拟硬盘有固定VHD、动态VHD 、差异VHD和链接硬盘四种类型,我们可以根据自己的实际需求去选择相应的格式,但在Windows7中只有固定VHD和动态VHD两种类型。

  • 固定VHD:对已分配的大小不会更改。
  • 动态VHD:大小与写入的数据大小相同,并随着数据的写入而相应增加直到达到大小上限。动态VHD上限为2,040 GB。
  • 差异 VHD :与动态VHD 类似,但只包含所关联父VHD修改后的磁盘块。差异VHD的上限为2,040 GB。
  • 链接硬盘VHD:文件本身指向一个磁盘或者一个分区。

VHD的优点:

  1. 维护简单:VHD磁盘操作时就跟物理磁盘一样,维护起来较为简单,我们可以对它进行分区、格式化、压缩、删除等等操作,这些操作并不影响物理分区。这种操作更有利于初学者反复试验分区、格式等功能。
  2. 像U盘一样加载自如:当你对VHD分区写入一些重要数据后,并不想他人修改其中的内容时,我们可以随时将此VHD进行脱机或分离操作,在需要的时候再将它附加进来修改。同样可以向U盘一样从“安全删除硬件并弹出媒体”中弹出某个VHD。
  3. 轻松备份:备份时我们仅仅需要将创建的VHD文件进行备份,它所包含的分区中所内容便被统一备份,当然我们也可以用备份工具将VHD文件所在的整个物理分区进行备份,这样不用说VHD分区中的内容也被纳入其中了。(其实Windows7和Windows2008的Backup工具备份产生的主文件也是VHD格式)
  4. 迁移方便:当我们有一个VHD文件需要在多台计算机上使用时,我们只要先将此VHD分离开来,将其复制到目的计算机上,再进行附加上去即可。同时我们可以通过服务器进行分发,使用脚本将其附加到目的机。当然在物理机与虚拟机之间迁移也是没问题的。
  5. 与虚拟机互相通用:Windows7和Windows2008 R2的VHD文件与VPC、Hyper-V的虚拟硬盘是互通的,我们可以将虚拟机中的VHD文件附加到Windows7和Windows2008 R2中。反过来Windows7和Windows2008 R2中的VHD在分离后也可以挂载到VPC和Hyper-V中。
  6. 可直接用于系统部署:我们可以使用Imagex工具将已经捕获的映像释放到此放,或通过WDS服务器部署系统到VHD。
  7. 双重的安全保护:由于VHD创建时产生的是一个存储文件,在这里我们便可以对此文件和VHD的分区进行不同的权限限制,这样即可以对分区读写权限进行设置保证部分人员有往VHD分区中存储数据的权限,也可以对此VHD文件设置读写权限保证此文件在分离后不被他人给删除。

三、什么是VHDX

随着虚拟环境的企业工作负荷的增加以及性能要求的提高,虚拟硬盘 (VHD) 格式需要适应这些变化。Windows Server 2012 中的 Hyper-V 引入了一个新版本的 VHD 格式,称为 VHDX,它在设计上可以处理当前以及将来的工作负荷。
与旧的 VHD 格式相比,VHDX 具有更大的存储容量。它还在电源故障期间提供数据损坏保护并且优化动态磁盘和差异磁盘的结构对齐方式,以防止在新的大型扇区物理磁盘上性能降级。

四、VHDX的特性和功能

VHDX 格式的主要新功能如下:

  • 支持的虚拟硬盘的存储容量高达 64 TB。
  • 通过记录对 VHDX 元数据结构的更新,可以在电源发生故障时保护数据不会被损坏。
  • 改进了虚拟硬盘格式的对齐方式,可在大型扇区磁盘上更好地工作。
VHDX 格式还提供以下功能:
  • 动态磁盘和差异磁盘较大的数据块大小,可让这些磁盘满足工作负荷的需求。
  • 一个 4 KB 的逻辑扇区虚拟磁盘,可以在为 4 KB 扇区设计的应用程序和工作负荷使用该磁盘时提供较高的性能。
  • 能够存储有关用户可能想记录的文件的自定义元数据,如操作系统版本或应用的修补程序。
  • 高效地表示数据(也称为“剪裁”),使文件大小更小并且允许基础物理存储设备回收未使用的空间。(剪裁需要直接连接到虚拟机或 SCSI 磁盘的物理磁盘以及与剪裁兼容的硬件。)

五、兼容性

VHD:Windows XP以及更早的操作系统均不能直接挂载

VHDX:Windows 8 / Windows Server 2012引入了VHDX的格式,Windows 7以及更早的操作系统均不能直接挂载使用

挂载方式:自Windows 8 / Windows Server 2012 系统开始,可以直接双击VHD/VHDX进行挂载。一些第三方软件也提供了挂载VHD/VHDX的功能,如:如何在XP中挂载VHD 

不知道什么是VHD/VHDX的,请移步:VHD/VHDX科普文

固定VHD/VHDX在创建之后就直接在磁盘上占用了该文件设定的大小,性能较好;动态vhd/vhdx文件一开始占用磁盘空间小,但是在长时间写入后会不停的增大。即使你删除了其中的文件,虚拟磁盘文件所占用的磁盘物理空间也不会因此自动释放。本文的目的就是把这些空间释放出来。

注意:VHD/VHDX的磁盘分区格式如果是exFat,那么下面的方法是没有太大效果的!如果是NTFS则基本可以完全释放!(之前建立了一个簇大小是512的exFat分区发现磁盘空间回收不能,随后转用NTFS就可以了)

测试环境:windows 10 1609 x64,以下是详细步骤(参考自:https://linhost.info/2011/01/windows-how-to-compact-a-dynamic-vhd/

1.打开cmd,需要使用管理员权限,调用diskpart命令

diskpart

2.选择要处理的vhd/vhdx文件

select vdisk file="<vhd/vhdx文件的路径>"

3.以只读方式附加这个磁盘

attach vdisk readonly

4.使用压缩命令

compact vdisk

5.压缩完成之后进行分离

detach vdisk

经过上述操作之后,文件理论上就会变小了!