在使用驱动器映像软件十几年之后,我发现虚拟机可以在几秒钟内被快照和恢复,而驱动器映像通常需要花费数小时。
我可以快照一个虚拟机,重新安装到不同的操作系统,然后进行恢复,不知何故,在几秒钟内,我的旧虚拟机完全恢复到以前的状态。
这是怎么发生的? VM主机实际上对VM做了什么?
在创build快照时,对初始虚拟磁盘映像所做的所有更改实际上并不在映像本身上,而是写入新的(快照)磁盘文件。 这个动作是如此之快,因为没有必要复制整个虚拟磁盘映像,因为它在写入原则上复制 (只有改变,即写入块被写入快照映像)。 请注意,当您在原始虚拟磁盘映像上更改更多的数据时,快照映像会不断增大(保留与您拍摄快照时相同的数据)。 它最有可能比原始图像小得多,但在最坏的情况下,它将是完全相同的大小(如果所有的块都改变了)。
您可以使用这个新的快照图像执行两个操作:
上述所有程序也适用于多个快照。 在这种情况下,原始图像可以是一个快照,并且下一个快照可以在该(第一)快照上引用块。 这样你可以有许多快照,你可以放弃或合并轻松。
通过快照,您的虚拟化软件必须跟踪四件事情:CPU状态,RAM,configuration(VM中有多less网卡?)和磁盘。 我忽略了前三件事情,因为它们不是大量的数据,软件只能复制相对较小的数据结构并将它们存储在一个文件中。 所以,只留下磁盘快照解释。
首先,虚拟机看作是一个硬盘,实际上只是主机文件系统上的一组文件。 要创build一个快照,虚拟机软件会在某个时间点取得虚拟机磁盘,保留虚拟机磁盘,打开一个新的空磁盘文件,并且在随后每次访问磁盘时都会执行写入时复制scheme。
假设你的磁盘文件是BigVM.disk。 您快照,现在您的VM软件将您的磁盘重命名为BigVM-s1.disk,然后创build一个新的空BigVM.disk。 当您的虚拟机运行时,所有的读取请求都通过BigVM.disk。 如果该文件没有虚拟机所需磁盘部分的条目,则返回BigVM-s1.disk中的数据。 在写入时,将数据写入BigVM.disk而不是BigVM-s1.disk。 未来读取同一个扇区将从BigVM.disk返回数据,而不是BigVM-s1.disk中包含的原始快照。 BigVM-s1.disk包含您的虚拟机的硬盘状态(截至您的快照),而BigVM.disk包含自该快照以来磁盘的所有差异。
当您恢复到较旧的快照时会发生什么? 虚拟机软件抛弃了BigVM.disk的内容,并重新开始了一个新的空BigVM.disk,它仍然指向BigVM-s1.disk。
它只是写入从快照时间更改的文件中的差异,而不是完整的虚拟机磁盘。 像unix diff和patch一样,除了一个比较复杂的版本,它不同于二进制级别,并且知道你的虚拟机的其他细节。
至less在VMware快照中,会发生什么情况是快照基本上是VMX启动磁盘写入和机器状态的新检查点的信号。 根据您的虚拟机是closures还是打开,恢复快照可能只是简单地干涉所有发生在该检查点之后的事情。 否则,所有虚拟机的磁盘扇区都将变为写入复制,这意味着当您执行热快照恢复时,只需重写自拍摄快照以来已更改的扇区。 所以这就是为什么它更快。
使用VMware快照及其内部最好解释@ http://www.pcclm.com/2012/02/virtual-machine-snapshots-in-vmware.html