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

 

更改快照文件位置

默认状态下,快照被写入每台虚拟机的主目录里。有时你需要改变它的位置,不占用属于虚拟机的卷上的空间。为每台虚拟机上的快照指定一个新的目录是可能的。当你这么做后,快照和vswp文件都被写入到这个目录里。

不过要注意,如果你的虚拟机在共享存储上,你指定本地存储作为地址将不能使用像VMotion/HA/DRS这样的功能。更改方法步骤如下:

1.关闭虚拟机,登录到服务器控制台。

2.使用Nano或Vi编辑虚拟机VMX文件。

3.使用下面的语句新添一行:workingDir = "/vmfs/volumes/SnapVolume/Snapshots/" .

4.如果你想使vswp文件留在虚拟机目录里,添加下面的到VMX文件:sched.swap.dir = "/vmfs/volumes/VM-Volume1/MyVM/".这步是可选的。此外,你不需要担心更新现有的“sched.swap.derivedName”参数,因为它由虚拟机生成,每次虚拟机开启时,就被写入config文件。

5.启动虚拟机,vswp、vmsn以及快照(delta-vmdk)文件现在位于这个目录里。

和快照一起使用VMotion

如果你要从一台主机移动一台运行快照的虚拟机到另一台主机,你将收到下面的警告:“在目的主机恢复到快照可能产生错误(警告)”。如果你更改了虚拟机任何文件的默认位置(像上面提到的快照或vswp文件),就会出现这个警告,当迁移完成时,这台虚拟机将崩溃。如果目的主机不能访问在资源主机上的文件里的存储,这种情况会发生。

因此,如果虚拟机在共享存储上并被配置,快照文件是在本地存储上,那么,如果你移动虚拟机到另一台主机,将会有问题。如果虚拟机所有文件都在共享存储上,并且在所有ESX主机上可访问,那么虚拟机就是正常工作的。VMware建议在移动虚拟机之前,委托(commit)所有的快照。不过如果你不这样做,也能工作。