一、什么是快照?
快照可保存虚拟机在特定时刻的状态和数据。
状态包括虚拟机的电源状态(例如,打开电源、关闭电源、挂起)。
数据包括组成虚拟机的所有文件。这包括磁盘、内存和其他设备(例如虚拟网络接口卡)。
虚拟机提供了多个用于创建和管理快照及快照链的操作。通过这些操作,您可以创建快照、还原到链中的任意快照以及移除快照。可以创建层层快照树。
二、创建快照
创建快照比较简单
注意:虚拟机内部状态的转储将包括在快照中。内存快照的创建时间要长一些,但其允许虚拟机还原到创建快照时的运行中的状态。默认情况下此选项处于选中状态。如果未选中该选项,并且未选中静默,快照将创建在崩溃后仍保持一致的文件,可用来重新引导虚拟机。
但如果是独立磁盘,则不能创建内存快照,NBU不能对独立磁盘的虚机创建备份。
注意:创建内存快照时,虚拟机完全处于停止状态
静默状态:在生成快照时虚拟机电源已打开,VMware Tools 将让虚拟机中的文件系统处于静默状态。静默文件系统是使物理或虚拟计算机的磁盘数据进入适合备份的状态的过程。此过程可能包括将脏缓冲从操作系统内存高速缓存刷新到磁盘,以及其他更高级别的应用程序特定任务。
注意:静默表示暂停或改变在计算机上运行的进程的状态,特别是可能会在备份过程中修改存储在磁盘上的信息的进程,以保证一致的可用备份。内存快照不需要静默,其主要用于备份。
三、快照命令和文件解析
创建快照时,快照将由以下文件组成:
<vm>-<number>.vmdk 和 <vm>-<number>-delta.vmdk
各个虚拟磁盘的 .vmdk 和 -delta.vmdk 文件的集合在快照生成时连接到虚拟机。这些文件可称为子磁盘、redo log、或增量链接。这些子磁盘稍后可以视为未来子磁盘的父磁盘。在原始父磁盘中,每个子磁盘将构建一个从虚拟磁盘的当前状态指回原始状态的 redo log(每次一步)。
注意:
<number> 值在相同快照的所有子磁盘中可能不一致。文件名基于文件名的可用性来选择。
如果虚拟磁盘的大小大于 2TB,则 redo log 文件为 <vm>-<number>-sesparse.vmdk 格式。
<vm>.vmsd
.vmsd 文件是存储虚拟机快照信息的数据库,也是快照管理器信息的主要来源。该文件包含一些行条目,这些条目定义了快照之间以及每个快照的子磁盘之间的关系。
<vm>Snapshot<number>.vmsn
.vmsn 文件包含虚拟机的当前配置(也可包含虚拟机的活动状态)。捕获虚拟机的内存状态允许您还原到打开的虚拟机的状态。而使用非内存快照时,只能还原到已关闭的虚拟机的状态。创建内存快照比创建非内存快照需要更长时间。
注:越老的快照删除越慢,时间也更长。
四、深度解析
哪些产品使用快照功能?
除了可以使用快照管理器创建快照外,许多 VMware 以及第三方产品和功能也使用快照。广泛使用快照的一些 VMware 产品包括:
VMware Data Recovery
VMware Lab Manager
VMware vCenter 和 VMware Infrastructure Client(快照管理器、Storage vMotion)
注意:以上并不是详尽的列表。
快照如何工作?
我们的 VMware API 允许 VMware 和第三方产品利用虚拟机及其快照执行操作。以下是可以使用我们的 API 对虚拟机和快照执行的常见操作列表:
CreateSnapshot:创建新的虚拟机快照。作为一个副作用,该操作将更新当前快照。
RemoveSnapshot:移除快照并删除任何关联的存储。
RemoveAllSnapshots:移除所有与虚拟机关联的快照。如果虚拟机没有任何快照,则此操作仅会成功返回。
RevertToSnapshot:将虚拟机的执行状态更改为此快照的状态。这等同于使用 vSphere/VI Client GUI 时快照管理器下的“转至”选项。
Consolidate:合并 redo log 的层次结构。该操作仅在 vSphere 5.0 及更高版本中可用。
如下是在 VMware 环境中处理如何创建、移除或恢复快照请求的高级别概述:
创建、移除或恢复虚拟机快照的请求是使用 VMware API 从客户端发送到服务器。
该请求将转发到当前托管存在问题的虚拟机的 VMware ESX 主机。
注意:只有在原始请求发送到其他服务器(例如管理 ESX 主机的 vCenter)时才会发生此情况。如果快照包括内存选项,则 ESX 主机会将虚拟机内存写入磁盘。
注意:在整个写入内存期间虚拟机将处于停止状态。无法预先计算停止时间的长度,该时间长度取决于存在问题的磁盘的性能和写入的内存量。ESXi/ESXi 4.x 和更高版本在写入内存时的停止时间较短。有关详细信息,请参见 Taking a snapshot with virtual machine memory stuns the virtual machine while the memory is written to disk (1013163)。如果快照包括静默选项,则 ESX 主机将请求客户机操作系统通过 VMware Tools 静默磁盘。
注意:视客户机操作系统而定,静默操作可以通过同步驱动程序、vmsync 模块或 Microsoft 卷影复制服务 (VSS) 完成。有关静默的详细信息,请参见 Troubleshooting Volume Shadow Copy (VSS) quiesce related issues (1007696) 获取有关 VSS 的信息,或 A virtual machine can freeze under load when you take quiesced snapshots or use custom quiescing scripts (5962168) 获取有关 SYNC 驱动程序的信息。ESX 主机对虚拟机快照数据库(
.vmsd
文件)进行相应的更改,这些更改反映在虚拟机的快照管理器中。
注意:移除快照时,快照管理器中的快照实体是在对子磁盘进行更改之前移除的。从子磁盘继续运行虚拟机时,快照管理器不包含任何快照条目。有关详细信息,请参见 Committing snapshots when there are no snapshot entries in the snapshot manager (1002310)。ESX 主机会调用与虚拟磁盘 API 函数类似的函数,对子磁盘(
-delta.vmdk
和.vmdk
文件)和磁盘链进行更改。
注意:移除快照期间,如果子磁盘很大,则操作可能需要较长时间。这可能导致 VirtualCenter 或 VMware Infrastructure Client 中出现超时错误消息。有关超时错误消息的详细信息,请参见 vCenter operation times out with the error:Operation failed since another task is in progress (1004790)。
子磁盘
使用快照创建的子磁盘是稀疏磁盘。稀疏磁盘采用写入时复制 (COW) 机制,其中虚拟磁盘不包含任何数据,直到通过写入操作将数据复制到磁盘。此优化可节省存储空间。粒度是稀疏磁盘使用写入时复制机制的度量单位。每个粒度均是一个包含虚拟磁盘数据的扇区块。默认大小为 128 个扇区或 64 KB。
注意:稀疏磁盘通常创建为 VMFSSPARSE 类型。自 vSphere 5.5 开始,对于大小为 2TB 或更大的任意 vmdk,稀疏磁盘的类型均为 SESPARSE。
子磁盘和磁盘使用情况
重要的是要注意以下有关子磁盘空间利用率的要点:
如果虚拟机正在运行快照,则其正在对子磁盘或稀疏磁盘进行更改。对该磁盘执行的写入操作越多,该磁盘就会变得越大,直至达到上限(基础磁盘大小与少量开销之和)。
在子磁盘的空间要求中,除了其所依赖的父磁盘的空间要求之外还有附加要求。如果虚拟机具有一个带子磁盘的 10 GB 磁盘,则使用的空间为 10 GB + 子磁盘的大小 + .vmsn 文件大小 + 开销。
子磁盘会增长得很大,乃至填满整个数据存储,但这是因为包含数据存储的 LUN 不够大,无法容纳基础磁盘、已创建的快照数量、相关开销和已创建的 .vmsn 文件。
子磁盘的增长速度直接取决于对磁盘执行的 I/O 量。
子磁盘的大小对删除与子磁盘关联的快照所用的时间有直接影响。
有关子磁盘和磁盘使用情况的详细信息,请参见:
No more space for the redo log error when attempting to start a virtual machine (1002103)
A snapshot removal can stop a virtual machine for long time (1002836)
Troubleshooting a datastore or VMFS volume that is full or near capacity (1003412)
磁盘链
通常,首次创建快照时,将通过父磁盘创建第一个子磁盘。连续快照将从链上的最后一个子磁盘生成新的子磁盘。如果快照链中有多个分支,则关系可能会发生更改。