在物理机到虚拟机的转换过程中,通常需要调整物理硬盘和虚拟磁盘的大小。避免存储瓶颈比成功迁移更重要,但是Hyper-V磁盘管理工具包中没有可以调整虚拟磁盘大小的工具。即使没有这些工具,你依然可以通过PowerShell命令、VHDResizer或其它工具设置虚拟磁盘的大小。
使用PowerShell命令调整VHD大小
微软的Hyper-V项目经理Ben Armstrong在博客中公布了该方法,似乎可以快速缩小虚拟磁盘空间并缓解管理员压力。下面是主要的步骤:
打开Microsoft PowerShell:如果没有安装Hyper-V PowerShell cmdlets,使用如下命令:
Enable-WindowsOptionalFeature -Online-FeatureName Microsoft-Hyper-V-Management-PowerShell
加载VHD文件:使用如下命令加载VHDX文件,把命令中的路径更换为需要进行压缩的VHDX文件的路径。
Mount-VHD "C:\VMs\ResizeMe.vhdx" –passthru | get-disk |get-partition | get-volume
请注意,该过程只适用于Windows Server 2012自带Hyper-V兼容的VHDX文件。从VHD转化为VHDX格式很简单,但在虚拟磁盘文件转换过程中需要停机。
调整分区大小:在压缩VHDX文件之前需要调整分区大小,只允许把文件尺寸压缩为分区本身的大小。保留合理的缓冲区间,请牢记,磁盘碎片整理需要至少20%的空闲虚拟磁盘空间才可以进行。如下命令调整分区大小。要注意参数单位包含KB、MB、GB和TB。
Resize-Partition –driveletter D –size 40MB
卸载VHD:到此为止分区管理就结束了。接下来需要调整VHD虚拟磁盘文件的大小。如下命令把VHDX文件压缩到您最新设置的分区大小。
Resize-VHD "C:\VMs\ResizeMe.vhdx"–ToMinimumSize
使用下面的命令检查新VHDX文件的大小。
Get-VHD "C:\VMs\ResizeMe.vhdx" |fl path, vhdformat, vhdtype, size
通过VHDResizer调整VHD大小
免费工具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、存储迁移或基于向导的磁盘编辑任务的一部分。