igozhang

——

    kvm增量镜像

    环境

    组件 版本
    操作系统 Ubuntu 20.04.1
    virsh 6.0.0
    qemu-img 4.2.1

    概述

    增量镜像(基于 qcow2 的 backing file)在保留完整系统镜像的前提下,只记录相对基础镜像的变更。主要优点:

    • 快速恢复:删除或重建增量层即可回到基础镜像状态,无需重新拷贝整盘
    • 占用空间小:多个虚拟机可共用同一份系统镜像,各自仅保存差异数据

    基础镜像建议设为只读,避免被误写导致所有依赖它的增量盘损坏。

    创建增量镜像

    server_samba 上,基于系统镜像创建增量镜像:

    qemu-img create -f qcow2 -b os.image vm-19.qcow2
    

    说明:

    • -f qcow2:增量盘格式为 qcow2
    • -b os.image:指定 backing file(基础系统镜像)
    • vm-19.qcow2:新建的增量镜像文件

    创建后可用以下命令确认链路:

    qemu-img info vm-19.qcow2
    qemu-img info -U --backing-chain vm-19.qcow2
    

    若基础镜像与增量盘不在同一目录,建议使用绝对路径指定 backing file,例如:

    qemu-img create -f qcow2 -b /mnt/igo_vm_image/v2/os.image \
      /mnt/igo_vm_image/v2/vm-19.qcow2
    

    挂载使用增量镜像

    client_kvm 上,通过 libvirt XML 挂载增量镜像。需同时声明增量盘与其 backingStore,否则虚拟机启动可能失败或无法正确识别链路:

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/mnt/igo_vm_image/v2/vm-19.qcow2'/>
      <backingStore type='file'>
        <format type='qcow2'/>
        <source file='/mnt/igo_vm_image/v2/os.image'/>
        <backingStore/>
      </backingStore>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    

    字段说明:

    字段 含义
    source file(外层) 增量镜像路径(读写层)
    backingStore 基础镜像(只读层)
    最内层空的 <backingStore/> 表示链路结束,基础镜像不再有更下层
    target dev='vda' 客户机内磁盘设备名
    bus='virtio' 使用 virtio 磁盘,性能较好

    配置生效示例:

    # 编辑域配置后重定义,或直接编辑运行中的域(视环境而定)
    virsh edit <域名>
    virsh define <域名>.xml
    

    使用注意

    1. 基础镜像只读:对 os.image 执行 chmod a-w,或通过存储权限限制写入
    2. 路径一致client_kvm 上 XML 中的路径须能实际访问到镜像(本例经 Samba 挂载至 /mnt/igo_vm_image/v2/
    3. 格式匹配:backing file 与 XML 中 format type 须与实际格式一致(此处均为 qcow2)
    4. 并发共享:多个 VM 可共用同一 os.image,但每个 VM 必须有独立的增量盘(如 vm-19.qcow2),不可多机同时写同一增量文件
    5. 备份与恢复:备份时可只备份增量盘;恢复时删除损坏的增量盘并重新 qemu-img create -b 即可快速回到干净系统状态

    MP3