KVM笔记之增量镜像


增量镜像

增量镜像即保持一个基础的镜像不变,在此基础镜像上安装或修改相应的服务所创建的一个单独的镜像,增量镜像类似GIT,只记录当前KVM的修改记录,这样可以节省磁盘空间,快速复制虚拟机

基础环境准备

  • KVM基础环境

  • 基础镜像 ubuntu-base.qcow2

创建增量镜像

首先基于基础镜像 ubuntu-base.qcow2 创建一个增量镜像 ubuntu-test.qcow2

(宿主机) # qemu-img info /home/kvm/images/ubuntu-base.qcow2
image: ubuntu-base.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 2.4G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false

(宿主机) #:/home/kvm/images# qemu-img create -b ubuntu-base.qcow2 -f qcow2 ubuntu-test.qcow2
Formatting 'ubuntu-test.qcow2', fmt=qcow2 size=4294967296 backing_file=ubuntu-base.qcow2 cluster_size=65536 lazy_refcounts=off refcount_bits=16

(宿主机) #:/home/kvm/images# qemu-img info ubuntu-test.qcow2
image: ubuntu-test.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 196K
cluster_size: 65536
backing file: ubuntu-base.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

(宿主机) #:/home/kvm/images# du -sh *
2.4G	ubuntu-base.qcow2
196K	ubuntu-test.qcow2

创建KVM虚拟机

手动创建

# 注: 我基于基础镜像创建的KVM虚拟机名称为*vm-ubuntu-base*, 请根据实际进行修改
(宿主机) # cp /etc/libvirt/qemu/vm-ubuntu-base.xml /etc/libvirt/qemu/vm-ubuntu-test.xml
(宿主机) # vim /etc/libvirt/qemu/vm-ubuntu-test.xml
<domain type='kvm'>
  <name>vm-ubuntu-base</name>                                  # 虚拟机名,必须修改,否则与基本镜像虚拟机冲突
  <uuid>xxxx</uuid>                                            # UUID,必须修改,否则与基本虚拟机冲突
  ...
  <devices>                                                                     
     <emulator>/usr/bin/kvm-spice</emulator>                                     
     <disk type='file' device='disk'>                                            
       <driver name='qemu' type='qcow2'/>                                        
       <source file='/home/kvm/images/ubuntu-test.qcow2'/>     # 改成增量镜像文件位置
       <target dev='vda' bus='virtio'/>                                          
       <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
     </disk>     
     ...
     <interface type='bridge'>                                                   
        <mac address='52:54:00:83:5f:e6'/>                     # MAC地址,必须修改
        <source bridge='br0'/>                                                    
        <model type='virtio'/>                                                    
        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </interface> 
     ....
</domain>
(宿主机) # virsh define /etc/libvirt/qemu/vm-ubuntu-test.xml
(宿主机) # virsh start vm-ubuntu-test
(宿主机) # virsh list

使用virt-install创建

(宿主机) # qemu-img create -b ubuntu-base.qcow2 -f qcow2 ubuntu-test01.qcow2
(宿主机) # virt-install --name vm-ubuntu-test01 --memory 8192 --vcpus 4 --disk /home/kvm/images/ubuntu-test.qcow2 --import --virt-type kvm --os-type linux --os-variant ubuntu18.04 --network bridge=virbr0,model=virtio --graphics vnc,listen=0.0.0.0,password=foobar,port=5910 --noautoconsole --hvm

测试增量镜像

  • 进入 vm-ubuntu-test 虚拟机, 并创建一个200M的文件

    dd if=/dev/zero of=test.img bs=1M count=200
    
  • 在宿主机上查看镜像大小

    2.4G	ubuntu-base.qcow2
    294M	ubuntu-test.qcow2
    

    可以看出基础镜像大小保持不变, 增量镜像大小发生变化(为什么不是增加200M大小?)

  • 进入 vm-ubuntu-base 虚拟机, 并创建一个800M的文件

    dd if=/dev/zero of=base.img bs=1M count=800
    
  • 在宿主机上查看镜像大小

    3.0G	ubuntu-base.qcow2
    294M	ubuntu-test.qcow2
    

    可以看出基础镜像大小发生变化, 增量镜像大小不变

TODO快照与增量镜像

参考资料

  • https://yq.aliyun.com/articles/461356

  • http://www.361way.com/snapshots-blockcommit-blockpull/3194.html

作者: honmaple
链接: https://honmaple.me/articles/2020/01/KVM笔记之增量镜像.html
版权: 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat