分享

libvirt/qemu特性之快照

xioaxu790 发表于 2014-9-9 16:22:52 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 17875
本帖最后由 xioaxu790 于 2014-9-9 16:28 编辑
问题导读
1、虚拟机快照有哪些分类?
2、如何使用内置快照qemu-img?
3、虚拟机快照实现有哪些参考?





快照分类
磁盘快照
对磁盘数据进行快照。主要用于虚拟机备份等场合。
按快照信息保存为可以可以分为:
内置快照
快照数据和base磁盘数据放在一个qcow2文件中。
外置快照
快照数据单独的qcow2文件存放。


按虚拟机状态可以分为:
关机态快照
数据可以保证一致性。
运行态快照
数据无法保证一致性,类似与系统crash后的磁盘数据。使用是可能需要fsck等操作。

按磁盘数量可以分为
单盘
单盘快照不涉及原子性。
多盘
涉及原子性。主要分两个方面:1.是所有盘快照点相同 2.所有盘要么都快照成功,要么都快照失败。
主要依赖于qemu的transaction实现。

内存快照
对虚拟机的内存/设备信息进行保存。该机制同时用于休眠恢复,迁移等场景。
主要使用virsh save(qemu migrate to file)实现。
只能对运行态的虚拟机进行。

检查点快照
同时保存虚拟机的磁盘快照和内存快照。用于将虚拟机恢复到某个时间点。可以保证数据的一致性。


内置快照
利用qemu-img
  1. qemu-img snapshot -c snapshot01 test.qcow2  //创建
  2. qemu-img snapshot -l test.qcow2             //查看
  3. qemu-img snapshot -a snapshot01 test.qcow2  //revert到快照点
  4. qemu-img snapshot -d snapshot01 test.qcow2  //删除
复制代码



利用Libvirt
  1. snapshot.xml
  2.   <domainsnapshot>
  3.     <name>snapshot01</name>
  4.     <description>Snapshot of OS install and updates by boh</description>
  5.     <disks>
  6.       <disk name='/data/os-multi/controller.qcow2'>
  7.       </disk>
  8.     </disks>
  9.   </domainsnapshot>
  10. virsh snapshot-create controller snapshot.xml  //创建快照。快照元信息在/var/lib/libvirt/qemu/snapshot/(destroy后丢失)
  11. virsh snapshot-list controller --tree          //树形查看快照。
  12. virsh snapshot-current controller              //查看当前快照
  13. virsh snapshot-revert controller snapshot02    //恢复快照
  14. virsh snapshot-delete controller snapshot02    //删除快照
复制代码


功能参数:
    --quiesce        quiesce guest's file systems
    --atomic         require atomic operation


外置快照
利用qemu-img
关机态
可以利用qcow2的backing_file创建。
运行态
可以利用qemu的snapshot_blkdev命令。(为了数据一致性,可以使用guest-fsfreeze-freeze和guest-fsfreeze-thaw进行文件系统的冻结解冻结操作)
多盘可以利用qemu的transaction实现atomic。

利用libvirt
创建
  1. virsh snapshot-create-as --domain f17-base snap1 snap1-desc \
  2. --disk-only --diskspec vda,snapshot=external,file=/export/vmimages/sn1-of-f17-base.qcow2 \
  3. --atomic
  4. # virsh domblklist f17-base
  5. Target     Source
  6. ----------------------------------------------------
  7. vda        /export/vmimages/sn1-of-f17-base.qcow2
复制代码


删除(快照链缩短)
外置快照的删除,相对于内置快照稍显复杂。
主要利用blockcommit或者blockpull来实现。
blockcommit是向base方向合并,blockpull则相反。
  1. virsh blockcommit --domain f17 vda  --base /export/vmimages/sn2.qcow2 --top /export/vmimages/sn3.qcow2 --wait --verbose
  2. #只支持pull到最前端  
  3. virsh blockpull --domain RootBase --path /var/lib/libvirt/images/active.qcow2  \
  4.   --base /var/lib/libvirt/images/RootBase.qcow2 --wait --verbose
  5. virsh snapshot-delete --domain RootBase Snap-3 --metadata         #删除无用的快照
复制代码


其他方法
利用LVM创建。利用文件系统能力创建。利用存储本身的功能创建。

参考
#libvirt的虚拟机快照实现过程:
  1. optionally - use the guest-agent to tell the guest OS to quiesce I/O
  2. tell qemu to migrate guest memory to file; qemu pauses guest
  3. for each disk:
  4.   tell qemu to pause disk image modifications for that disk
  5. libvirt resumes qemu (but I/O is still frozen)
  6. for each disk:
  7.   libvirt creates the snapshot
  8.   if the snapshot involves updating the backing image used by qemu:
  9.     pass qemu the new fd for the disk image
  10.   tell qemu to resume disk I/O on that disk
复制代码


#虚拟机快照恢复实现过程:
  1. for each disk:
  2.   revert back to disk snapshot point
  3. tell qemu to do incoming migration from file
复制代码


本文转载自:http://blog.csdn.net/halcyonbaby/article/details/19709735

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条