磁盘“快照”是虚拟机磁盘文件(VMDK)在某个点及时的复本。万一某些东西出错了,你可以通过使用恢复到快照来保持磁盘文件系统和系统存储。当升级应用和服务器及给它们打补丁的时候,快照是救世主。在本手册中,我们将介绍什么是VMware快照、它如何工作及一些相关的技术。
      快照磁盘空间使用及增长率
如果你创建了多于一个的虚拟机快照,那么,你将有多个还原点可以用于恢复。当你创建了一个快照,那些现在可写的在那个点上就变成了只读的。使用in-file delta技术就能创建新文件记录所有的关于原始磁盘文件的变更(delta)。
快照文件的大小不能超过原始磁盘文件的大小。任何时候,一个磁盘块改变了,就将在delta文件里创建快照并能随着改变而更新。如果进行一次快照后,你改变了每个单独的磁盘存储块,这个快照将仍然象原始磁盘文件那么大。快照文件最初很小(16MB),不过,随着对虚拟磁盘文件的写入将增大。
16MB的快照空间用于降低SCSI预留冲突。当收到改变原始磁盘上存储块的请求,它代替在delta文件里的改变。如果先前在delta文件里更改了的磁盘存储块再次被更改,由于它简单地更新在delta文件里现有的存储块,不会增加delta文件的大小。
快照的增长率由服务器上磁盘写入活动发生次数决定。拥有磁盘写入增强应用的服务器,诸如SQL和Exchange服务器,它们的快照文件增长很快。另一方面,拥有大部分静态内容和少量磁盘写入的服务器,诸如Web和应用服务器,它们的快照文件增长率很低。当你创建许多快照时,新delta文件被创建并且原先的delta文件变成只读的了。每个拥有大量快照的delta文件可能变得和原始磁盘文件一样大
       快照的类型
        *–delta.vmdk file——当你创建一个虚拟机快照时,这是一个特定的文件。它也是redo-log日志。delta文件是在基础VMDK(虚拟机磁盘)上的变更位图,因此,它不能增长到比VMDK还大。为虚拟机创建每一个快照时,都会创建一个delta文件。当快照被删除或在快照管理里被恢复时,这些文件将自动删除。
      *.vmsd file——这些文件用于存储关于快照的元数据和信息。这个文件是本文格式的,里面包括诸如快照显示名称、UID(编号)和磁盘文件名等信息。在你没创建虚拟机快照之前,这个文件的初始大小为0字节。这样说来,只要进行快照,这个文件就会增大和持续更新。
在快照被移开后,这个文件不能被完全清除。一旦你删除了个快照,它将仍然在文件里为每个快照遗留位置,不过仅增加编号并在“Consolidate Helper”里放置名称,这可能是用来整合备份的。
       *.vmsn file——这是快照状态文件,里面存储的是使用快照时,一台虚拟机精确的运行状态。这个文件大还是小取决于你选择保留这台虚拟机的存储作为快照的一部分。如果你选择保留虚拟机的存储,那么,这个文件将比较大,然后分配给虚拟机最大化的RAM。
这个文件类似于VMware暂停状态文件.vmss。虚拟机每个快照都将创建一个.vmss文件;当移动快照时,这些文件自动删除。

   创建快照
你可以通过VMware Infrastructure Client(VI Client)里的Snapshot Manager或直接使用ESX Service控制台上的指令行工具创建快照。使用指令可以启动或关闭一台虚拟机。当创建快照时也可以暂停虚拟机。如果虚拟机切断了电源,你将不能选择对虚拟机存储进行快照。
通过使用直接连接到一台ESX服务器或连接到VirtualCenter的VI Client来管理快照。如果你选择使用命令行界面来代替,创建快照的语法是“vmware-cmd createsnapshot”,例如“vmware-cmd myvm1.vmx createsnapshot snap1 ’before upgrade’ 1 1”。停顿与存储的选择是1或0。选择1将在进行快照前停止文件系统写入。选择1将快照虚拟机存储状态进行存储。如果创建多个快照,一旦新的快照被创建,先前的快照变成只读的。

  删除或恢复快照
当你为一台虚拟机删除所有快照时,所有创建的delta文件被合并到虚拟机原先的VMDK磁盘文件,然后被删除。如果你选择只删除一个单独的快照,这个快照合并到它的父级快照。如果你选择恢复一个快照,当前的磁盘和存储状态被丢弃,虚拟机恢复到快照时的状态。无论你恢复哪个快照, 这个快照就成为新的父级快照

你能使用VI Client或vmware-cmd命令行工具删除或恢复快照。VI Client里的Snapshot Manager提供更高的灵活性,也比CLI(命令行界面)更容易使用。VI Client里的“Revert to Snapshot”选项与Snapshot Manager之间的一个重要差别是,恢复选项简单地恢复到最后一次快照,而Snapshot Manager能灵活地选择恢复到某一特定的快照。这叫做“Go To in Snapshot Manager”。
如果你使用vmware-cmd,语法是“vmware-cmd removesnapshots”,这能移除所有快照,而“vmware-cmd revertsnapshot”能恢复到最后一个快照。如果你需要移除或恢复特定的快照,你必须使用VI Client。
如果你恢复一个不包括存储状态的快照时,服务器将断电,一旦重新启动,将会使用先前的快照。如果快照包括存储状态,虚拟机将暂停,然后回到先前快照的磁盘和存储状态。

  磁盘空间与删除多个快照
先就要计划好在VMware虚拟机文件系统(VMFS)卷上为快照文件预留充足的磁盘空间,这很重要。这个经验法则是磁盘空间是虚拟机总磁盘大小的25%。不过,这个数量能根据服务器类型、保留快照多长时间及你是否计划使用多个快照改变。如果你计划快照里包括存储状态,你也将需要额外的磁盘空间,这个大小与分配给虚拟机的RAM等同。
只有一个快照的虚拟机在删除快照时不需要额外的磁盘空间。不过如果你有许多快照,当删除所有快照时,你将需要额外的磁盘空间。这是由于这些快照要合并到原始磁盘文件。


当使用VMware Infrastructure Client(VI Client)删除快照时,这个任务状态栏容易使人误解。一般来说,任务状态跳到95%完成率时应该很快完成,不过能注意到它在95%一直不动,直到整个删除过程完成。VirtualCenter有15分钟的超时时间。因此,就算你的文件仍然在删除,VirtualCenter将报告这个操作超时。
找到任务完成的方法是使用VI Client里的数据存储浏览器查看虚拟机目录。当delta文件消失了,你就知道快照删除完成了。
活动了很长时间的快照(因此变得很大)在删除时需要很长时间。快照删除需要的时间的变化取决于虚拟机活动等级;当关闭虚拟机时,删除时间短。ESX主机上的磁盘子系统活动数量也能影响快照删除时的时间。
100GB的快照需要3到6小时合并到原始磁盘。使用ESX 3.5的话,由于整合算法的变更,将需要更长的时间。这将影响虚拟机和ESX主机的性能。正因如此,你应该限制保留快照的时间长度,在你不需要它们时就删除


使用快照备份运行着的虚拟机
当虚拟机开着时,快照提供了一个备份原始VMDK文件的好办法。所有的写入操作在原始文件上暂停了,因此,复制它在另一个存储卷很安全。这就是像VMware Consolidated Backup和Vizioncore的vRanger功能那样的备份应用。它们给虚拟机进行快照、备份磁盘文件并在完成时删除快照。
诸如VMBK这样的脚本也提供这种功能。这些程序允许复制VMDK文件到本地存储或网络共享以提供另一种恢复重要虚拟机的方法