[转]KVM中使用LVM快照技术

前几天玩玩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
<domain type=’kvm’>
  <name>centos01</name>
  <uuid>c64ae5f9-143a-0234-f4f6-dcf7cfdb830d</uuid>
  <memory>262144</memory>
  <currentMemory>262144</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch=’i686′ machine=’pc-0.12′>hvm</type>
    <boot dev=’hd’/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset=’utc’/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type=’block’ device=’disk’>
      <driver name=’qemu’/>
    ######<source dev=’/dev/vg00/centosB’/>把这行修改成快照的逻辑卷#######
      <source dev=’/dev/vg00/centosBackup’/>
      <target dev=’vda’ bus=’virtio’/>
    </disk>
    <disk type=’block’ device=’cdrom’>
      <driver name=’qemu’/>
      <target dev=’hdc’ bus=’ide’/>
      <readonly/>
    </disk>
    <interface type=’bridge’>
      <mac address=’52:54:00:20:93:fa’/>
      <source bridge=’br0′/>
      <model type=’virtio’/>
    </interface>
    <console type=’pty’>
      <target port=’0′/>
    </console>
    <console type=’pty’>
      <target port=’0′/>
    </console>
    <input type=’mouse’ bus=’ps2′/>
    <graphics type=’vnc’ port=’-1′ autoport=’yes’ keymap=’en-us’/>
    <video>
      <model type=’cirrus’ vram=’9216′ heads=’1′/>
    </video>
  </devices>
</domain>

         最后,重新启动计算机,这样你就能使用快照的虚拟机,如果当虚拟机坏了,你可以直接在拉一个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
    <source dev=‘虚拟机快照名’>
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 (修改一下几项,随便改只要与原来不一样就可以了。)比如:
<name>1kvmSS</name>
<uuid>395ae05e-c118-e460-4de4-7f58e08f8aa1</uuid>
<source dev=‘虚拟机快照名’>
<mac address='52:54:00:a7:11:cb'/>
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 查看虚拟机的信息

你可能感兴趣的:(kvm)