如何合并 Hyper-V 快照:逐步指南

有时候你需要在其中一个虚拟机(VM)上安装操作系统更新或安全补丁。然而,更新过程有时可能出错,导致系统失败、配置数据丢失或某些程序被卸载。微软的Hyper-V提供了创建Hyper-V快照的机会,允许你在特定时间点保存VM的状态,并在系统出现错误时将系统回滚到之前的状态。

在这篇博文中,我们将描述如何使用Hyper-V管理器或PowerShell合并Hyper-V快照以及它们的使用方法。然而,要学习如何管理Hyper-V快照,你首先需要了解它们背后的技术。

什么是Hyper-V快照?

A Hyper-V snapshot is a point-in-time copy of a VM, which contains all the information required to restore your data. With the use of Hyper-V snapshots, you can revert the VM to a point when the VM state was captured and the snapshot was taken. Hyper-V snapshot technology is enabled by default when the Hyper-V role is installed on your computer and your first VM is created. Hyper-V snapshots of a selected VM can be taken in any state (Off, Running, Paused, and Saved) and the operation is typically complete in a few seconds.

请注意,Hyper-V快照目前被称为Hyper-V检查点,但这两个术语同样有效。

Hyper-V快照的类型

微软的Hyper-V提供了两种类型的快照:

  • 生产快照在虚拟机内部应用备份技术来创建数据一致的快照。为此,使用了Windows卷影复制服务(VSS)或Linux文件系统冻结。Hyper-V生产快照可以用来捕获生产环境的状态,因为它们改善了应用程序和虚拟机操作系统的数据一致性。请注意,Hyper-V生产快照不会捕获虚拟机的内存状态、其CPU活动信息或硬件配置。

在新的操作系统版本(Windows Server 2016 和 Windows 10)中,生产检查点是检查点类型的默认选项。但是,您可以在 Hyper-V 管理器或 Windows PowerShell 中更改它。

  • 标准快照 捕获了虚拟机在特定时间点的状态,包括其 CPU 活动、内存和硬件配置。因此,标准 Hyper-V 快照允许捕获应用程序的当前状态,并将虚拟机回滚到特定时间点的状态或条件。它们主要适用于开发和测试场景。创建 Hyper-V 标准快照不能被视为可靠的备份策略,因为它们可能会导致不具备 VSS 意识的应用程序中的一些数据不一致问题。

Hyper-V 快照工作原理

正如您所知,Hyper-V 虚拟机存储在虚拟磁盘中,其格式为 .vhd(x)。与此同时,创建在这些 Hyper-V 虚拟机上的快照文件存储在 .avhd(x) 文件格式中,并保存在与硬盘映像文件相同的文件夹中。Hyper-V 快照基本上是差异虚拟磁盘,每个快照与相应的父虚拟硬盘存在父子关系。您可以为每个虚拟机创建多达 50 个快照。所有 Hyper-V 快照都以层次结构的方式组织,从而构成检查点子树。

然而,问题在于 .avhd(x) 文件往往会堆积并占用大量磁盘空间,从而影响虚拟机性能。如果您想删除不必要的 .avhd(x) 文件,您需要删除 Hyper-V 快照。此选项并不意味着您实际删除了快照。相反,您只是将 Hyper-V 快照及其中包含的数据合并到父磁盘或另一个虚拟磁盘中。不建议直接从计算机上删除 Hyper-V 快照。合并 Hyper-V 快照后,磁盘上的所有 .avhd(x) 文件都将被删除。这样,您就可以在 Hyper-V 主机上创建额外的空间。

如何合并 Hyper-V 快照

在我们先前的一篇博客文章中,我们已经介绍了如何 管理 Hyper-V 快照(创建、应用、重命名、启用/禁用等)。但是,今天的博客文章将作为手动合并 Hyper-V 快照的指南。

要合并 Hyper-V 快照,您需要使用 Hyper-V 管理器或 PowerShell。下面将描述这两种方法。

使用 Hyper-V 管理器

在我们开始描述如何合并 Hyper-V 快照之前,我们应该首先确定将要合并哪些快照。应按特定顺序合并 Hyper-V 快照:从子快照到父快照。因此,重要的是通过确定其创建顺序来建立检查点树的结构:从最新到最旧的快照。

如上所述,每个快照与在其之前创建的另一个快照具有父子关系。它们的组合可以以链的形式表示。例如,为了一个虚拟硬盘创建了3个快照。运行VM的主虚拟磁盘充当第一个检查点的父级,该检查点充当第二个检查点的父级,而第二个检查点充当第三个检查点的父级。

要建立检查点结构,请执行以下步骤:

  1. 打开 Hyper-V 管理器。
  2. 在中心窗格中,选择要合并快照的虚拟机。
  3. 在右侧的操作部分,点击检查磁盘。
  4. 选择 .avhd(x) 文件,然后点击确定
  5. 接下来,您应该看到虚拟硬盘属性的概要,包括其名称、位置和父级的名称。确定所选 .avhd(x) 文件的父级。
  6. 重复步骤 3-5,对每个 .avhd(x) 文件执行操作,并确定它们的合并顺序。

执行合并 Hyper-V 快照的操作之前,请确保关闭虚拟机,以避免合并操作期间出现任何问题。

要合并 Hyper-V 快照,请执行以下操作:

  1. 打开 Hyper-V 管理器。
  2. 选择所需的虚拟机。
  3. 点击 编辑磁盘。编辑虚拟硬盘向导将打开点击 下一步。
  4. 点击 浏览 以选择最新的 .avhdx 文件。 点击 下一步。
  5. 选择 合并 以将差异磁盘中存储的更改合并到父磁盘或其他磁盘中。 点击 下一步。
  6. 选择 到父虚拟硬盘 并点击 完成。
  7. 要完全完成合并 Hyper-V 快照的过程,请为每个 .avhd(x) 文件重复步骤 1-5,直到所有更改都已合并到原始父磁盘中。
  8. 最后一步是重新启动虚拟机以应用已实施的更改。

使用 PowerShell

在开始合并 Hyper-V 快照之前,请确保您的计算机已启用 Merge-VHD cmdlet。如果没有,屏幕上将显示以下错误:
识别的术语 'Merge-VHD' 不是 cmdlet、函数、脚本文件或可操作的程序的名称。
请检查名称的拼写,或者如果包括路径,请验证路径是否正确,然后重试。

为了解决这个问题,以管理员身份打开 PowerShell 并运行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell

如果一切正常,您应该会看到以下内容:

现在,您可以运行 Merge-VHD cmdlet 了。请注意,此操作是离线进行的。

要合并 Hyper-V 快照,请运行以下 cmdlet:

Merge-VHD Path = '' DestinationPath = ''

在这种情况下,从最新的子磁盘开始,数据可以合并到最老的父磁盘中。在屏幕上,您将看到以下内容:

操作完成后,关闭客户虚拟机并重新启动系统。与需要单独合并磁盘链中的每一层的 Hyper-V 管理器不同,PowerShell 允许您使用单个命令执行如此复杂的操作。

为什么您应该使用 Hyper-V 快照

Hyper-V快照允许在应用配置更改、安装新软件、运行任何操作系统更新、升级安全补丁等之前保存虚拟机的状态。如果您即将执行可能改变虚拟基础架构或存在高风险失败的操作,请先创建虚拟机的Hyper-V快照。如果发生故障并需要将系统恢复到以前的状态,它将作为一个安全保障。

然而,Hyper-V快照在开发和测试环境中使用时效果最佳。它们不是一个有效且可靠的备份替代方案,我们不建议在生产环境中使用它们。相反,考虑使用功能齐全的Hyper-V备份解决方案,其中包括多种数据保护选项,与传统基础架构维护相比,可以为您节省大量时间、金钱和精力。

Source:
https://www.nakivo.com/blog/merge-hyper-v-snapshots-step-step-guide/