当我们在虚拟机上做实验或测试时、难免碰到一些不熟悉的地方、此时做个快照、备份一下当前的系统状态
一旦操作失误、可以很快还原到出错前的状态、完成实验
最终避免一步的失误导致重新开始整个实验或测试的后果
当然、快照的功能远不止这个、
⑴ 定义
快照的英文就是 Snapshot、是对某一个特定文件系统在某一个特定时间时的一个具有只读属性的镜像
也就是、磁盘"快照"是我们在某个时刻'抓住时机'对虚拟机磁盘文件(vmdk)所进行的备份
当你创建一个快照,则那些现在可写的在那个点上将变成了只读
如果你创建了多个快照,那么你便有多个还原点可供恢复
⑵ 磁盘空间使用及增长率
快照文件最初很小(16M左右)
快照的增长率由服务器上磁盘的write I/O频度决定
⑶ 快照所含的文件类型
① vm_name-Δ.vmdk
比如:exam1-rhel5.4-000001-s011.vmdk
当你创建一个快照时,这些是特定的文件
Δ文件是基于vmdk上的变更位图,因此,它不能增长到比vmdk还大
例如:
RHEL5.8-s001.vmdk 为 1936000 K 则当创建一个快照时:RHEL5.8-s001.vmdk的大小为1935872 K
为虚拟机创建每一个快照时,都会创建一些Δ文件
当snapshot被删除或在snapshot manager里被恢复时,这些文件将自动删除
② vm_name.vmsd
比如:exam1-rhel5.4.vmsd
用于存储关于快照的元数据,为文本格式
包括快照显示名称(snapshot#.displayName)、UID和磁盘文件名等
在你没创建快照之前,这个文件的初始大小是0字节
也就是说,只要进行快照,这个文件就会增大和持续更新
在快照被delete后,这个文件不能被完全清除,一旦移除一个快照,它仍然会保留snapshot的UID
例子:
.encoding = "GBK"
snapshot.lastUID = "7"
snapshot.current = "6"
snapshot.mru0.uid = "6"
snapshot.mru1.uid = "7"
snapshot.mru2.uid = "5"
snapshot.mru3.uid = "1"
snapshot0.uid = "1"
snapshot0.filename = "exam1-rhel5.4-Snapshot1.vmsn"
snapshot0.displayName = "rhel5.4"
snapshot0.description = "系统刚安装好,环境刚配置完成,数据库软件还未安装"
snapshot0.createTimeHigh = "314967"
snapshot0.createTimeLow = "-495362528"
snapshot0.numDisks = "2"
snapshot0.disk0.fileName = "exam1-rhel5.4.vmdk"
snapshot0.disk0.node = "scsi0:0"
snapshot0.disk1.fileName = "exam1-rhel5.4-swap0.vmdk"
snapshot0.disk1.node = "scsi0:1"
snapshot1.uid = "5"
snapshot1.filename = "exam1-rhel5.4-Snapshot5.vmsn"
snapshot1.parent = "1"
snapshot1.displayName = "database sofe 10.2.0.2"
snapshot1.description = "1、只安装了数据库软件10.2.0.2|0D|0A2、实验脚本已上传"
snapshot1.createTimeHigh = "314971"
snapshot1.createTimeLow = "1951457584"
snapshot1.numDisks = "2"
snapshot1.disk0.fileName = "exam1-rhel5.4-000001.vmdk"
snapshot1.disk0.node = "scsi0:0"
snapshot1.disk1.fileName = "exam1-rhel5.4-swap0-000001.vmdk"
snapshot1.disk1.node = "scsi0:1"
snapshot2.uid = "6"
snapshot2.filename = "exam1-rhel5.4-Snapshot6.vmsn"
snapshot2.parent = "5"
snapshot2.displayName = "orcl emrep agent"
snapshot2.description = "1、手工建好orcl|0D|0A2、dbca建好emrep|0D|0A3、agent安装好"
snapshot2.createTimeHigh = "315010"
snapshot2.createTimeLow = "-2126901256"
snapshot2.numDisks = "2"
snapshot2.disk0.fileName = "exam1-rhel5.4-000002.vmdk"
snapshot2.disk0.node = "scsi0:0"
snapshot2.disk1.fileName = "exam1-rhel5.4-swap0-000002.vmdk"
snapshot2.disk1.node = "scsi0:1"
snapshot3.uid = "7"
snapshot3.filename = "exam1-rhel5.4-Snapshot7.vmsn"
snapshot3.parent = "6"
snapshot3.displayName = "physical datagurad"
snapshot3.description = "orcl配置了physical datagurad"
snapshot3.createTimeHigh = "315133"
snapshot3.createTimeLow = "1864149632"
snapshot3.numDisks = "2"
snapshot3.disk0.fileName = "exam1-rhel5.4-000003.vmdk"
snapshot3.disk0.node = "scsi0:0"
snapshot3.disk1.fileName = "exam1-rhel5.4-swap0-000003.vmdk"
snapshot3.disk1.node = "scsi0:1"
snapshot.numSnapshots = "4"
③ vm_name-.vmsn
比如:exam1-rhel5.4-Snapshot1.vmsn
snapshot的状态文件,里面存储的是使用快照时,一台虚拟机精确的运行状态
该文件取决于你是否保留这台虚拟机的存储作为snapshot的一部分
如果你选择保留虚拟机的存储,那么这个文件比较大,然后会分配给虚拟机最大的内存
⑷ 删除或恢复快照
--删除
删除所有snapshot,所有创建的Δ文件被合并到虚拟机原先的vmdk,然后被删除
删除一个snapshot,这个快照合并到它的父级快照
--恢复
无论你恢复哪个快照,这个快照就成为新的父级快照
在snapshot manager里可以看见这个父级快照,在它的下面有一个标签"you are here"
⑸ 磁盘空间和删除多个快照
这里有个经验:
事先在vmware虚拟机文件系统(vmfs)卷上为快照文件预留大概1/4虚拟机总磁盘的大小的磁盘空间
只有一个snapshot的虚拟机在删除快照时不需要额外的磁盘空间;不过,如果你有许多snapshot,当删除所有快照时
你将需要额外的磁盘空间,这是由于这些snapshot要合并到原始vmdk
例如:
假设你要删除有三个快照的虚拟机上的所有快照:S1 S2 S3
首先,S3将合并到S2,S2的大小将增加
接下来,S2合并到S1,S1的大小也将增加
最后,S1将合并到原始磁盘文件,这不需要额外的磁盘空间
当原始磁盘文件在整个操作结束时更新,这时快照文件才被删除,而不是每个合并过程时删除
因此,当删除它们时,拥有20GB快照文件的虚拟机可能需要额外的20GB
所以,使用较少额外磁盘空间来删除多个快照的解决办法是一个一个删除它们,从虚拟机父级快照开始到子级
使用这种方法,当快照被合并到先前的快照,只有先前快照增加了,然后删除
注意:当虚拟机有一个快照运行时,不要运行Windows磁盘碎片整理。碎片整理操作会改变许多磁盘块并能引起快照文件急速增加
⑹ 多长时间删除快照
活动了很长时间的快照(因此变得很大)在删除时需要很长时间
快照删除需要的时间的变化取决于虚拟机活动等级;当关闭虚拟机时,删除时间短
100GB的快照需要3到6小时合并到原始磁盘,这将影响虚拟机的性能
正因如此,你应该限制保留快照的时间长度,在你不需要它们时就删除
⑺ 使用快照备份运行着的虚拟机
snapshot在某种程度上就是一种备份
当虚拟机开着时,快照提供了一个备份原始VMDK文件的好办法
所有的写入操作在原始文件上暂停了,因此,复制它在另一个存储卷上是很安全的
⑻ 快照和克隆的区别