作者:esxguru (ESXguru.com版权所有)
很多用户不知道如何查看一个虚拟机( VM, virtual machine)是否正运行在snapshot(s) 上, 或者还尚未意识到有效的管理 snapshots的重要性。 以下,我就来讲解一下验看 snapshots 的几种方法以及为何需要慎重管理 snapshots。
如果让一个虚拟机长期运行在 snapshot之上,可能会导致以下问题的发生:
- 随着 VM的运行,snapshot的 delta vmdk 文件会逐渐增大,这样就会占用datastore上越来越多的空闲空间。一旦空闲空间被用尽,那么会导致VM down/crash,没有响应, 甚至corrupted.
- 随着 VM的运行,snapshot的 delta vmdk 文件会逐渐增大。就算datastore有足够的空间,那么将来在删除 snapshot时做delta 数据合并时,就会花费相当长的时间。如果有很多个snapshots,并且都有非常多的delta 数据,也可能无法再做online snapshot合并,;而必须计划安排 VM的 downtime来做offline snapshot 合并。
- 在ESX4.0 Update2之前的版本,如果VM有多个snapshots,那么snapshot合并还需要额的空闲空间。 这个额外的空间大小,取决于delta data的多少。
那么如何查看一个VM是否仍然有snapshot呢?我们可以用以下这些方法。
- 从 “snapshot manager”里查看是否有snapshot 项,请参看下图。

上图中,我们可以看见一个名为 VM-Win2K8的虚拟机,有两个快照(snapshot1 和snapshot2)。
但请大家注意,这个方法并不一定百分百准确。为什么这么说呢?因为每次当我们删除snapshot的时候,ESX都会先将这个snapshot 从snapshot的database里面删去,然后才在后台开始真正的删除操作。如果任何错误发生而导致删除失败,那么虚拟机就可能仍然运行在snapshot之上,而”snapshot manager”却不会再显示出来了。
所以,真正有效的准确的方法,是以下的方法2和方法3。
-
从VM 的配置(“edit setting”)里面查看VM的virtual disk(s)实际是指向哪个文件。
如果virtual disk的名字是VMname.vmdk, 那么这个 VM就指向base disk.
如果virtual disk的名字是VMname-00000#.vmdk, 那么这个 VM就指向某个 snapshot.

在上面这个截图中,我们可以看到虚拟机VM-Win2K8的虚拟硬盘就指向一个VM-Win2K8-000001.vmdk文件,这个就是一个snapshot(快照)。
- 如果大家对 Linux比较熟悉,我们也可以从SSH session/ ESX service console上,先切换到VM 的文件夹,再运行下图中的命令,直接查询虚拟机的配置文件( .vmx)指向哪些文件。
同理,如果virtual disk的名字是VMname.vmdk, 那么这个 VM就指向base disk。如果virtual disk的名字是VMname-00000#.vmdk, 那么这个 VM就指向某个 snapshot.

上图中,一个名为 Windows7的虚拟机,我在它的配置文件Windows7.vmx文件中,用 grep命令查找其包含的所有的vmdk文件。查找出来的结果是SCSI0:0这个虚拟盘,指向 Windows7-000002.vmdk这个snapshot 文件。
【总结】
这三个方法相结合,我们就能准确的判断出VM是否正运行于快照之上。这样,就可以防止在用户自己不知情的情况下,导致snapshot的delta文件逐渐增大,而用尽datastore上所有的空间。
【联想】
或许有些朋友会想问,除了一个一个虚拟机地查看,有没有什么办法一下子把多个datastore统统检查一遍,看是否有哪个VM 正运行于snapshot上?
这个问题,我今后会在我们的网站(esxguru.com)上和大家探讨。