lbdbzj110 发表于 2015-4-10 14:25:09

[待整理]KVM 快照创建,使用,删除

  使用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
  恢复快照:( -a后面的快照镜像需要手动输入 , 命令执行后需重启生效,最好在关机状态下回滚快照)
  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

  ======================================================================
  
  

实例一使用qemu-img命令使用快照
kvm环境下qcow2的镜像支持快照
1 确认镜像的格式
   # qemu-img info test.qcow2
   image: test.qcow2
   file format: qcow2
   virtual size: 10G (10737418240 bytes)
   disk size: 1.6G
   cluster_size: 65536  2 为镜像test.qcow2创建快照,创建快照并没有产生新的镜像,虚拟机镜像大小增加,快照应属于镜像。
   #qemu-img snapshot -c snapshot01 test.qcow2
   #qemu-img snapshot -c snapshot02 test.qcow2
                                       快照名      镜像名
  3 列出某个镜像的所有快照
   #qemu-img snapshot -l test.qcow2
   Snapshot list:
   ID      TAG               VM SIZE                DATE       VM CLOCK
   1         snapshot01                0 2011-09-07 15:39:25   00:00:00.000
   2         snapshot02                0 2011-09-07 15:39:29   00:00:00.000
  4 使用快照
   #qemu-img snapshot -a snapshot01 test.qcow2
  5 删除快照
   #qemu-img snapshot -d snapshot01 test.qcow2
  附:
   '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

  实例二 利用libvirt使用快照
1 同样先确认镜像的格式为qcow2
   #qemu-img info test.qcow2
   image: test.qcow2
   file format: qcow2
   virtual size: 10G (10737418240 bytes)
   disk size: 1.1G
   cluster_size: 65536

2 创建并启动以test.qcow2作为镜像的虚拟机,假设虚拟机名称为testsnp,如果虚拟机没有启动,也可创建快照,但是意义不大,快照size为0
   开始使用配置文件来创建指定虚拟机的快照
   
   snapshot02 //快照名
   Snapshot of OS install and updates//描述
   
                  //虚拟机镜像的绝对路径
      
      
   
   
   保存为snp.xml,开始创建
   #virsh snapshot-create testsnp snp.xml//即以snp.xml作为快照的配置文件为虚拟机testsnp创建快照
    Domain snapshot snapshot02 created from 'snp.xml'
   
3 查看虚拟机testsnp已有的快照
   # virsh snapshot-list testsnp
   Name               Creation Time             State
   ---------------------------------------------------
   1315385065         2011-09-07 16:44:25 +0800 running      //1315385065创建时间比snapshot02早
   snapshot02         2011-09-07 17:32:38 +0800 running
   同样地,也可以通过qemu-img命令来查看快照
   # qemu-img info test.qcow2
    image: test.qcow2
    file format: qcow2
    virtual size: 10G (10737418240 bytes)
    disk size: 1.2G
    cluster_size: 65536
    Snapshot list:
    ID      TAG               VM SIZE                DATE       VM CLOCK
    1         1315385065             149M 2011-09-07 16:44:25   00:00:48.575
    2         snapshot02             149M 2011-09-07 17:32:38   00:48:01.341
  4 可以通过snapshot-dumpxml命令查询该虚拟机某个快照的详细配置
# virsh snapshot-dumpxml testsnp 1315385065

   1315385065
   Snapshot of OS install and updates
   running   //虚拟机状态虚拟机关机状态时创建的快照状态为shutoff(虚拟机运行时创建的快照,即使虚拟机状态为shutoff,快照状态依然为running)
   1315385065   //虚拟机的创建时间 Readonly 由此可以看出没有给快照指定名称的话,默认以时间值来命名快照
   
   afbe5fb7-5533-d154-09b6-33c869a05adf //此快照所属的虚拟机(uuid)
   

查看第二个snapshot
# virsh snapshot-dumpxml testsnp snapshot02

    snapshot02
    Snapshot of OS install and updates
    running
   
      1315385065      //当前快照把前一个快照作为parent
   
    1315387958
   
      afbe5fb7-5533-d154-09b6-33c869a05adf
   

  5 查看最新的快照信息
   # virsh snapshot-current testsnp
   
   1315385065
   Snapshot of OS install and updates
   running
   1315385065   
   
       afbe5fb7-5533-d154-09b6-33c869a05adf
   
   
  6 使用快照,指定使用哪一个快照恢复虚拟机
# virsh snapshot-revert testsnp snapshot02
  7 删除指定快照
   # virsh snapshot-delete testsnp snapshot02
   Domain snapshot snapshot02 deleted
附:
Snapshot (help keyword 'snapshot')
   snapshot-create                Create a snapshot from XML
   snapshot-create-as             Create a snapshot from a set of args
   snapshot-current               Get the current snapshot
   snapshot-delete                Delete a domain snapshot
   snapshot-dumpxml               Dump XML for a domain snapshot
   snapshot-list                  List snapshots for a domain
   snapshot-revert                Revert a domain to a snapshot  
  ============================================================
  

  一、简介:
  snapshot(快照)可以把虚拟机某个时间点的内存、磁盘文件等的状态保存为一个镜像文件。通过这个镜像文件,可以在以后的任何时间来恢复虚拟机在当时创建snapshot的状态,这个在使用虚拟机来做测试的时候很有用。
  二、创建快照-KVM:
  需注意在虚拟机运行时创建快照不会报错,但会出现一些莫名其妙的问题,像恢复快照失败、快照名为空等,所以在创建快照前要先关闭虚拟机。
  2.1创建
  //raw格式
  kvm虚拟机的raw格式磁盘文件不支持快照功能,在创建快照前需要先转换为qcow或qcow2格式。
  # qemu-img info disk.raw
  image: disk.raw
  file format: raw
  virtual size: 100M (104857600 bytes)
  disk size: 6.1M
  # qemu-imgsnapshot -c s1 disk.raw //raw格式的转换报错
  qemu-img: Could not create snapshot'snapshot01': -95 (Operation not supported)
  //qcow2格式
  # qemu-img info disk.qcow2
  image:disk.qcow2
  file format: qcow2
  virtual size: 100M (104857600 bytes)
  disk size: 4M
  # qemu-imgsnapshot -c s1 disk.qcow2
  # qemu-img infodisk01.qcow2 //可以看到刚新建的快照s1
  image: disk.qcow2
  file format: qcow2
  virtual size: 100M (104857600 bytes)
  disk size: 80M
  cluster_size: 65536
  Snapshot list:
  ID       TAG               VM SIZE                DATE       VM CLOCK
  1      s1                        02012-05-10 15:20:40   00:00:00.000
  # ls -lh
  总用量 7G
  -rw-r--r--. 1 qemu qemu 108M5月 10 15:03 disk.qcow2
  -rw-r--r--. 1 qemu qemu 6.5G5月 10 15:03xp_4_test.img
  创建快照后不会有新的镜像文件产生;disk.qcow2镜像文件创建时的大小为100M,这里显示的大小为108M,这是因为快照位于disk.qcow2镜像文件内而没有单独生成一个文件。
  
  2.2列出镜像的所有快照
  # qemu-imgsnapshot -l disk.qcow2
  Snapshot list:
  ID       TAG               VM SIZE                DATE       VM CLOCK
  1      s1                        02012-05-10 15:20:40   00:00:00.000
  2      s2                        02012-05-10 15:32:37   00:00:00.004
  2.3快照恢复
  恢复快照同样也需要在关闭虚拟机的情况下进行,下面的恢复会使虚拟机恢复到2012-05-10 15:20:40的状态,在此时间点后对磁盘disk.qcow2的操作将全部失效
  # qemu-imgsnapshot -a s1 disk.qcow2
  2.4 删除快照
  # qemu-imgsnapshot -d s1 disk.qcow2
  
  三、创建快照-convirture:
  使用convirture来创建、恢复快照同样需要在关闭虚拟机的情况下进行,但不同的是convirture会将系统状态另外生成一个压缩的镜像文件。
  3.1创建快照
  
//指定快照的保存路径和文件名

  3.1恢复快照
  

  //选择需要恢复的快照文件
  
  ==============================================================
  


kvm虚拟机快照
kvm默认的文件格式是raw,也就是使用文件来模拟实际的硬盘(当然也可以使用一块真实的硬盘或一个分区),不过raw格式只支持内存
快照(就是启动的时候加-snapshot,所有更改都写到内存),重启之后就没了。raw格式不支持磁盘快照,因此要使用qcow或qcow2文件格式。

1、要创建qcow2格式的虚拟机镜像文件
# qemu-img create -f qcow2 /virhost/kvm_node/node4.img 20G
参数-f指定格式,如果不指定默认的是raw。

# qemu-img info node4.img   #查看镜像文件格式
image: node4.img
file format: qcow2
virtual size: 20G (21495808000 bytes)
disk size: 6.3G
cluster_size: 65536

2、把raw格式转换成qcow2格式:
# qemu-img convert -f raw -O qcow2 /virhost/kvm_node/node5.img /virhost/kvm_node/node5_qcow2.img

3、为虚拟机node4创建一个快照
# ls /root/          #/root/下无文件
# virsh snapshot-create-as node4 node4.snap1
# qemu-img info node4.img
image: node4.img
file format: qcow2
virtual size: 20G (21495808000 bytes)
disk size: 6.3G
cluster_size: 65536
Snapshot list:
ID      TAG               VM SIZE                DATE       VM CLOCK
1         node4.snap1            401M 2012-04-10 12:04:42   22:02:04.672

4、修改node4系统文件并通过snapshot文件恢复
# scp node5:/root/* .   #从node5上复制文件
root@node5's password:
anaconda-ks.cfg                                                                        100% 1224   1.2KB/s   00:00   
scp: /root/Desktop: not a regular file
install.log                                                                              100%   34KB33.7KB/s   00:00   
install.log.syslog                                                                     100% 4232   4.1KB/s   00:00   
nginx-0.7.65.tar.gz                                                                      100%590KB 590.3KB/s   00:00   
pcre-8.02.tar.gz                                                                         100% 1218KB   1.2MB/s   00:00   
php-5.2.13-fpm-0.5.13.diff.gz                                                            100%197KB 196.6KB/s   00:00   
php-5.2.13.tar.gz                                                                              0%    0   0.0KB/s   --:-- ETAlphp-5.2.13.tar.gz                                                                        100%   11MB   11.2MB/s    00:01   
scp: /root/webbench-1.5: not a regular file
webbench-1.5.tar.gz                                                                      100% 7675   7.5KB/s   00:00   
# ls
anaconda-ks.cfginstall.log.syslog   pcre-8.02.tar.gz               php-5.2.13.tar.gz
install.log      nginx-0.7.65.tar.gzphp-5.2.13-fpm-0.5.13.diff.gzwebbench-1.5.tar.gz

# virsh snapshot-create-as node4 node4.snap2   #为虚拟机node4当前状态创建快照
# virsh snapshot-list node4                      #查看node4的快照
名称               Creation Time             状态
------------------------------------------------------------
node4.snap1          2012-04-11 00:47:06 +0800 paused
node4.snap2          2012-04-11 01:19:06 +0800 running

# virsh snapshot-revert node4 node4.snap1    #从快照文件node4.snap1恢复node4
# ls /root/          #/root/下无文件,恢复成功

# virsh snapshot-revert node4 node4.snap2#从快照文件node4.snap2恢复node4
# ls                                             #恢复成功
anaconda-ks.cfginstall.log.syslog   pcre-8.02.tar.gz               php-5.2.13.tar.gz
install.log      nginx-0.7.65.tar.gzphp-5.2.13-fpm-0.5.13.diff.gzwebbench-1.5.tar.gz

5、删除快照
# virsh snapshot-delete node4 node4.snap1


6、利用qemu-img创建镜像文件的snapshot
创建快照
qemu-img snapshot -c node4.snap1 /virhost/kvm_node/node4.img
#测试该命令创建快照大小总是为0,不知哪位大神能解决

查看快照
qemu-img snapshot -l /virhost/kvm_node/node4.img

把虚拟机恢复到某个快照的状态:
qemu-img snapshot -a snapshot-name /path/to/os.img

删除某个快照:
qemu-img snapshot -d snapshot-name /path/to/os.img
页: [1]
查看完整版本: [待整理]KVM 快照创建,使用,删除