【问题标题】:Hyper-V 2008R2 - get virtual machine's snapshot locationHyper-V 2008R2 - 获取虚拟机的快照位置
【发布时间】:2014-05-08 08:04:27
【问题描述】:

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

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

目前,备份是通过save VM -> copy tree -> start VM 进程完成的,对于最大的虚拟机而言,这涉及长达 6 小时的停机时间。我计划使用虚拟机快照来减少停机时间,因为一旦您执行了快照,您就可以在别处备份 VHD 和快照数据而不会干扰虚拟机(它会更慢,但仅此而已)。然后我计划保存 VM,删除快照(将发生 VHD 合并),等到合并完成,然后启动 VM,可能会将 VM 停机时间减少到最坏情况下的半小时。

到目前为止,我的脚本能够找到给定 VM 的 VHD 并对其进行备份,但无法找到 VM 的快照位置。可能只是从 VHDs 文件夹向后遍历树不会产生“虚拟机”或“快照”文件夹,所以猜测是不可能的。

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

【问题讨论】:

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


    【解决方案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 来更改路径,但这更容易一些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多