VMware的虚拟机快照深入解析

一、什么是快照? 快照可保存虚拟机在特定时刻的状态和数据。 • 状态包括虚拟机的电源状态(例如,打开电源、关闭电源、挂起)。 • 数据包括组成虚拟机的所有文件。这包括磁盘、内存和其他设备(例如虚拟网络接口卡)。 虚拟机提供了多个用于创建和管理快照及快照链的操作。通过这些操作,我们可以创建快照、还原到链中的任意快照以及移除快照。

二、快照文件 快照由存储在受支持的存储设备上的文件组成。“执行快照”操作会创建 .vmdk、-delta.vmdk、.vmsd 和 .vmsn 文件。默认情况下,第一个以及所有增量磁盘与基本 .vmdk 文件存储在一起。.vmsd 和 .vmsn 文件存储在虚拟机目录中。

增量磁盘文件:客户机操作系统可以写入的 .vmdk 文件。增量磁盘表示虚拟磁盘的当前状况和上次执行快照时存在的状况之间的差异。执行快照时,将保留虚拟磁盘的状况,从而阻止客户机操作系统写入,并会创建增量磁盘或子磁盘。

增量磁盘具有两个文件,即包含虚拟磁盘相关信息(例如几何结构和父子关系信息)的较小的描述符文件和包含原始数据的对应文件。 注:如果要在 vSphere Client 中使用数据存储浏览器查看数据存储,则仅会看到一个条目用于表示这两个文件。 构成增量磁盘的文件称为子磁盘或重做日志。子磁盘为稀疏磁盘。稀疏磁盘使用写入时复制机制,其中虚拟磁盘不包含任何数据,直到通过写入操作将数据复制到磁盘。此优化可节省存储空间。粒度是稀疏磁盘使用写入时复制机制的度量单位。每个粒度均是一个包含虚拟磁盘数据的扇区块。默认大小为 128 个扇区或 64 KB。

平面文件 -flat.vmdk 文件,组成基本磁盘的两个文件之一。平面磁盘包含基本磁盘的原始数据。该文件在数据存储浏览器中不显示为单个文件。

数据库文件 .vmsd 文件,包含虚拟机的快照信息,并且是快照管理器的主要信息源。该文件包含行条目,这些条目定义了快照之间以及每个快照的子磁盘之间的关系。

内存文件 .vmsn 文件,包含虚拟机的活动状况。通过捕获虚拟机的内存状况,可恢复到已打开虚拟机状况。使用非内存快照,仅能恢复到已关闭虚拟机状况。创建内存快照需要的时间比创建非内存快照需要的时间长。ESX 主机将内存写入磁盘所需的时间与配置虚拟机使用的内存量有关。

三、快照原理 快照采用的是“写时复制(Copy On Write)”的技术,实现原理比较简单,快照时复制一份原磁盘的索引,指向的实际数据均为原始磁盘的数据,只有当原镜像的的数据发生变化时,才将变化区域的在变化之前的数据复制一份给快照对应位置。所以打快照的时候数据比较小,后面会越来越大。

虚拟机磁盘采用的是vmdk格式的文件,虚拟机拥有几个磁盘对虚机做快照就会有几个vmdk文件,虚拟机快照产生的数据是与虚拟机磁盘数据存放在同一个存储空间中的,所以存储位置就是虚拟机本身的存储位置,即如果虚拟机所在存储访问不了,其快照也就无法恢复了。 当我们为虚拟机创建快照时,当前可写的VMDK文件变成为只读状态,并且创建一个新文件(称之为快照文件)来保存变化的内容(使用in-file delta technology)。

快照链:就是多个快照组成的关系链,这些快照按照创建时间排列成链 在初始状态下,快照文件的大小为16MB,并随着虚拟机对磁盘文件的写操作而增长。快照文件按照16MB的大小进行增长以减少SCSI reservation冲突。当虚拟机需要修改原来的磁盘文件的数据块时,这些修改会被保存到快照文件中。当在快照文件中的已经修改过的数据块需要被再次修改时,这些修改将覆盖快照文件中的数据块,此时,快照文件大小不会改变。因此,快照文件的大小永远不会超过原来的VMDK文件的大小。 快照文件的变化频率取决于虚拟机应用的写的繁忙程度,例如对于Exchange和SQL、ORACLE等应用,快照文件变化比较快。多个快照的情况下,在创建新的快照时,之前的快照文件变成只读的状态。

四、虚拟机快照 VMware的虚拟机“快照”功能是对虚拟机磁盘文件VMDK的某个状态创建副本,当系统出现异常,可以通过恢复快照来保证系统的正常。VMwware的虚拟机快照技术是非常有用的,但是也有需要注意的局限性。 1、快照并不是非常适合用于数据保护 无论是基于SAN的快照技术,还是建立在文件系统或操作系统中的,快照技术能够在错误出现时让损失降到最低。但并不是所有的快照技术并非都是面向意外的数据丢失,比如VMware ESX服务器及虚拟化平台上的快照技术、数据库的快照。 从根本上来说,VMware的快照比较适合两种情况:1、将一个虚拟机的磁盘隔离,不再写入数据,这样可以进行备份 2、在打补丁和软件升级时提供一个短期的自动恢复功能。在开发环境中,可能经常会见到利用快照来保存一些实时状态的镜像,但是这样的方式在一个性能敏感的生产环境中是不可取的。

在这个图中,虚机可方便的恢复到每次补丁前的状态 在一个典型的环境中,一个虚拟机的磁盘资源是由位于VMware独有的VMFS文件系统或NFS存储上的VMDK文件(virtual machine disk的缩写)组成,它的大小几乎等同于虚拟机的磁盘资源。所以如果你的Windows 2000 professional有15GB的系统硬盘,那么在VMFS卷上会出现一个15GB的VMDK文件。   如果使用hypervisor对虚拟机进行快照,系统会创建第二个VMDK文件(有时叫做redo log),这个文件存储着进行快照后虚拟机所有写入的东西,这样的功能具有几个明显的优势:   首先,由于快照VMDK文件存储着对基础VMDK的写入操作,实际上基础VMDK不会被更改。这意味着在快照建立之后如果出现一些错误,可以很容易的将这些错误“扔掉”,恢复到进行快照之前的基础磁盘状态。同样,由于当快照存在时基础VMDK并不会被写入,这样就可以安全的对基础VMDK创建副本来进行备份。

2、快照容易消耗大量的存储空间 当快照创建后虚拟机执行一个读操作,hypervisor会检查快照VMDK,查看是否有被读取的区块存在。如果有,则从快照中为虚拟机提供这个区块,如果没有,虚拟机还需要去读取基础VMDK。如果只有一个快照,这并不是什么问题,只不过是重复来读取VMDK。但是如果有大量快照存在,比如在两周内每天建立一个,那么hypervisor需要在14个快照文件中查找这个区块,这就会消耗大量的读I/O。   更糟糕的是,没有完善的机制来阻止这些快照的增长,如果你每天为一个Windows 2000虚拟机进行快照,大概每天需要消耗2GB的存储空间,这对大多数虚拟机来说还是非常保守的数字。大体上来说,你需要为虚拟机配置双倍的空间来存储这些更改。   换个角度来看,实际几乎所有的快照技术,包括SAN快照,都会消耗很大的存储空间。但有所不同的是VMware快照没有自动保护机制,防止VMFS卷被不断增长的快照填满。而大部分SAN当分配的快照空间被填满时会自动删除最早的快照。一旦VMSF卷被填满,当前的快照文件就不能再写入,而虚拟机也可能会崩溃。如果有很多虚拟机,并且快照都存在相同的VMFS卷上,这些虚拟机都可能会崩溃,这是灾难性的。   还有一个潜在的陷阱,hypervisor会通过磁盘停顿进程(disk quiescing)试图确认快照的应用程序持续状态,尽管可以在不停顿硬盘的情况下创建快照,但是这时候只能建立crash-consistent快照,如果在crash-consistent快照建立后恢复基础磁盘,操作系统和应用程序会出现貌似非正常关机时的状态。磁盘停顿功能让操作系统和应用程序可以找到合适的停顿点,比如完成写入,防止数据被损坏。   根据操作系统在虚拟机中的运行状况,可以通过不同的方式实现磁盘停顿。这些都需要应用安装在虚拟机操作系统中的VMware工具包。如果你运行的是一个新近版本的Windows系统,VMware工具将使用微软的卷影副本服务(VSS)在虚拟机I/O中创建一个临时的停顿,让VMware软件来创建更底层的磁盘快照。 然而,在进行大量磁盘I/O传输的虚拟机中,如微软SQL数据库平台或Exchange,卷影副本服务(VSS)可能会需要大量的调试才能工作正常。VSS工作并不是那么稳定,有时候,这次正常,而下次就可能出现故障。这是恼人的,特别是在希望通过停顿快照来对虚拟机进行更好的备份的时候。

3、快照与磁盘空间利用率 • 如果虚拟机正在运行快照,则其正在对子磁盘或稀疏磁盘进行更改。对该磁盘执行的写入操作越多,该磁盘就会变得越大,直至达到上限(基础磁盘大小与少量开销之和)。 • 在子磁盘的空间要求中,除了其所依赖的父磁盘的空间要求之外还有附加要求。如果虚拟机具有一个带子磁盘的 10 GB 磁盘,则使用的空间为 10 GB + 快照的大小 + .vmsn 文件大小 + 开销。 • 子磁盘会增长得很大,乃至填满整个数据存储,但这是因为包含数据存储的 LUN 不够大,无法容纳基础磁盘、已创建的快照数量、相关开销和已创建的 .vmsn 文件。 • 子磁盘的增长速度直接取决于对磁盘执行的 I/O 量。 • 子磁盘的大小对删除与子磁盘关联的快照所用的时间有直接影响。

4、快照整合 快照整合命令将在不违反数据依赖关系的情况下搜索要进行组合的层次结构或增量磁盘。整合后,将移除冗余磁盘,这样便可提高虚拟机性能并保存存储空间。快照整合:把所有的快照整合为一个快照,整合以后将移除冗余磁盘,可以提高虚拟机性能. 在只有一个快照时,在删除快照时不需要额外的空间。因为要么直接删除快照文件,要么把快照文件和VMDK磁盘文件相合并。(如果一个虚机挂载有多个盘,则对虚机快照则在多个盘上都有快照文件,整合时需要预估每个盘的剩余空间(空间不够需要单另挂一个大的盘把数据量包住),而且整合时的操作是串行的。) 但是在有多个快照的情况时,效果就不一样了。 假设要删除一个虚拟机的所有快照,该虚拟机有三个快照,snap1、snap2和snap3。首先,snap3的快照文件要被合并到snap2的快照文件 中,导致snap2占用空间增加。然后,snap2被合并到snap1中,导致snap1占用的空间增加。最后,snap1合并到VMDK文件中,此时不会增加空间开销。在合并完成后,快照才会被删除。 一种替代的方式是依次删除快照,这样就不会增加所需要的空间,只是稍微繁琐一些。 删除快照所需要的时间 通 过VI客户端删除快照时,VI的状态栏中显示的信息可能会产生误导。通常,状态栏会很快到达95%完成的状态,但是会在95%的状态等待较长的时间一直到 合并完成。VirtualCenter对所有的任务都有15分钟的超时值,即使后台还在合并,但是过了15分钟后,VirtualCenter会报告该操作超时。 一种查看该任务是否完成的方式是通过VI客户端来浏览该虚拟机的datastore。如果该快照对应的delta文件不存在了,则说明该快照被删除了。 如果快照存在的时间比较长,那么快照文件就会变得比较大,因此在删除快照时就需要比较长的时间进行合并。合并的时间取决于虚拟机的繁忙程度,在关机的状态下合并的速度较快。而ESX服务器后端的磁盘子系统的繁忙程度也会影响合并的时间。 一 个100GB的快照文件可能需要3-6个小时来合并到原来的VMDK文件中。而从ESX3.5开始,由于VMware修改了合并的算法,可能需要更长的时 间来合并(参见VMware文档Consolidation of large or deeply nested snapshots)。这会影响虚拟机和ESX服务器的性能。因此,建议限制快照的保留时间,当不需要时即刻删除快照。 快照和metadata锁对ESX性能的影响 快 照对ESX服务器以及虚拟机的性能影响体现在几个方面。但创建快照时,虚拟机的活动会暂时停顿一下,此时如果通过ping命令去检查虚拟机的状态,可以看 到一些timeout的response。此外,创建快照会导致metadata的更新,为了避免SCSI Reservations冲突会短时间内对LUN加锁,从而导致在短暂的时间内,这个LUN将只能由一个ESX服务器进行排他性访问。 如 果为虚拟机创建了快照,虚拟机在运行的状态中,该快照是活跃的。只要快照是活跃的,那么虚拟机的性能就会下降。因为ESX服务器对delta文件的写入方 式不同于VMDK文件,而且效率相对较低。delta文件每次以16MB的大小来增长,它会导致另一种metadata锁。 最后,删除或者回滚快照都会创建一个metadata锁。此外,删除快照时可能会导致性能比较大的下降,虚拟机越忙越明显。为了避免这个问题,快照的删除最好在非高峰时期。

5、快照的限制 快照可能会影响虚拟机性能,且不支持某些磁盘类型或使用总线共享配置的虚拟机。快照作为短期解决方案用于捕获时间点虚拟机状况很有用,但不适用于长期虚拟机备份。另外要避免多个快照,快照不要保留太长时间。 ■VMware 不支持对裸磁盘、RDM 物理模式磁盘或在客户机中使用 iSCSI 启动器的客户机操作系统的快照。 ■在执行快照之前必须关闭具有独立磁盘的虚拟机的电源。不支持具有独立磁盘的已打开电源或已挂起的虚拟机的快照。 ■PCI vSphere Direct Path I/O 设备不支持快照。 ■VMware 不支持为总线共享配置的虚拟机的快照。如果需要使用总线共享,则作为备用解决方案,请考虑在客户机操作系统中运行备份软件。如果虚拟机当前具有快照,并阻止您配置总线共享,请删除(整合)这些快照。 ■快照提供备份解决方案可以使用的磁盘的时间点映像,但快照不是备份和恢复的可靠方法。如果包含虚拟机的文件丢失,则其快照文件也丢失。另外,大量快照将难于管理,占用大量磁盘空间,并且在出现硬件故障时不受保护。 备份解决方案(如 VMware Data Recovery)使用快照机制来冻结虚拟机的状况。Data Recovery 备份方法具有可降低快照限制的其他功能。 ■快照可能会对虚拟机的性能产生负面影响。性能降低基于快照或快照树保持原位的时间、树的深度以及执行快照后虚拟机及其客户机操作系统发生更改的程度。另外,还可能会看到打开虚拟机电源所花费的时间变长。不要永久从快照运行生产虚拟机。

尽管有很多不足,但如果使用正确,VMware的快照可以说是一个优秀的工具,无论是在主要的升级或打补丁前为虚拟创建短期的实时副本,还是允许第三方备份软件对虚拟机执行direct-from-SAN的备份。然而,能有效使用快照功能的前提是理解它们是如何工作的,可能偶尔需要进行一些调试。 另外需要注意的是,如果要在运行关键任务的虚拟机应用VMware快照功能,要更加小心谨慎,最好先进行测试。 注:VMWARE推荐单个快照实例的保存时间最长为72小时。 备份和快照的情况是不一样的。 • 虚拟机从备份还原的时候必需在还原后才可以开机 • 虚拟机从快照恢复时,可以保持开机状态

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券