免费工具VHDResizer可以用来挂载VHD文件并压缩到所选大小。上文提到的Resize-VHD命令只对VHDX文件起作用,而VHDResizer是个老工具,不支持VHDX文件格式。该工具的转换需要时间较长,因为它的原理是把已有虚拟磁盘驱动器以数据块为单位拷贝到新的VHD文件。
在使用VHDResizer之前,您也要通过上文提到的PowerShell命令先对VHD文件内的分区进行压缩。
首先,关闭虚机。然后挂载VHD,把下面命令中的路径替换为您的VHD文件路径。
Mount-VHD "C:\VMs\ResizeMe.vhd" –passthru | get-disk | get-partition | get-volume
使用以下示例命令调整分区,留出合理的缓冲。
Resize-Partition –driveletter D –size 40MB
如您看到的,尝试用Resize-VHD PowerShell命令出现错误提示,因为只有VHDX文件受支持。此时,我们打开VHDResizer进行VHD压缩并结束整个过程。您可以远程挂载和进行分区大小调整,但是必须在本地系统上运行VHDResizer。
登录VHDResizer时,系统会询问源VHD。
下一个窗口询问您希望创建的VHD路径、大小以及是动态还是静态磁盘。参数设置完成后,点击OK。
VHDResizer不会改变已有VHD文件的大小,而是根据您选择的大小创建一个新的VHD。
完成如上过程后,打开Hyper-V管理器,移除之前较大的磁盘并增加新创建的压缩后的VHD。
调整VHD大小的其它方法
如果购买了NetApp SAN存储,并在其逻辑磁卷上创建了VHD或VHDX文件,您可以使用Data ONTAP PowerShell Toolkit来调整虚拟磁盘大小。该工具可用于压缩虚拟磁盘文件,或把SAN上的数据块清零,以完成空间的回收。
由于依赖网络速度,P2V(物理机到虚拟机)转换时间从30分钟到几个小时不等。使用上述的磁盘压缩选项还会增加额外的时间,使得周期和应用的停机时间更长。Windows Server 2012的PowerShell命令很有潜力,但是不支持VHD,并且在压缩过程中需要停止虚机,为P2V过程增加额外的停机时间。希望该管理过程将来会成为Hyper-V提供的自动化P2V、存储迁移或基于向导的磁盘编辑任务的一部分。