qemu snapshot

  • Post author:
  • Post category:IT
  • Post comments:0评论

本文介绍快照相关概念及命令。当要做snapshot时,可以通过qemu的monitor terminal 或是QMP(Qemu Monitor Protocol)向QEMU发送命令,命令执行的结果是将原始的镜像(original image)变成备份镜像(backup image),同时,生成一个snapshot(又称为活动镜像, active image),与原始镜像相比,所有新的变化都将记录在活动镜像里,另外,还将原始镜像(即备份镜像)以只读限挂载的权。

1、 离线外置snapshot

磁盘的快照被保存在一个文件中,创建时间点以后的数据被记录到一个新的文件中,可以在运行和关闭状态创建.

(1)创建镜像文件

  • 命令:# qemu-img create -f qcow2 centos.qcow2 5G

(2)使用创建的镜像启动虚拟机,并安装CentOS操作系统

(3)安装完虚拟机后,关闭虚拟机

(4)创建snapshot文件

  • 命令:# qemu-img create -f qcow2 -b centos.qcow2 snapshot.qcow2

  • 说明:-b指定的是原始镜像,快照创建完后,当前目录会生成一个 snapshot.qcow2文件  可以通过qemu-img info查看快照信息,快照的后端文件(backing file)指向的是centos.qcow2文件

(5)使用新的快照文件(snapshot.qcow2)启动虚拟机,并进行相关操作。之后的操作都将作用在snapshot.qcow2文件上

(6)当在新的虚拟机上进行的测试不理想,可以直接将快照文件删除,直接从原始镜像启动虚拟机,回到之前的状态

(7)如果想将快照里的相关操作合并到原始镜像中,可以通过下面命令

  • 命令:# qemu-img commit -f qcow2 snapshot.qcow2

  • 说明:此命令执行完后,会将snapshot.qcow2和其对应的后端文件进行合并,合并完后snapshot.qcow2文件依然留存。

2、 离线内置snapshot

内置snapshot指的是生成快照的相关信息保存在原始镜像中,而非创建新的快照文件。内置快照利用qcow2文件本身的特性进行实现的。

(1)创建镜像文件

  • 命令:# qemu-img create -f qcow2 centos.qcow2 5G

(2)使用创建的镜像启动虚拟机,并安装CentOS操作系统

(3)安装完虚拟机后,关闭虚拟机

(4)给镜像打快照标签

  • 命令:# qemu-img snapshot -c tag1 centos.qcow2

  • 说明:tag1指的是快照标签名称

  • 打完标签后,可以通过qemu-img snapshot -l 命令查看快照信息

(5)采用镜像文件centos.qcow2启动虚拟机,进行操作(创建一个test文件)

(6)使用快照标签tag1

  • 命令:# qemu-img snapshot -a 1 centos.qcow2

  • 说明:“1”对应的是tag1的ID

(7)重新启动虚拟机,发现系统已回滚到打快照标签的状态(test文件不存在)

(8)删除快照

  • 命令:# qemu-img snapshot -d 1 centos.qcow2

3、 在线snapshot

在QEMU内部有一个Guest Agent Daemon(qemu-guest-agent),用来接收QEMU monitor发来的命令,并执行对应的处理函数。在线快照可以通过QEMU Monitor发来的命令进行。

(1)创建镜像文件

  • 命令:# qemu-img create -f qcow2 centos.qcow2 5G

(2)使用创建的镜像启动虚拟机,并安装CentOS操作系统

(3)安装完虚拟机后,确保虚拟机运行

(4)查看block信息

  • 命令:(qemu)info block

  • 说明:可以看出centos.qcow2对应的设备名为ide0-hd0

(5)进行内置快照

  • 命令:(qemu)savevm s1

  • 说明:创建一个内置快照,名为s1

  • 命令:(qemu)info snapshot

  • 说明:查看内置快照信息

  • 命令:(qemu)loadvm s1

  • 说明:回到s1时刻状态

  • 命令:(qemu)delvm s1

  • 说明:删除内置快照s1

(6)进行外置快照

  • 命令:(qemu) snapshot_blkdev

  • 说明:为设备blockX创建一个快照文件,创建完以后,可以通过info block查看信息。新的信息中file参数已经变为snapshot文件,并新增了backing_file参数,其值指向原始镜像文件。

  • 命令:(qemu)commit

  • 说明:通过commit命令可以将snapshot合并(merge)到源镜像文件里。但是之后继续操作修改的还是snapshot文件,可以继续合并。

4、 Block Copy

Block Copy指的是虚拟机存储迁移。迁移时,采用Snapshot+Block stream完成存储迁移。首先通过对虚拟机进行在线外部快照,然后通过BlockStream技术合并快照,完成存储热迁移。BlockStream可以将backing file合并至active,与前面提及到的BlockCommit正好相反,可以通过下面命令完成。

  • 命令:block_stream <设备名>

  • 说明:可使用info block查看设备信息,发现backing_file文件已经没有,存储已经完全Copy到目的文件了。

参考文献

http://wiki.qemu.org/Features/Snapshots

发表评论