虚拟机快照如何工作?


16

使用驱动器映像软件已有十多年了,我发现令人不解的是,虚拟机可以在几秒钟内完成快照和还原,而驱动器映像通常需要数小时。

我可以为虚拟机创建快照,重新安装到其他操作系统,然后进行还原,然后以神奇的方式在几秒钟内将旧的虚拟机完美恢复到以前的状态。

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

Answers:


16

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

您可以使用此新快照图像执行以下两项操作:

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

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


1
如果您启用了删除后擦除功能,则与任何图像删除过程一样,丢弃快照实际上可能会非常慢。这是一项安全功能,可以在释放映像或快照之前将其清除以释放空间供其他VM使用,否则,使用低级块读取可以读取先前使用的VM的数据。而且任何不具有此功能的虚拟化解决方案都存在巨大的安全漏洞
dyasny 2011年

我试图解释创建多个快照的场景以及如何保留每个快照的更改。请参见在VMware的工作这个简短解释快照: cubicrace.com/2012/02/...
的Piyush Chordia

5

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

首先,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。


2

它仅写入从快照开始更改的文件中的差异,而不写入整个虚拟机磁盘。与unix diff和patch一样,只是更复杂的版本在二进制级别进行diff并了解虚拟机的其他详细信息。


1

至少在VMware快照中,发生的情况是快照基本上是向VMX发出信号的信号,以启动磁盘写入和计算机状态的新检查点。根据您的虚拟机是关闭还是打开电源,还原快照可以只涉及对检查点之后发生的所有事情进行操作。否则,您所有VM的磁盘扇区都会在写入时复制,这意味着在执行热快照还原时,它仅需重写自拍摄快照以来已更改的扇区。这就是为什么它更快。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.