使用驱动器映像软件已有十多年了,我发现令人不解的是,虚拟机可以在几秒钟内完成快照和还原,而驱动器映像通常需要数小时。
我可以为虚拟机创建快照,重新安装到其他操作系统,然后进行还原,然后以神奇的方式在几秒钟内将旧的虚拟机完美恢复到以前的状态。
这怎么可能发生?VM主机实际上对VM做些什么,使之成为可能?
使用驱动器映像软件已有十多年了,我发现令人不解的是,虚拟机可以在几秒钟内完成快照和还原,而驱动器映像通常需要数小时。
我可以为虚拟机创建快照,重新安装到其他操作系统,然后进行还原,然后以神奇的方式在几秒钟内将旧的虚拟机完美恢复到以前的状态。
这怎么可能发生?VM主机实际上对VM做些什么,使之成为可能?
Answers:
创建快照时,在初始虚拟磁盘映像上进行的所有更改实际上不会在映像本身上进行,而是将它们写入新的(快照)磁盘文件中。该操作之所以如此之快,是因为它不需要复制整个虚拟磁盘映像,因为它可以按写原理进行复制(仅更改,即已写入的块被写入快照映像)。请注意,快照映像会随着您更改原始虚拟磁盘映像上的越来越多的数据而增长(该快照在拍摄快照时保持不变)。它很可能会比原始图像小得多,但在最坏的情况下,它的大小将完全相同(如果所有块均已更改)。
您可以使用此新快照图像执行以下两项操作:
上述所有过程也适用于多个快照。在那种情况下,原始图像可能是一个快照,而下一个快照可能引用该(第一个)快照上的块。这样,您可以拥有许多快照,可以轻松丢弃或合并它们。
使用快照,您的虚拟化软件必须跟踪四件事: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。
它仅写入从快照开始更改的文件中的差异,而不写入整个虚拟机磁盘。与unix diff和patch一样,只是更复杂的版本在二进制级别进行diff并了解虚拟机的其他详细信息。
最好在@ http://www.pcclm.com/2012/02/virtual-machine-snapshots-in-vmware.html中解释有关VMware快照及其内部的工作。