今天我们实验libvirt提供的快照功能,快照可以用于系统恢复,防止安装了某些软件或中病毒等情况导致系统损毁的情况。
一、快照类型
1) 磁盘快照
内部的:快照驻留在原来的镜像文件内部
外部的:快照以一个新的外部独立文件的形式存在,在此之后,原镜像变成只读,所有改变记录到快照文件里
磁盘快照由virsh snapshot-create命令创建
2) 内存快照
可以将虚拟机的内存信息记录到一个文件
由 virsh save 命令创建
3) 系统检查点
1) 和2)的结合,类似休眠的功能。
二、快照命令
Libvirt提供的Snapshot相关的命令有以下一些:
Snapshot-create Snapshot-create-as Snapshot-current Snapshot-delete Snapshot-dumpxml Snapshot-edit Snapshot-info Snapshot-list Snapshot-parent Snapshot-revert |
1. Snapshot-create
Libvirt既支持在虚拟机关闭的情况下打快照,也支持在虚拟机运行的情况下打快照。今天重点实验在虚拟机运行的情况下打快照的情况。
启动虚拟机(虚拟机域名是XP_VM)后,在virsh命令行下打一个snapshot的命令如下:
Virsh # snapshot-create XP_VM |
这个命令执行的是对XP_VM这个虚拟机执行磁盘和内存的snapshot,时间比较长,一般要花费5-10分钟,不是太实用。一般做快照的目的是防止镜像损毁,更关注的是只对磁盘打快照,而且希望把快照放在一个单独的镜像文件里。这时候我们就要用到一种外部快照的概念,方法如下:
先禁用apparmor(否则做外部快照的时候会报Permission Denied),请参考链接:http://blog.csdn.net/hbsong75/article/details/9285753
其次定义一个snapshot-create 的XML文件:
<domainsnapshot> <name>snap1</name> <disk name='hda' snapshot='external'> <driver type='qcow2'/> </disk> <disk name='hdb' snapshot='no'/> </domainsnapshot> |
上述定义说明为虚拟机的C盘(hda)做一个名字为<imageName>.snap1的外部快照;而D盘不需要做快照。该XML保存为domainsnapshot.xml
第三,执行下面的命令:
Virsh# snapshot-create XP_VM /opt/vm/xpvm1/domainsnapshot.xml –disk-only |
只对磁盘做外部快照执行就非常快,几秒钟就完成。
第四,用snapshot-list命令检查快照列表:
Virsh# snapshot-list XP_VM |
操作结果参考下图:
另外,也可以到虚拟机镜像文件目录查看,可以发现xp_c.snap1, xp_c.snap2等也生成出来了,xp_c.snap2就是当前快照镜像,而原来的镜像xp_c.img成为了xp_c.snap1的母镜像,它成为只读了。而当前运行的C盘镜像已经是xp_c.snap2了(可以用 virsh dumpxml XP_VM 检查看看现在的虚拟机定义中的disk是怎么样的!)。