使用Microsoft Data Protection Manager(DPM)有时会造成虚拟机的动态和固定磁盘变成差异磁盘,这个应该与DPM进行差异备份有关,未知原因造成DPM差异备份后无法复原原来的磁盘类型,并且在Hyper-V Manager中看到非常多树形结构的层层依赖的Checkpoints,这些Checkpoints名称中有Backup字样,这些Checkpoints无法通过Hyper-V Manager删除,也无法通过命令行删除,在文件系统中表现为虚拟机目录中Shapshots文件夹出现很多xml文件。然而Checkpoints的数量有50个上限,如果不删除这些Checkpoints会造成DPM无法继续备份这个虚拟机。那么我们只好手工合并这些差异磁盘,暴力删除这些Checkpoints。以下操作都需要关停虚拟机,并且有一定风险,请操作前备份相关文件。
1. 在SCVMM中先将该差异磁盘从虚拟机中删除,注意一定要选择不要从物理服务器中移除,即保留差异磁盘以备独立进行合并,操作请事先备份所有差异磁盘。
2. 在虚拟机所在物理服务器节点,使用Hyper-V Manager的Edit Disk功能,但是选择Locate Disk时需要特别注意的是必须从最新的那个差异磁盘开始向前合并。如果存在多个差异磁盘,他们之间的关系成树状结构,如果实现合并了前一个,那么后一个将无法找到其父磁盘。可以Merge到父磁盘,如果层次特别多的话,要一次一次操作相当费时费力,或者整体合并保存到其他位置,注意保存的文件名与之前的差异磁盘文件名一致(差异磁盘由1个文件vhdx和多个avhdx组成,这里才差异磁盘文件名指的是最初的那个,即vhdx文件名),以备后用。
如果选中的事差异磁盘,工具会出现Merge选项
完成合并
3. 差异磁盘完成了合并后,可以删除虚拟机目录中的所有差异磁盘(删除前确认有备份),拷贝合并后的固态磁盘或动态磁盘进入虚拟机目录,在SCVMM中为虚拟机添加该磁盘。这时虚拟机已经可以正常使用新的合并后的磁盘启动,但是这些备份用的Checkpoints还在,无论如何都无法删除,经尝试Hyper-V Manage和以下命令都无法删除:Get-VMSnapshot -VMName vmwithcheckpoint.domain.com -ComputerName hyper-v.domain.com | Remove-VMSnapshot。那么接下来使用暴力了。
在Services.msc中将Hyper-V Virtual Machine Management服务停止(在SCVMM管理下,该服务会自动启动,但有个几秒的窗口期),然后直接删除虚拟机目录中的Shapeshots文件夹。启动Hyper-V Virtual Machine Management后,在Hyper-V Manager中虚拟机不见了,SCVMM中虚拟机呈现Missing状态。可以想象Hyper-V Virtual Machine Management找不到虚拟机的Checkpoints文件,无法关联该虚拟机。但是别急,我们可以通过Hyper-V Manager重新导入该虚拟机,导入时选择Restore,所以文件夹都指向原先虚拟机目录,在选择Checkpoints时,注意选择删除Checkpoints。完成后一切都回来了。
注意删除Checkpoints时,一定是建立在Merge差异磁盘,而虚拟机配置也没有太大改动的基础上,简言之每个Checkpoints都会保存与上一个虚拟机状态(配置和磁盘)的差异。至此虚拟机终于恢复正常了,惊心动魄。