目前项目中已经存在的快照是针对卷的快照,并且需要关机。所以目前的需求有两个:1.不关机快照;2.针对虚拟机的快照,而不是针对券的快照。

由需求所以针对libvirt做了一些实验,纪录如下:

环境:
物理机环境:
OS:centos 6.4 x64
Libvirt:libvirt 0.10.2

实验1:
虚拟机只有系统盘,没有数据盘,做快照之前运行top程序,快照回滚之前创建一些文件,且停止top的运行。回滚成功到达快照的状态(即top运行,没有创建文件)

做快照之前虚拟机镜像:

image: vino.img
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 1.1G
cluster_size: 65536

做一次快照之后虚拟机镜像:

image: vino.img
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 1.3G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 vino-snapshot1 187M 2014-03-03 16:30:46 00:04:24.828

得出结论:
1.第一次快照比较慢,大概需要1分30s的时间,这时候虚拟机处于挂起的状态,一个快照大概占用200M空间。
2.删除第一次快照之后,虚拟机的硬盘空间没有减少,所以如果连续做10个快照,就需要耗费将近2G空间。好消息是,删除第一次快照之后,再做一个快照,只需要5s。
3.第一次快照不删除,做第二次快照还是需要1分多钟。所以慢的原因应该是往母镜像写数据的原因。
4.回滚快照很快,大概需要10s左右。
5.回滚快照,当下的配置和做快照的时候的配置可以不一样的,比如:cpu个数一样(内存大小,外挂数据盘,没尝试,但是应该也必须一样)。比如拿cpu来说,在cpu为1的时候做了快照,如果修改配置cpu为2,回滚之后cpu变回1,且重启后还是1。[回滚的时候需要增加 --froce参数]
6.在做一次快照之后,可以删除快照,并不影响虚拟机的状态。
7.如果有多个快照的情况下。比如base---->A.snapshot---->B.snapshot。你回滚到B.snapshot的时候,你去删除A.snapshot是没问题的,给人的感觉就是每个快照都是独立的。。(还有待进一步的验证)
8.有快照的虚拟机可以destory,但是不能undefine,如果undefine需要先删除快照。
9.开机状态下做完快照,之后关闭虚拟机。然后回滚,虚拟机恢复到开机状态。

实验2:
虚拟机既有有系统盘,又有数据盘。

实验方法是在top命令运行的时候做快照。然后针对数据盘添加一些文件,之后回滚。虚拟机回滚到top命令运行的状态,且查看数据盘里没有数据。

结论是:
该快照是针对虚拟机的快照。
做完快照之后,数据盘也能回滚到快照前的状态,所以,满足针对于虚拟机的快照。

实验配置文件所用命令:
  <domainsnapshot>
<name>snapshot01</name> //快照名
<description>Snapshot of OS install and updates</description>//描述
<disks>
//什么都不填是对所以的硬盘做快照
</disks>
</domainsnapshot>
virsh snapshot-create XXXX xxx.xml
virsh snapshot-revert --force XXXX xxxx

实验3:
在代码中实现快照的创建和回滚

调用Domain类中的snapshotCreateXML(String xmlDesc)方法和revertToSnapshot(DomainSnapshot snapshot)方法

运行结果:
在从以创建的快照回滚时出现

revert requires force: Target controller type ide does not match source usb

结论:
目前libvirt在revertToSnapshot(DomainSnapshot snapshot)方法中不能支持对 --force参数的支持,在运行状态下回滚快照则需要这个参数

实验4:
在虚拟机运行状态下对系统盘做外部快照

运行结果:

error: Operation not supported: live disk snapshot not supported with this QEMU binary

结论:
目前实验室服务器中的qemu-kvm版本不支持虚拟机运行状态下做外部快照,最新的版本也不支持外部快照的回滚,只能将快照与母镜像合并来实现

实验配置文件所用命令:
  <domainsnapshot>
<name>snap1</name>
<disk name='vda' snapshot='external'>
<driver type='qcow2'/>
</disk>
</domainsnapshot>

kvm的live-snapshot的更多相关文章

  1. kvm

    硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...

  2. [原创]KVM虚拟化实践记录

    一.KVM简介KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),是一个开源的系统虚拟化模块,基于硬件的完全虚拟化,不过需要硬件支持(如Intel V ...

  3. KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  4. [原] KVM虚拟机网络闪断分析

    背景 公司云平台的机器时常会发生网络闪断,通常在10s-100s之间. 异常情况 VM出现问题时,表现出来的情况是外部监控系统无法访问,猜测可能是由于系统假死,OVS链路问题等等.但是在出现网络问题的 ...

  5. linux中kvm的安装及快照管理

    一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...

  6. kvm 使用入门详解

    kvm 是虚拟化技术的一个典型实现,功能非常强大,使用很方便.kvm 本身主要实现对 CPU 的虚拟化,内存和IO的虚拟化使用了开源软件 qemu,qemu 是纯软件层面的虚拟化,其实就是个模拟器.k ...

  7. KVM 虚拟化 初体验

    KVM 是 Kernel-based Virtual Machine 的简称,是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案: 使用 KVM ,可允许运行多个虚拟机,包括 Linux 和 ...

  8. 理解 QEMU/KVM 和 Ceph(2):QEMU 的 RBD 块驱动(block driver)

    本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...

  9. KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  10. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

随机推荐

  1. Oracle Day07 PL/SQL基础

    1.基本格式 set serveroutput on declare -- 申明部分 name ); begin -- 执行的sql语句 ; dbms_output.put_line(name); e ...

  2. jquery1.8.3和1.11.3的用法区别

    学习js啦dom的对象 发现好复杂 不够简洁 所以我就用法强大的jquery来做功课 突然就遇到attr的方法对复选属性的checked取不了值 给我返回undefined 我查好久都没查出问题 结果 ...

  3. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  4. MySQL密码破解。

    与其说是mysql密码破解倒不如说是mysql密码重置更准确,因为大多数情况下我们只是忘了登录的密码,如果是普通用户还可以让管理员重新设置一下密码或者重新分配一个用户,但是这里我们不考虑普通用户,如果 ...

  5. ios UIApplication简单使用

    每个app有且只有一个UIApplication对象,当程序启动的时候通过调用UIApplicationMain方法得到的.可以通过sharedApplication方法得到. UIApplicati ...

  6. ieee80211_rx

    ieee80211rx.c(E:\code\linux\net\ieee80211) 所有接收到的帧都送到这个函数中去 int ieee80211_rx(struct ieee80211_device ...

  7. HDU1379:DNA Sorting

    Problem Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries ...

  8. git简单使用教程

    git 的基本使用指令 我们先来简单熟悉一下 git 的简单使用的指令, 作为最基本的 git 指令一定要熟悉 12345678910111213141516171819202122232425262 ...

  9. MyEclipse修改项目名称

    项目上右击鼠标–>Properties–>MyEclipse–>Web–>Content Root–>Web content-root–>改成你想要的项目名 即可 ...

  10. 关于stringWithFormat: - 两段NSString如何合成一段

    http://blog.sina.com.cn/s/blog_6b1e4a0601019pib.html str = [NSString stringWithFormat:@"%@,%@&q ...