Hyper-V 2008R2 - 获取虚拟机的快照位置

时间:2014-05-08 08:04:27

标签: powershell windows-server-2008-r2 snapshot hyper-v

我需要使用Powershell和PSHyperV模块为在Windows Server 2008 R2上运行的虚拟机实施备份解决方案。该模块有助于加载,因为它提供了一种简单的方法来获取VM属性和其他内容,执行基本功能等。

我计划的停机时间最少,因为客户可能会使用相关虚拟机,而且他们通常不会容忍任何停机时间。我知道使用Windows Server 2012 R2管理程序完全解决了这个问题,因为它具有实时VHD合并功能,但基础架构的迁移是一个足够长的过程,备份不会等待。

目前,备份是通过save VM -> copy tree -> start VM进程完成的,最大VM的停机时间最长可达6小时。我计划使用虚拟机快照来减少停机时间,因为一旦执行了快照,您就可以在不影响虚拟机的情况下将VHD和快照数据备份到其他地方(它会慢一点,但就是这样)。然后我计划保存VM,删除快照(将发生VHD合并),等待合并完成,然后启动VM,可能会将VM停机时间减少到半小时最坏情况。

到目前为止,我的脚本能够找到给定VM的VHD,备份它们,但无法找到VM的快照位置。从VHDs文件夹向后遍历树可能不会产生“虚拟机”和“快照”文件夹,因此猜测是不可能的。

如何获取快照文件的位置以便为VM快照进行手动导出?

1 个答案:

答案 0 :(得分:1)

获得数据,也许有人会觉得它很有用。

$vmName = "Test VM"
$vm = Get-VM $vmname
$vmGlobal = Get-WMIObject -class Msvm_VirtualSystemGlobalSettingData -namespace "root/virtualization" | where {$_.systemname -eq $vm.name}
$vmRootPath = $vmGlobal.ExternalDataRoot
$snapshotPath = $vmGlobal.SnapshotDataRoot

然后,获取这些路径,将“快照”附加到快照路径(显然是硬编码),将“虚拟机”附加到根路径,然后获取配置和快照文件。可以通过调用$vm | Get-VMDisk | where {$_.DiskName -eq "Hard Disk Image"}来接收磁盘,这些磁盘包含文件的绝对路径。

这应该足以让我从快照中获取备份和还原VM所需的所有数据,即使原始VM因磁盘丢失而被破坏也是如此。我可能不得不使用备份的XML来改变路径,但这有点容易。