linux下virsh管理kvm快照需基于qcow2格式,利用cow机制实现快速创建与精准回滚;操作包括转换磁盘格式、创建/列出/还原/删除快照及自动化脚本管理。

Linux 下用 virsh 管理 KVM 虚拟机快照,核心是围绕 qcow2 磁盘格式 和 运行中/关机状态的灵活操作 展开。快照不是简单复制文件,而是基于写时复制(COW)机制生成的增量磁盘层,既能快速创建,也能精准回滚。
快照前提:确认虚拟机配置合规
virsh 快照功能只支持 qcow2 格式磁盘。若当前使用 raw 格式,必须先转换:
- 查看磁盘格式:
qemu-img info /var/lib/libvirt/images/vmname.qcow2,确认输出含file format: qcow2 - 如为 raw,执行转换:
qemu-img convert -f raw -O qcow2 vmname.img vmname.qcow2 - 更新虚拟机 XML 配置指向新镜像:
virsh define /etc/libvirt/qemu/vmname.xml(修改后需重新定义)
创建与管理快照的常用命令
快照可随时创建,无需停机;但为保证数据一致性,建议在关键操作前先关闭或暂停虚拟机。
- 创建带描述的快照:
virsh snapshot-create-as --domain vmname --name snap-20260618 --description "before kernel update" - 列出所有快照:
virsh snapshot-list vmname - 查看某快照详情:
virsh snapshot-info vmname snap-20260618 - 导出快照配置(XML)便于审计:
virsh snapshot-dumpxml vmname snap-20260618 > snap.xml
还原与清理:安全回退与空间释放
还原快照会丢弃自该快照之后的所有更改;删除快照则仅移除对应增量层,不触碰原始镜像。
- 立即回滚到指定快照(虚拟机需关机):
virsh snapshot-revert vmname snap-20260618 - 若想在运行中还原(部分场景支持),需确保快照为“disk-only”类型,且虚拟机支持热还原
- 删除单个快照:
virsh snapshot-delete vmname snap-20260618 - 清空全部快照(慎用):
virsh snapshot-delete-all vmname
自动化快照:用脚本降低操作风险
手动操作易遗漏或命名混乱,推荐用简单 Bash 脚本统一管理:
- 脚本示例(保存为
/usr/local/bin/vm-snap.sh): #!/bin/bash<br>vname="$1"<br>if [ -z "$vname" ]; then echo "Usage: $0 vmname"; exit 1; fi<br>snapname="snap-$(date +%Y%m%d-%H%M)"<br>virsh snapshot-create-as --domain "$vname" --name "$snapname" --description "auto $(date)"
- 赋予执行权限:
chmod +x /usr/local/bin/vm-snap.sh - 日常调用:
vm-snap.sh webserver,自动命名并记录时间戳











