zoukankan      html  css  js  c++  java
  • KVM-备份与恢复(四)

    备份与恢复(四)

    8.备份与恢复

    8.1 备份恢复概述

    image.png-338.5kB

    8.2 通过virt-manager管理快照

    • 创建快照
    • 恢复快照
    • 删除快照

    8.2.1 创建快照

    image.png-22.8kB

    image.png-29.3kB

    image.png-17.5kB

    image.png-38kB

    #查看运行的虚拟机列表
    [root@KVM ~]# virsh list
     Id    名称                         状态
    ----------------------------------------------------
     2     centos6.5                      running
     4     centos6.5-2                    running
    
    #查看指定名称的虚拟机的磁盘使用情况
    [root@KVM ~]# virsh domblklist centos6.5
    目标     源
    ------------------------------------------------
    vda        /var/lib/libvirt/images/centos6.5.qcow2
    hda        /ios/CentOS-6.5-x86_64-bin-DVD1.iso
    
    #查看指定磁盘的快照情况
    [root@KVM ~]# qemu-img snapshot -l /var/lib/libvirt/images/centos6.5.qcow2
    Snapshot list:
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    1         snapshot1              216M 2019-01-16 13:39:57   02:04:44.485
    

    8.2.2 恢复快照

    image.png-25.1kB

    image.png-42.7kB

    image.png-27.7kB

    8.2.3 删除快照

    image.png-50.6kB

    [root@KVM ~]# qemu-img snapshot -l /var/lib/libvirt/images/centos6.5.qcow2 
    Snapshot list:
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    1         snapshot1              216M 2019-01-16 13:39:57   02:04:44.485
    2         snapshot2              216M 2019-01-16 14:03:54   02:10:17.600
    3         snapshot3              216M 2019-01-16 14:04:26   02:10:24.168
    4         snapshot4              216M 2019-01-16 14:04:50   02:10:36.746
    

    KVM的virt-manager做的快照其实就是检查点快照。虽然在我们看起来全都是全量的备份,但实际上并不是,这些快照之间后一个备份的只是前一个快照的增量。因此,他们之间是有关联关系的。我可以通过如下方法查看快照之间的树形关联关系

    [root@KVM ~]# virsh snapshot-list centos6.5 --tree
    snapshot1
      |
      +- snapshot2
          |
          +- snapshot3
              |
              +- snapshot4
    

    image.png-58.9kB

    8.3 通过virsh管理快照

    #查看创建快照帮助
    [root@KVM ~]# virsh help snapshot-create-as
      NAME
        snapshot-create-as - 使用一组参数生成快照
    
      SYNOPSIS
        snapshot-create-as <domain> [--name <string>] [--description <string>] [--print-xml] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] [--memspec <string>] [[--diskspec] <string>]...
    
      DESCRIPTION
        使用一组参数生成快照(磁盘和 RAM)
    
      OPTIONS
        [--domain] <string>  domain name, id or uuid
        --name <string>  快照名称
        --description <string>  快照描述
        --print-xml      输出 XML 文档而不是生成 XML
        --no-metadata    提取快照但不生成元数据
        --halt           生成快照后停止域
        --disk-only      捕获磁盘状态而不是 vm 状态
        --reuse-external  重新使用任意现有外部文件
        --quiesce        静默虚拟机的文件系统
        --atomic         需要自动操作
        --live           提取实时快照
        --memspec <string>  内存属性:[file=]name[,snapshot=type]
        [--diskspec] <string>  磁盘属性: disk[,snapshot=type][,driver=type][,file=name]
    
    #创建一个快照
    [root@KVM ~]# virsh snapshot-create-as centos6.5 shot1
    已生成域快照 shot1
    
    [root@KVM ~]# virsh snapshot-list centos6.5
     名称               生成时间              状态
    ------------------------------------------------------------
     shot1                2019-01-16 14:10:57 +0800 running   #怎么到上边了
     snapshot1            2019-01-16 13:39:57 +0800 running
     snapshot2            2019-01-16 14:03:54 +0800 running
     snapshot3            2019-01-16 14:04:26 +0800 running
    
    [root@KVM ~]# virsh snapshot-list --tree centos6.5    #以树格式显示快照
    snapshot1
      |
      +- snapshot2
          |
          +- snapshot3
              |
              +- shot1          #得如此来查看快照上下级关系
    
    #查看某个快照的详细信息
    [root@KVM ~]# virsh snapshot-info centos6.5 --current
    名称:       shot1
    域:          centos6.5
    当前:       是
    状态:       running
    位置:       内部
    上级:       snapshot3
    下级:       0
    降序:       0
    元数据:    是
    
    #删除一个快照
    [root@KVM ~]# virsh snapshot-list centos6.5
     名称               生成时间              状态
    ------------------------------------------------------------
     shot1                2019-01-16 14:10:57 +0800 running
     snapshot1            2019-01-16 13:39:57 +0800 running
     snapshot2            2019-01-16 14:03:54 +0800 running
     snapshot3            2019-01-16 14:04:26 +0800 running
    
    [root@KVM ~]# virsh snapshot-delete centos6.5 snapshot2
    已删除域快照 snapshot2
    
    [root@KVM ~]# virsh snapshot-list centos6.5
     名称               生成时间              状态
    ------------------------------------------------------------
     shot1                2019-01-16 14:10:57 +0800 running
     snapshot1            2019-01-16 13:39:57 +0800 running
     snapshot3            2019-01-16 14:04:26 +0800 running
     
    [root@KVM ~]# virsh snapshot-list --tree centos6.5
    snapshot1
      |
      +- snapshot3
          |
          +- shot1
    
    #恢复一个快照
    #我们执行先删除虚拟机里的部分文件在测试恢复
    [root@KVM ~]# virsh snapshot-revert centos6.5 shot1  #恢复快照shot1
    

    8.4 KVM备份与恢复

    image.png-257.1kB

    基于虚拟磁盘文件的KVM备份

    创建临时外部磁盘快照
    virsh snapshot-create-as --domain crm guest-statel --diskspec vda,file=/

    8.4.1 通过云yum仓库升级qemu-kvm-ev

    因为系统自带的qemu-kvm版本太旧1.5.3版本很多不支持,所以我们需要升级qemu-kvm企业版

    [root@KVM ~]# mkdir -p /export/images/   #创建存放外部磁盘快照目录
    
    [root@KVM ~]# virsh snapshot-create-as --domain centos6.5 guest-statel --diskspec vda,file=/export/images/centos6.5-overlay1.qcow2 --disk-only --atomic
    错误:不支持的操作:这个 QEMU 二进制文件不支持即时磁盘快照
    
    [root@KVM ~]# rpm -qa | grep libvirt
    libvirt-python-4.5.0-1.el7.x86_64
    libvirt-daemon-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-lxc-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-iscsi-4.5.0-10.el7_6.3.x86_64
    libvirt-gobject-1.0.0-1.el7.x86_64
    libvirt-daemon-driver-interface-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-qemu-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-4.5.0-10.el7_6.3.x86_64
    libvirt-client-4.5.0-10.el7_6.3.x86_64
    libvirt-glib-1.0.0-1.el7.x86_64
    libvirt-daemon-driver-nwfilter-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-config-nwfilter-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-disk-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-scsi-4.5.0-10.el7_6.3.x86_64
    libvirt-libs-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-secret-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-config-network-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-rbd-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-mpath-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-kvm-4.5.0-10.el7_6.3.x86_64
    libvirt-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-nodedev-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-core-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-gluster-4.5.0-10.el7_6.3.x86_64
    libvirt-bash-completion-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-network-4.5.0-10.el7_6.3.x86_64
    libvirt-daemon-driver-storage-logical-4.5.0-10.el7_6.3.x86_64
    libvirt-gconfig-1.0.0-1.el7.x86_64
    
    [root@KVM ~]# rpm -qa | grep kvm
    qemu-kvm-1.5.3-160.el7.x86_64                   #版本太低
    libvirt-daemon-kvm-4.5.0-10.el7_6.3.x86_64
    qemu-kvm-common-1.5.3-160.el7.x86_64            #版本太低
    
    #下载阿里云源
    [root@KVM ~]# which wget
    /usr/bin/wget
    [root@KVM ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    #以下省略若干。。。
    
    #将本地yum源扔进备份目录
    [root@KVM ~]# cd /etc/yum.repos.d/
    [root@KVM yum.repos.d]# ls
    CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
    CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
    [root@KVM yum.repos.d]# mkdir bak
    [root@KVM yum.repos.d]# mv C* bak/
    [root@KVM yum.repos.d]# mv bak/*Base* .
    [root@KVM yum.repos.d]# ls
    bak  CentOS-Base.repo
    
    #生成centos-release-qemu-ev企业版kvm的yum源文件
    [root@KVM yum.repos.d]# yum -y install centos-release-qemu-ev
    [root@KVM yum.repos.d]# rpm -qa centos-release-qemu-ev
    centos-release-qemu-ev-1.0-3.el7.centos.noarch
    
    [root@KVM yum.repos.d]# ls
    bak  CentOS-Base.repo  CentOS-QEMU-EV.repo
    
    [root@KVM yum.repos.d]# cat CentOS-QEMU-EV.repo
    # CentOS-QEMU-EV.repo
    #
    # Please see http://wiki.centos.org/SpecialInterestGroup/Virtualization for more
    # information
    
    [centos-qemu-ev]
    name=CentOS-$releasever - QEMU EV
    baseurl=http://mirror.centos.org/centos/$releasever/virt/$basearch/kvm-common/    #源配置文件本行需要修改
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Virtualization
    
    [centos-qemu-ev-test]
    name=CentOS-$releasever - QEMU EV Testing
    baseurl=http://buildlogs.centos.org/centos/$releasever/virt/$basearch/kvm-common/
    gpgcheck=0
    enabled=0
    
    #安装和升级企业版qemu-kvm-ev
    [root@KVM yum.repos.d]# yum -y install qemu-kvm-ev
    [root@KVM yum.repos.d]# rpm -qa qemu-kvm-ev
    qemu-kvm-ev-2.12.0-18.el7_6.1.1.x86_64
    
    #重启KVM宿主机
    [root@KVM yum.repos.d]# reboot
    

    8.4.2 通过本地定制化yum源,升级qemu-kvm-ev

    #查看本地定制化rpm包,通过createrepo命令设定
    [root@KVM ~]# ls /root/rpm/
    ipxe-roms-qemu-20170123-1.git4e85b27.el7_4.1.noarch.rpm  repodata
    lz4-1.7.5-2.el7.x86_64.rpm                               seabios-bin-1.11.0-2.el7.noarch.rpm
    qemu-img-ev-2.10.0-21.el7_5.3.1.x86_64.rpm               seavgabios-bin-1.11.0-2.el7.noarch.rpm
    qemu-kvm-common-ev-2.10.0-21.el7_5.3.1.x86_64.rpm        spice-server-0.14.0-2.el7_5.3.x86_64.rpm
    qemu-kvm-ev-2.10.0-21.el7_5.3.1.x86_64.rpm
    
    #定制好以后,直接进行yum安装即可
    [root@KVM ~]# yum -y install qemu-kvm-ev
    
    #重启KVM宿主机
    [root@KVM ~]# reboot
    

    qemu-kvm-ev升级完毕,我们继续做外部磁盘快照

    [root@KVM ~]# virsh snapshot-create-as --domain centos6.5 guest-statel --diskspec vda,file=/export/images/centos6.5-overlay1.qcow2 --disk-only --atomic
    已生成域快照 guest-statel
    
    [root@KVM ~]# ls /export/images/
    centos6.5-overlay1.qcow2
    

    8.4.3 查看外部磁盘快照

    [root@KVM ~]# virsh snapshot-list centos6.5
     名称               生成时间              状态
    ------------------------------------------------------------
     guest-statel         2019-01-16 23:05:39 +0800 shutoff
     shot1                2019-01-16 14:10:57 +0800 running
     snapshot1            2019-01-16 13:39:57 +0800 running
     snapshot3            2019-01-16 14:04:26 +0800 running
    
    [root@KVM ~]# virsh snapshot-list --tree centos6.5
    snapshot1                   #外部磁盘快照
      |
      +- snapshot3              #虚拟机快照
          |
          +- guest-statel       #虚拟机快照
          +- shot1              #虚拟机快照
    
    #查看虚拟机磁盘信息
    [root@KVM ~]# virsh domblklist centos6.5
    目标     源
    ------------------------------------------------
    vda        /export/images/centos6.5-overlay1.qcow2     #磁盘的指向变成了我们创建的新的磁盘文件
    hda        /ios/CentOS-6.5-x86_64-bin-DVD1.iso
    
    #查看新磁盘文件的xml配置信息
    [root@KVM ~]# qemu-img info /export/images/centos6.5-overlay1.qcow2
    image: /export/images/centos6.5-overlay1.qcow2
    file format: qcow2
    virtual size: 8.0G (8589934592 bytes)
    disk size: 196K
    cluster_size: 65536
    backing file: /var/lib/libvirt/images/centos6.5.qcow2    #原始磁盘文件成了备份文件
    backing file format: qcow2
    Format specific information:
        compat: 1.1
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
    

    当我们借助外部磁盘快照进行虚拟机的磁盘热备份的时候,实际上是生成了一个指向原始磁盘的软连接的磁盘差异(增量)快照文件。而虚拟机的磁盘改为指向了新生成的软连接磁盘文件。这样子的话,原始磁盘文件就不再处于被占用状态了。我们就可以对其进行各种冷备份了。

    8.4.4 对原始虚拟磁盘文件进行冷备份
    #查看原始磁盘文件
    [root@KVM ~]# qemu-img info /var/lib/libvirt/images/centos6.5.qcow2
    image: /var/lib/libvirt/images/centos6.5.qcow2
    file format: qcow2
    virtual size: 8.0G (8589934592 bytes)
    disk size: 8.6G
    cluster_size: 65536
    Snapshot list:
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    1         snapshot1              216M 2019-01-16 13:39:57   02:04:44.485
    3         snapshot3              216M 2019-01-16 14:04:26   02:10:24.168
    4         shot1                  216M 2019-01-16 14:10:57   02:16:31.850
    Format specific information:
        compat: 1.1
        lazy refcounts: true
        refcount bits: 16
        corrupt: false
    

    我们并未在其中发现任何和新磁盘文件相关的指向性信息。因此原始磁盘文件并未被占用。我们可以进行冷备份

    #进行虚拟磁盘文件的冷备份
    [root@KVM ~]# cd /tmp/
    
    [root@KVM tmp]# tar -zcvf 2019-01-16-centos6.5.tar.gz /var/lib/libvirt/images/centos6.5.qcow2 
    
    [root@KVM tmp]# du -sh 2019-01-16-centos6.5.tar.gz
    1.0G	2019-01-16-centos6.5.tar.gz
    

    8.4.5 外部磁盘快照文件的数据回写

    先在centos6.5虚拟机中创建几个文件,然后查看切换虚拟磁盘文件后,创建的文件是否消失

    #查看虚拟机的虚拟磁盘信息
    [root@KVM tmp]# virsh domblklist centos6.5
    目标     源
    ------------------------------------------------
    vda        /export/images/centos6.5-overlay1.qcow2
    hda        /ios/CentOS-6.5-x86_64-bin-DVD1.iso
    
    #外部磁盘快照的回写
    [root@KVM tmp]# virsh blockcommit centos6.5 vda --active --verbose --pivot
    Block commit: [100 %]
    成功进行数据挖掘
    
    [root@KVM tmp]# virsh domblklist centos6.5
    目标     源
    ------------------------------------------------
    vda        /var/lib/libvirt/images/centos6.5.qcow2
    hda        /ios/CentOS-6.5-x86_64-bin-DVD1.iso
    
    #清除外部磁盘快照
    [root@KVM tmp]# virsh snapshot-list centos6.5
     名称               生成时间              状态
    ------------------------------------------------------------
     guest-statel         2019-01-16 23:05:39 +0800 disk-snapshot   #已经没用了
     shot1                2019-01-16 14:10:57 +0800 running
     snapshot1            2019-01-16 13:39:57 +0800 running
     snapshot3            2019-01-16 14:04:26 +0800 running
    
    #virsh不支持删除外部磁盘快照
    [root@KVM tmp]# virsh snapshot-delete centos6.5 guest-statel
    错误:删除快照失败:guest-statel
    错误:不支持的配置:尚不支持 1 外部磁盘快照删除
    
    #因此清除元数据信息即可
    [root@KVM tmp]# virsh snapshot-delete centos6.5 guest-statel --metadata
    已删除域快照 guest-statel
    
    [root@KVM tmp]# virsh snapshot-list centos6.5
     名称               生成时间              状态
    ------------------------------------------------------------
     shot1                2019-01-16 14:10:57 +0800 running
     snapshot1            2019-01-16 13:39:57 +0800 running
     snapshot3            2019-01-16 14:04:26 +0800 running
    

    此时,我们查看虚拟机里刚刚创建的文件是否丢失。测试结果显示,我们发现并未丢失任何文件。

  • 相关阅读:
    单片机触摸屏校准
    C中的预编译宏定义
    Android之网络摄像头
    曾经的UCOSii
    关于ST-Link下载STM32程序的使用
    关于IAR开发STM32配置
    学习C#(一)
    ESP8266使用详解--基于Lua脚本语言
    (五)Lua脚本语言入门
    (四)Lua脚本语言入门(数组遍历)
  • 原文地址:https://www.cnblogs.com/ywb123/p/11228260.html
Copyright © 2011-2022 走看看