虚拟机快照如何工作?

Mat*_*ino 16 virtualization

使用驱动器映像软件已经十多年了,我发现虚拟机可以在几秒钟内完成快照和恢复,而驱动器映像通常需要几个小时,这让我感到难以置信。

我可以对虚拟机进行快照,重新安装到不同的操作系统,然后进行恢复,并在几秒钟内以某种方式神奇地将我的旧虚拟机完美地备份到以前的状态。

这怎么可能发生?VM 主机实际上对 VM 做了什么使这成为可能?

ipo*_*gaj 16

创建快照时,对初始虚拟磁盘映像所做的所有更改实际上并未在映像本身上进行,而是写入新的(快照)磁盘文件。这个动作如此之快是因为不需要复制整个虚拟磁盘映像,因为它遵循复制的原则(仅更改,即写入的块写入快照映像)。请注意,快照映像会随着您更改原始虚拟磁盘映像(在您拍摄快照时保持原样)上越来越多的数据而增长。它很可能比原始图像小得多,但在最坏的情况下,它的大小将完全相同(如果所有块都已更改)。

您可以对这个新的快照图像进行两项操作:

  1. 丢弃快照:非常快的动作。虚拟机管理器只需删除快照映像文件并将控制权返回到原始磁盘映像或某些先前的快照
  2. 合并快照:虚拟机管理器将更改的块(即快照映像)与原始映像合并。此操作将花费时间,具体取决于原始图像中的块已更改的数量。同样,最坏的情况是,如果在创建快照后已写入原始图像中的所有块,则整个原始图像将被覆盖。

上述所有过程也适用于多个快照。在这种情况下,原始图像可能是一个快照,而下一个快照可能会引用该(第一个)快照上的块。通过这种方式,您可以拥有许多可以轻松丢弃或合并的快照。


kby*_*yrd 5

使用快照,您的虚拟化软件必须跟踪四件事:CPU 状态、RAM、配置(VM 中有多少网卡?)和磁盘。我忽略了前三件事,因为它们不是大量数据,软件可以制作相对较小的数据结构的副本并将它们存储在文件中。所以,只留下磁盘快照来解释。

首先,VM 所看到的硬盘实际上只是主机文件系统上的一组文件。为了做快照,虚拟机软件在某个时间点获取虚拟机的磁盘,保存它,打开一个新的空磁盘文件,并每次后续磁盘访问时执行写时复制方案。

假设您的磁盘文件是 BigVM.disk。您创建快照,现在您的 VM 软件将您的磁盘重命名为 BigVM-s1.disk,然后创建一个新的空 BigVM.disk。当您的 VM 运行时,所有读取请求都通过 BigVM.disk。如果该文件没有您的 VM 所需磁盘部分的条目,则返回 BigVM-s1.disk 中的数据。写入时,数据将写入 BigVM.disk 而不是 BigVM-s1.disk。对同一扇区的未来读取将返回 BigVM.disk 中的数据,而不是 BigVM-s1.disk 中包含的原始快照。BigVM-s1.disk 包含快照时 VM 的硬盘状态,而 BigVM.disk 包含自该快照以来与磁盘的所有差异。

当您恢复到较旧的快照时会发生什么?VM 软件丢弃 BigVM.disk 的内容并重新开始,新的空 BigVM.disk 仍指向 BigVM-s1.disk。