kvm的live-snapshot
目前项目中已经存在的快照是针对卷的快照,并且需要关机。所以目前的需求有两个: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的更多相关文章
- kvm
硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...
- [原创]KVM虚拟化实践记录
一.KVM简介KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),是一个开源的系统虚拟化模块,基于硬件的完全虚拟化,不过需要硬件支持(如Intel V ...
- 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设备直接分 ...
- [原] KVM虚拟机网络闪断分析
背景 公司云平台的机器时常会发生网络闪断,通常在10s-100s之间. 异常情况 VM出现问题时,表现出来的情况是外部监控系统无法访问,猜测可能是由于系统假死,OVS链路问题等等.但是在出现网络问题的 ...
- linux中kvm的安装及快照管理
一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...
- kvm 使用入门详解
kvm 是虚拟化技术的一个典型实现,功能非常强大,使用很方便.kvm 本身主要实现对 CPU 的虚拟化,内存和IO的虚拟化使用了开源软件 qemu,qemu 是纯软件层面的虚拟化,其实就是个模拟器.k ...
- KVM 虚拟化 初体验
KVM 是 Kernel-based Virtual Machine 的简称,是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案: 使用 KVM ,可允许运行多个虚拟机,包括 Linux 和 ...
- 理解 QEMU/KVM 和 Ceph(2):QEMU 的 RBD 块驱动(block driver)
本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...
- 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设备直接分 ...
- 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设备直接分 ...
随机推荐
- WinHex V18.7(16进制编辑器) 多国语言绿色版
软件名称: WinHex V18.7(16进制编辑器)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.7MB图片预览: ...
- C - 哗啦啦村的扩建
C - 哗啦啦村的扩建 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 512000/256000KB (Java/Others) Sub ...
- Oracle结构知识学习+部分函数实例
一 Oracle的结构1 实例(instance) 是内存和后台进程的集合, 数据库是数据的物理储存;实例和数据库的关系是一对多的关系;2 多个实例同时驱动一个'数据库'的架构 叫集群(RAC)3 O ...
- C# var 隐式类型 var 用法 特点
var 关键字是C# 3.0 开始,在方法范围中声明的变量: var有以下特点: * 1.var在编译器编译的时候根据初始值推断出其的类型 * 2.不能赋值除了初始值类型之外的其他类 ...
- spring管理事务需要注意的
org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionSta ...
- raise()函数
kill和raise函数用来发送信号, 区别在于: kill把信号发送给进程或进程组. kill(pid_t pid, int signo) raise把信号发送给进程自己,相当于 raise(ing ...
- Cantor数表
题目:现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/2,第三项是2/1,第四项是3/1,第五项是2/2,… ...
- JqGrid动态改变列名
setLabel colname, data, class, properties jqGrid对象 给指定列设置一个新的显示名称.colname:列名称,也可以是列的位置索引,从0开始:data:列 ...
- 在linux中创建samba,为Windows共享文件
#首先在linux系统安装samba服务 yum install samba 共享一个目录,使用用户名和密码登录后才可以访问,要求可以读写打开samba的配置文件/etc/samba/smb.con ...
- 两台linux利用heartbeat+drbd 完美实现双机热备
一直想做基于linux的双机热备,一直没有时间和机会.一直以为只要做双机热备的实验就必须两台机器外接一个存储.甚至一个月以前在学习keepalived的时候还在琢磨keepalvied去掉哪些条件可以 ...