kvm虚拟化小结(七)内部快照Internal snapshot
qemu/kvm有三种快照,分别是内部(保存在硬盘镜像中)/外部(保存为另外的镜像名)/虚拟机状态 ,很多网站上提供的资料和教程也大多是内部快照功能。内部快照不支持raw格式的镜像文件,所以如果想要使作内部快照,需要先将镜像文件转换成qcow2格式
。转换命令为:
1qemu-img convert -f raw -O qcow2 centos.img centos.qcow2
具体可以通过如下方法查看镜像文件格式:
1[root@localhost file]# qemu-img info centos.qcow2
2image: centos.qcow2
3file format: qcow2
4virtual size: 30G (32212254720 bytes)
5disk size: 865M
6cluster_size: 65536
7[root@localhost file]#
一、创建快照
创建前先在虚拟机创建一个标记文件,在后面快照回滚时,可以通过对比该文件查看具体的效果 。
1[root@localhost ~]# virsh console ppd_centos
2Connected to domain ppd_centos
3Escape character is ^]
4login: root
5Password:
6Last login: Thu Apr 10 10:17:54 on ttyS0
7[root@localhost ~]# ls
8anaconda-ks.cfg install.log install.log.syslog
9[root@localhost ~]# cd /opt/
10[root@localhost opt]# ls
11[root@localhost opt]# touch abc
12[root@localhost opt]# echo 123 > abc
13[root@localhost opt]# ls
14abc
如下所示,连接到虚拟机后,在/opt目录下新建了一个文件,并在文件内写入123 。接下来开始创建快照及查看快照信息:
1[root@localhost file]# virsh snapshot-create ppd_centos
2Domain snapshot 1397528914 created
3[root@localhost file]# virsh snapshot-list ppd_centos
4 Name Creation Time State
5------------------------------------------------------------
6 1397528914 2014-04-15 10:28:34 +0800 running
这里查看快照信息也可以通过qemu-img命令查看,后面也会提到。接下来使用snapshot-current命令查看快照状态配置文件。
1[root@localhost file]# virsh snapshot-current ppd_centos
2<domainsnapshot>
3 <name>1397528914</name>
4 <state>running</state>
5 <creationTime>1397528914</creationTime>
6 <memory snapshot='internal'/>
7 <disks>
8 <disk name='vda' snapshot='internal'/>
9 <disk name='hdc' snapshot='no'/>
10 </disks>
11 <domain type='kvm'>
12 <name>ppd_centos</name>
13 <uuid>7a8638f6-912f-4ed6-0a3c-b5d1e3f187c3</uuid>
14 <memory unit='KiB'>1048576</memory>
15 <currentMemory unit='KiB'>1048576</currentMemory>
16 <vcpu placement='static'>1</vcpu>
17 <os>
18 <type arch='x86_64' machine='rhel6.5.0'>hvm</type>
19 <boot dev='hd'/>
20 </os>
21 <features>
22 ……………………省略
该命令执行的结果实际上是查看/var/lib/libvirt/qemu/snapshot/guest主机名/下的以快照name命令的xml文件 。
二、快照的回滚
我们再次修改标记文件,并继续创建快照
1[root@localhost opt]# echo "456" >> abc
2[root@localhost opt]# cat abc
3123
4456
5[root@localhost opt]#
创建快照和指定快照name的方法如下:
1[root@localhost ppd_centos]# virsh snapshot-create ppd_centos
2Domain snapshot 1397529759 created
3[root@localhost ppd_centos]# virsh snapshot-list ppd_centos
4 Name Creation Time State
5------------------------------------------------------------
6 1397528914 2014-04-15 10:28:34 +0800 running
7 1397529759 2014-04-15 10:42:39 +0800 running
8[root@localhost ppd_centos]# virsh snapshot-create-as ppd_centos test
9Domain snapshot test created
10virsh # snapshot-list ppd_centos
11 Name Creation Time State
12------------------------------------------------------------
13 1397528914 2014-04-15 10:28:34 +0800 running
14 1397529759 2014-04-15 10:42:39 +0800 running
15 test 2014-04-15 10:46:44 +0800 running
上面使用了snapshot-create-as 参数指定name值,上面提到的使用qemu-img命令查看快照信息的操作如下:
1[root@localhost file]# qemu-img info centos.qcow2
2image: centos.qcow2
3file format: qcow2
4virtual size: 30G (32212254720 bytes)
5disk size: 1.6G
6cluster_size: 65536
7Snapshot list:
8ID TAG VM SIZE DATE VM CLOCK
91 1397528914 252M 2014-04-15 10:28:34 00:53:07.200
102 1397529759 252M 2014-04-15 10:42:40 01:06:19.698
113 test 252M 2014-04-15 10:46:44 01:08:03.934
12[root@localhost file]#
恢复之前最好先关闭虚拟机 virsh shutdown 或virsh destroy ,当然在不关闭的情况下也可以做回滚,不过有新数据写入时会出现问题。还是建议先停机再做回滚。不停机回滚时,会有如下提示:
1[root@localhost file]# virsh snapshot-revert ppd_centos 1397529759
2error: revert requires force: Target controller type ide does not match source usb
这时候需要加上–force才可以 ,如下
1[root@localhost file]# virsh snapshot-revert --force ppd_centos test
2或
3[root@localhost file]# virsh snapshot-revert --force ppd_centos 1397528914
回滚的速度是非常快的,一般1-2秒的时间就OK了,再去查看状态,如下:
1[root@localhost file]# virsh snapshot-current ppd_centos
2<domainsnapshot>
3 <name>1397528914</name>
4 <state>running</state>
5 <creationTime>1397528914</creationTime>
6 <memory snapshot='internal'/>
7……………………省略
此时再去查看标记文件:
1[root@localhost opt]# virsh console ppd_centos
2Connected to domain ppd_centos
3Escape character is ^]
4[root@localhost opt]# ls
5abc
6[root@localhost opt]# cat abc
7123
这时,不难发现标记文件已经恢复到初始时的一个状态。
三、删除快照
1[root@localhost localhost]# virsh snapshot-delete ppd_centos 1397528914
2Domain snapshot 1397528914 deleted
快照的删除没什么好说,过程也很快,1-2秒钟的时候,不过快照删除后,通过ls -al查看发现qcow2镜像文件的大小并不会减少,而在create快照时会增加。
最后,我顺便对raw格式的镜像文件做一个内部快照测试:
1[root@localhost libvirt]# virsh snapshot-create ppd_win7
2error: unsupported configuration: internal snapshot for disk hda unsupported for storage type raw
可以发现其出现了报错提示不支持内部快照 。
总结:
关于kvm的内部快照备份时间比较长,一般要5-10分钟左右,造成该问题的原因是:savevm保存的是当前客户机系统的运行状态(包括:内存、寄存器、CPU执行等的状态),保存为一个文件,而且要在loadvm时可以完全恢复,这个过程比较复杂,如果客户机里面的内存很大、运行的程序很多,savevm比较耗时,也是可以理解的。暂时很难有什么改进方法。
而往往我们并不需要如何完整的一个快照,现网中可能只需要做disk的一个快照就OK了,所以这就要提到外部快照(External snapshot)。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/internal-snapshot/3179.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.