前几天玩玩 kvm 感觉挺有意思的,于是乎就想像 vmarve 中那样给 kvm 虚拟机来个快照,这样今后自己实验就很方便了。对于整个虚拟机的迁移也是很有意义的。
由于使用的是 ubuntu9.10 平台,接下来就在 ubuntu 中做相关的 LVM 快照。在 redhat 平台也是类似,就是使用 root 身份做如下操作。
在安装虚拟机的过程当中我们使用 lvm 逻辑卷作为 kvm 虚拟机的硬盘,这样才能使用 LVM 的快照功能:
创建 LVM 逻辑卷: sudo fdisk /dev/sda( 分区,这里就不在详细介绍 )
sudo partprobe
sudo pvcreate /dev/sdaX
sudo vgcreate vg00 /dev/sdaX
sudo lvcreate -L 10G -n centos vg00 ( 创建一个 centos 的逻辑卷给装系统使用 )
安装 kvm 虚拟机:
使用 virt-manager 来管理 kvm 虚拟机。
使用 LVM 逻辑卷创建虚拟机:
在安装完 centos 虚拟机后,创建 centos 逻辑卷的快照:
lvcreate -L 2G -s -n centosBackup /dev/vg00/centos
( 一般快照大小只要为被快照的逻辑卷的 15 ~ 20 %就可以了 )
最后修改 kvm 的配置文件 : vim /etc/libvirt/qemu/centos.xml
centos01
c64ae5f9-143a-0234-f4f6-dcf7cfdb830d
262144
262144
1
hvm
destroy
restart
restart
/usr/bin/kvm
###### 把这行修改成快照的逻辑卷 #######
最后,重新启动计算机,这样你就能使用快照的虚拟机,如果当虚拟机坏了,你可以直接在拉一个 centos 的逻辑卷的快照就可以恢复到安装好以后的状态。当然,接下来的 LVM 的迁移技术就可以实现容灾方面的内容。还是很强大的,有谁在玩这方面的可以交流经验。
之前看到某篇文章对snapshot的注解如下:
-snapshot write to temporary files instead of disk image files
意思是不更改镜像文件,启动后的所有改动均不会往镜像文件上写。临时文件存放在内存中了,具体是cached
感觉这个解释有点问题,晚上闲来无事,就简单做了个测试,实验过程如下:
使用libvirt创建的虚拟机,默认格式为raw,要想使用快照功能,需要先将其转换格式。
1:qemu-img snapshot -c base_sys_centos5.564bit.img CentOS5.5_64bit.img
在现有镜像基础上创建一个快照。
报如下错误:
emu-img: Could not create snapshot 'base_sys_centos5.564bit.img': -95 (Operation not supported)
2:怀疑是文件格式不对,查看一下。
qemu-img info CentOS5.5_64bit.img
image: CentOS5.5_64bit.img
file format: raw
virtual size: 20G (21474836480 bytes)
disk size: 3.4G
果然是raw格式
3:使用如下命令将raw格式的镜像转化为qcow2格式。
qemu-img convert -f raw -O qcow2 CentOS5.5_64bit.img CentOS5.5_64bit_basesys_qcow2.img
4:转换成功后,再次对镜像创建一个快照
qemu-img snapshot -c CentOS5.5_64bit_Qcow2_basesys.img CentOS5.5_64bit_Qcow2.img
OK,创建成功。
该步并不会创建一个新的镜像,可以使用如下命令来查看指定的镜像上是否存在快照,并在合适的时候,恢复快照。
qemu-img snapshot -l CentOS5.5_64bit_Qcow2.img
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 CentOS5.5_64bit_Qcow2_basesys.img 0 2011-07-21 23:17:38 00:00:00.000
恢复快照:
qemu-img snapshot -a CentOS5.5_64bit_Qcow2_basesys.img CentOS5.5_64bit_Qcow2.img
其他操作:
'snapshot' is the name of the snapshot to create, apply or delete
'-a' applies a snapshot (revert disk to saved state)
'-c' creates a snapshot
'-d' deletes a snapshot
'-l' lists all snapshots in the given image
一、kvm快照与恢复
1、为原虚拟机所在的lv做一个快照。
lvcreate -L 2G -sn kvmSS /dev/vg/kvm (一般快照大小是宿主的15-20%)
2、修改/etc/libvirt/qemu/虚拟机名.xml,将此配置文件里虚拟机lv名,改成虚拟机快照名。
vim /etc/libvirt/qemu/虚拟机名.xml
3、重启动计算机,即可使用快照虚拟机。 4、恢复,当快照虚拟机弄乱或弄坏了,可以直接用回原始的虚拟机做一个快照,再用上面同样的方法,指向这新建的快照。 二、快速制造多台虚拟机 1、为原虚拟机所在的lv做一个快照。 lvcreate -L 2G -sn kvmSS /dev/vg/kvm (一般快照大小是宿主的15-20%) 2、复制/etc/libvirt/qemu/虚拟机名.xml并改名为/etc/libvirt/qemu/虚拟机名1.xml cp /etc/libvirt/qemu/虚拟机名.xml /etc/libvirt/qemu/虚拟机名1.xml 3、修改 /etc/libvirt/qemu/虚拟机名1.xml vim /etc/libvirt/qemu/虚拟机1.xml (修改一下几项,随便改只要与原来不一样就可以了。)比如:1kvmSS 395ae05e-c118-e460-4de4-7f58e08f8aa1 4、virsh define 虚拟机名1.xml (定义虚拟机) 5、virsh start 虚拟机名1 (新的虚拟机就可以使用啦。呵呵) 如果遇到虚拟机网卡启动失败提示device eth0 does not seem 可以ifconfig -a 查看网卡的名字是否不是eth0. 如果不是,ip link set ethX name eth0 virsh常用命令一览表
命令
说明
help
显示该命令的说明
quit
结束 virsh,回到 Shell
connect
连接到指定的虚拟机服务器
create
启动一个新的虚拟机
destroy
删除一个虚拟机
start
开启(已定义的)非启动的虚拟机
define
从 XML 定义一个虚拟机
undefine
取消定义的虚拟机
dumpxml
转储虚拟机的设置值
list
列出虚拟机
reboot
重新启动虚拟机
save
存储虚拟机的状态
restore
回复虚拟机的状态
suspend
暂停虚拟机的执行
resume
继续执行该虚拟机
dump
将虚拟机的内核转储到指定的文件,以便进行分析与排错
shutdown
关闭虚拟机
setmem
修改内存的大小
setmaxmem
设置内存的最大值
setvcpus
修改虚拟处理器的数量
查看Domain信息执行的命令
命令
说明
domid
查看虚拟机的标识符
domname
查看虚拟机的名称
domuuid
查看虚拟机的 UUID
domstate
查看虚拟机目前的状态
dominfo
查看虚拟机的信息
l