KVM虚拟机快照备份

快照:
一。确认虚拟机镜像文件格式

[root@WWW.ESOJOURN.ORG vps]# qemu-img info centos1.img
image: centos1.img
file format: raw
virtual size: 200G (214748364800 bytes)
disk size: 6.5G


RAW格式是最原始的镜像格式,好处是速度快。但不支持很多新的功能。现在qcow2格式效率有很大提升了,而且还支持一些新的功能
1 更小的存储空间,即使是不支持holes的文件系统也可以(这下du -h和ls -lh看到的就一样了)
2 Copy-on-write support, where the image only represents changes made to an underlying disk image(这个特性SUN ZFS表现的淋漓尽致)
3 支持多个snapshot,对历史snapshot进行管理
4 支持zlib的磁盘压缩
5 支持AES的加密


《qcow2、raw、vmdk等镜像格式》对比。

二。想要启用快照功能,需要先转换镜像文件格式为qcow2。


[root@WWW.ESOJOURN.ORG vps]# virsh shutdown esojourn.org
先关掉VM
[root@WWW.ESOJOURN.ORG vps]# qemu-img     convert -f raw       -O qcow2      centos1.img     centos1qcow2.img
转换格式


三。常用快照命令
这里有一份libvirt官方的命令文档。完整,但说明不详细:http://wiki.libvirt.org/page/VM_lifecycle

具体示例:

1. 列出快照:

[root@WWW.ESOJOURN.ORG vps]# virsh snapshot-list CentOS1
Name                 Creation Time             State
------------------------------------------------------------
centos1.snap1        2012-10-08 17:25:11 +0800 running
snap2                2012-10-08 17:33:14 +0800 running
snap3                2012-10-08 17:57:21 +0800 running

2. 创建快照
virsh snapshot-create-as             CentOS1             snap2
virsh snapshot-create-as --domain CentOS1 --name snap2 --description "URL: www.esojourn.org"

3. 查看快照配置
virsh snapshot-current CentOS1
4. 恢复快照
virsh snapshot-revert CentOS1 snap2
5. 删除快照
birsh snapshot-delete CentOS1 snap2
6. 获取帮助
virsh help snapshot


四。关于qemu-img snapshot -c和savevm
很多互相抄袭的教程里,都提到了使用qemu-img snapshot -c的命令来创建快照。但我自己测试的结果 ,不管虚拟机是运行中,还是关闭状态,这个命令创建的快照字节都是0。也就是说什么也没保存下来。对此,我还没有找到原因。但找到Red hat员工Kashyap Chamarthy的一篇文章。文章里提到virsh在不同情况下,会调用不同方式来保存快照。其中至少包括‘qemu-img snapshot -c‘,qemu的 ‘savevm‘和qemu的 ‘snapshot_blkdev‘这三种方式。所以看起来快照保存,还是使用virsh snapshot-create的方式比较好。

原文引用


Also, discussed with Eric, in what cases does virsh invoke Qemu’s ‘savevm‘ and ‘qemu-img snapshot -c‘ commands while creating different types of snapshots discussed earlier above. Here is the outline:

- it uses ‘qemu-img snapshot -c‘ if the domain is offline and –disk-only was not specified
- it uses qemu’s ‘savevm‘ if the domain is online and –disk-only was not specified
- it uses qemu’s ‘snapshot_blkdev‘ if the domain is online and –disk-only is specified

http://kashyapc.wordpress.com/2011/10/04/snapshotting-with-libvirt-for-qcow2-images/


qemu-img snapshot相关命令格式:

qemu-img snapshot -c snap1 centos1-qcow2.img

qemu-img  snapshot -l centos1-qcow2.img

Snapshot list:
ID        TAG       VM SIZE      DATE       VM CLOCK
1         snap1      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



CentOS 6 KVM Snapshot

確認 VM Image 格式

  • 執行 snapshot 的語法
    virsh snapshot-create vmname

    範例:

    [root@asus-ts100e7 ~]# virsh snapshot-create e-plast-mail
    錯誤:Requested operation is not valid: Disk '/var/lib/libvirt/images/e-plast-mail.img' does not support snapshotting

    要能執行 snapshot 的 VM image 必須是 qcow2 的格式, 出現這樣的訊息, 就要去確認與轉換.

  • 確認 image 的格式語法
    qemu-img info yourdisk.img

    範例:

    [root@asus-ts100e7 ~]# qemu-img info /var/lib/libvirt/images/e-plast-mail.img
    image: /var/lib/libvirt/images/e-plast-mail.img
    file format: raw
    virtual size: 9.8G (10485760000 bytes)
    disk size: 9.8G
  • 如果是 raw 要先轉成 qcow2 格式, 語法
    qemu-img convert -f raw -O qcow2 yourdisk.img newdisk.qcow2

    範例:

    [root@asus-ts100e7 ~]# qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/e-plast-mail.img /var/lib/libvirt/images/e-plast-mail.qcow2
    [root@asus-ts100e7 ~]# qemu-img info /var/lib/libvirt/images/e-plast-mail.qcow2
    image: /var/lib/libvirt/images/e-plast-mail.qcow2
    file format: qcow2
    virtual size: 9.8G (10485760000 bytes)
    disk size: 3.0G
    cluster_size: 65536
  • 更改 vm config file 範例:
    virsh edit e-plast-mail
    :
        
          
          
          
        
    :
  • 重新啟動 vm 範例:
    virsh restart e-plast-mail

建立 snapshot

  • 目前版本進行 snapshot 過程 vm 會無法運作
  • 執行 snapshot 的語法
    virsh snapshot-create vmname

    範例:

    [root@asus-ts100e7 ~]# virsh snapshot-create e-plast-mail
    Domain snapshot 1349058343 created
  • 這時會在 /var/lib/libvirt/qemu/snapshot/e-plast-mail 產生 1349058343.xml, 內容如下
    
      1349058343
      running
      1349058343
      
        8dd0c9a8-c3d3-b6c2-1112-c7876db57444
      
      0
    

查詢目前 snapshot

  • 可以查看目前已經存在多少份 snapshot
    virsh snapshot-list e-plast-mail
    [root@asus-ts100e7 images]# virsh snapshot-list e-plast-mail
     名稱               Creation Time             狀態
    ---------------------------------------------------
     1349058343           2012-10-01 10:25:43 +0800 running
     1349059256           2012-10-01 10:40:56 +0800 running
  • 目前是使用哪個 snapshot 版本
    virsh snapshot-current e-plast-mail
    [root@asus-ts100e7 images]# virsh snapshot-current e-plast-mail
    
      1349059256
      running
      
        1349058343
      
      1349059256
      
        8dd0c9a8-c3d3-b6c2-1112-c7876db57444
      
    

復原到特定版本 snapshot

  • 經過驗證, libvirt 0.8.2-25.el5 在 VM 運行中執行 revert 後, VM 會當掉無法運作, 因此需要先關閉 VM 後再進行 revert
  • 確認 VM 目前運作狀態
    virsh domstate e-plast-mail
    [root@asus-ts100e7 libvirt]# virsh domstate e-plast-mail
    執行中
  • 執行關閉 VM 指令
    virsh shutdown e-plast-mail
    [root@asus-ts100e7 libvirt]# virsh shutdown e-plast-mail
    區域 e-plast-mail 正在執行關機
  • 確認 VM 目前已經是關機狀態
    virsh domstate e-plast-mail
    [root@asus-ts100e7 save]# virsh domstate e-plast-mail
    關機
  • 確定要回覆哪份 snapshot 版本
    virsh snapshot-list e-plast-mail
    [root@asus-ts100e7 save]# virsh snapshot-list e-plast-mail
     名稱               Creation Time             狀態
    ---------------------------------------------------
     1349058343           2012-10-01 10:25:43 +0800 running
     1349059256           2012-10-01 10:40:56 +0800 running
     1349071788           2012-10-01 14:09:48 +0800 running
  • 執行 snapshot-revert 指令
    virsh snapshot-revert e-plast-mail 1349071788
  • 確認目前執行的 snapshot 版本
    virsh snapshot-current e-plast-mail
    [root@asus-ts100e7 save]# virsh snapshot-current e-plast-mail
    
      1349071788
      running
      
        1349059256
      
      1349071788
      
        8dd0c9a8-c3d3-b6c2-1112-c7876db57444
      
    
  • revirt 後 VM 會自動啟動在當時 snapshot-create 的狀態
  • 原本在 1349071788 (2012-10-01 14:09:48) 時所執行的程式還會繼續運作
  • VM 內的系統時間還是在 1349071788 (2012-10-01 14:09:48) 所以要考慮時間矯正議題

刪除不需要的 snapshot

  • 原有的 snapshot 清單
    virsh snapshot-list e-plast-mail
    [root@asus-ts100e7 save]# virsh snapshot-list e-plast-mail
     名稱               Creation Time             狀態
    ---------------------------------------------------
     1349058343           2012-10-01 10:25:43 +0800 running
     1349059256           2012-10-01 10:40:56 +0800 running
     1349071788           2012-10-01 14:09:48 +0800 running
  • 打算移除掉 1349059256 這份版本
    virsh snapshot-delete e-plast-mail 1349059256
    [root@asus-ts100e7 save]# virsh snapshot-list e-plast-mail
     名稱               Creation Time             狀態
    ---------------------------------------------------
     1349058343           2012-10-01 10:25:43 +0800 running
     1349071788           2012-10-01 14:09:48 +0800 running
  • snapshot 主要在 image file 內增加 tag, 因此可以透過 qemu-img info 指令來瞭解
    qemu-img info /var/lib/libvirt/images/e-plast-mail.qcow2
    [root@asus-ts100e7 images]# qemu-img info /var/lib/libvirt/images/e-plast-mail.qcow2
    image: /var/lib/libvirt/images/e-plast-mail.qcow2
    file format: qcow2
    virtual size: 9.8G (10485760000 bytes)
    disk size: 7.0G
    cluster_size: 65536
    Snapshot list:
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    1         1349058343             977M 2012-10-01 10:25:43 1290:29:38.005
    3         1349071788             965M 2012-10-01 14:09:48 1291:18:26.283

參考網址

  • http://forums.fedoraforum.org/showthread.php?t=260126
  • http://blog.yam.com/keynes0918/article/45173318
KVM虚拟机的基本镜像和增量镜像

KVM虚拟机的基本镜像和增量镜像
1、概述
实验目的:通过一个基础镜像(node.img),里面把各个虚拟机都需要的环境都搭建好,然后基于这个镜像建立起一个个增量镜像,每个增量镜像对应一个虚拟机,虚拟机对镜像中所有的改变都记录在增量镜像里面,基础镜像始终保持不变。
功能:节省磁盘空间,快速复制虚拟机。

环境:
基本镜像文件:node.img  虚拟机ID:node  
增量镜像文件:node4.img 虚拟机ID:node4
要求:以基本镜像文件node.omg为基础,创建一个镜像文件node4.img,以此创建一个虚拟机机node4,虚拟机node4的改变将存储于node4.img中。

2、创建增量镜像文件
[root@target kvm_node]#qemu-img create -b node.img -f qcow2 node4.img
[root@target kvm_node]# qemu-img info node4.img 
image: node4.img
file format: qcow2
virtual size: 20G (21495808000 bytes)
disk size: 33M
cluster_size: 65536
backing file: node.img (actual path: node.img)
#注:该实验只是针对qcow2格式的镜像文件,未测试raw格式的镜像文件是否可行。

3、创建虚拟机node4的XML配置文件
[root@target kvm_node]# cp /etc/libvirt/qemu/node.xml /etc/libvirt/qemu/node4.xml
[root@target kvm_node]# vim /etc/libvirt/qemu/node4.xml 
  node4                                  #node4的虚拟机名,须修改,否则与基本虚拟机冲突
  4b7e91eb-6521-c2c6-cc64-c1ba72707fe4   #node4的UUID,必须修改,否则与基本虚拟机冲突
  524288
  524288
  2
 
    hvm
   
 
 
   
   
   
 
 
  destroy
  restart
  restart
 
    /usr/libexec/qemu-kvm
   
     
         #将原指向/virhost/kvm_node/node.img改为node4.img
     
     
   
   
                  #修改网卡MAC,防止冲突
     
     
     
   
   
                 #修改网卡MAC,防止冲突
     
     
     
   
   
     
   
   
     
   
   
   
     
   
   
     
     
   
   
     
   
 

4、根据xml配置定义虚拟机node4
[root@target kvm_node]#virsh define /etc/libvirt/qemu/node4.xml
[root@target kvm_node]#virsh start node4  

5、测试 
[root@target kvm_node]# du -h node.img 
6.3G    node.img
[root@target kvm_node]# du -h node4.img
33M     node4.img
[root@node4 ~]# dd if=/dev/zero of=test bs=1M count=200   #在虚拟机node4上增量200M大小文件
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 1.00361 seconds, 209 MB/s
[root@target kvm_node]# du -h node.img                    #基本镜像文件node.img大小未变
6.3G    node.img
[root@target kvm_node]# du -h node.img                    #增量镜像文件node4.img增加200M了
234M    node4.img

复制 克隆:


首先把需要克隆的源虚拟机先关闭,然后使用以下命令来进行克隆,注意我这里使用的是相对路径。

virsh shutdown VM02
virt-clone -o VM02 -n VM05 -f VM05.img --connect=qemu:///system
chown qemu.qemu VM05.img

需要修改一些东西,把 vnc 的端口号修改一下,避免两个产生冲突,并记录一下这里面的 MAC 地址备用。

virsh edit VM05

先启动 VM05,目前两个虚拟机还不能同时启动。

virsh start VM05
rm /etc/udev/rules.d/70-persistent-net.rules
vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改 eth0 的 MAC 地址与刚才 VM05 配置文件中的 MAC 一致,并重启计算机。

这时再启动 VM02(源虚拟机)时会报以下错误:

error: Failed to start domain VM02
error: Unable to read from monitor: Connection reset by peer

原因在于 IDE 的光驱设备不可共享产生了冲突所致,删除 IDE 光驱即可。

virsh shutdown VM05
virsh edit VM05

删除其中关于 ide cdrom 相关的一段设备描述,同时需注意内存是否自己期望的大小。

virsh start VM05
virsh start VM02

源虚拟机与目标虚拟机都没有报错,正常启动,则本次克隆完成。



当我们需要批量的部署我们的XEN 或者KVM的时候,LVM的snap功能是个不错的选择.
 
#lvcreat -L 2G -s -n  lv-virt2 /dev/vg01/lv-virt1
为/dev/vg01/lv-virt1创建一个大小为2G的快照lv-virt2
修改Domain-U的配置文件,uuid得用uuidgen生成.修改内容很简单.
注意:依据写时复制的原理,当快照逻辑卷不能容纳父卷改变的块时,快照将不可用.避免这种情况的发生,注意用lvdisplay查看及时用lvextend扩展尺寸或者创建块大小与父卷块一致的不死快照.
 
KVM虚拟机快照备份_第1张图片
 
KVM虚拟机快照备份_第2张图片



系统版本

[root@desktop2 ~]# cat /proc/version 
Linux version 2.6.32-220.el6.x86_64 (mockbuild@x86-004.build.bos.redhat.com) (gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC) ) #1 SMP Wed Nov 9 08:03:13 EST 2011
[root@desktop2 ~]# 

为虚拟机创建快照

[root@desktop2 ~]# lvs
  LV           VG   Attr   LSize   Origin  Snap%  Move Log Copy%  Convert
  home         vol0 -wi-ao 512.00m                                       
  root         vol0 -wi-ao   8.00g                                       
  vserver      vol0 owi-a-  10.00g                                       
  vserver-snap vol0 swi-a-   4.00g vserver   0.89                        
[root@desktop2 ~]# lvcreate -L 1G -s -n vserver2 /dev/vol0/vserver
  Logical volume "vserver2" created
[root@desktop2 ~]# lvs
  LV           VG   Attr   LSize   Origin  Snap%  Move Log Copy%  Convert
  home         vol0 -wi-ao 512.00m                                       
  root         vol0 -wi-ao   8.00g                                       
  vserver      vol0 owi-a-  10.00g                                       
  vserver-snap vol0 swi-a-   4.00g vserver   0.89                        
  vserver2     vol0 swi-a-   1.00g vserver   0.00   


生成新的uuid

[root@desktop2 ~]# uuidgen 
1440f78a-3f93-4a84-be09-bef93c3188e3

导出vserver虚拟机的配置信息,并修改4处客户化信息

[root@desktop2 ~]# virsh dumpxml vserver > /tmp/vserver2.xml
[root@desktop2 ~]# vim /tmp/vserver2.xml



  vserver2
  1440f78a-3f93-4a84-be09-bef93c3188e3
  2097152
  1048576
  2
 
    hvm
   
 

 
   
   
   
 

 
  destroy
  restart
  restart
 
    /usr/libexec/qemu-kvm
   
     
     
     
     


   
   
     
     
     
     

   
   
     
   

   
     
   

   
   
   
   

你可能感兴趣的:(xen,kvm,虚拟化技术,libvirt)