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