首页/云/云平台与虚拟化速查/qemu-img 管理 qcow2 内部快照
虚拟化操作94 条

qemu-img 管理 qcow2 内部快照

qemu-img snapshot 直接操作 qcow2 内部快照:-c 创建、-l 列表、-a 应用、-d 删除;它与 libvirt 的快照元数据体系相互独立,混用会造成状态认知偏差。

云平台与虚拟化速查云更新于 2026-10-13

qcow2 内部快照管理

qemu-img snapshot 直接操作 qcow2 的内部快照:-c 创建、-l 列表、-a 应用、-d 删除。它与 libvirt 自己的快照元数据体系相互独立——libvirt 不感知 qemu-img 建出来的快照。两套体系混用会造成状态认知偏差,所以服务化环境一般统一走 virsh。

基本信息

创建qemu-img snapshot -c snap1 disk.qcow2
列表qemu-img snapshot -l disk.qcow2
应用qemu-img snapshot -a snap1 disk.qcow2
删除qemu-img snapshot -d snap1 disk.qcow2
适用范围仅支持内部快照的格式(如 qcow2)
操作前提最好在关机状态执行,避免运行态写入冲突

典型使用场景

  • 实验环境做快速回滚:改配置前打一个还原点
  • 排查镜像问题时先保留现场
  • 离线准备镜像时记录一个基线状态
  • 对没有纳入 libvirt 管理的裸镜像做版本点
  • 给自动化测试提供快速恢复点

内部快照操作序列

内部快照操作序列
qemu-img snapshot -c snap-baseline disk.qcow2     # 创建内部快照
qemu-img snapshot -l disk.qcow2                   # 列出快照:名称、大小与时间
qemu-img info disk.qcow2 | head -8                # 确认格式与虚拟、实际占用
qemu-img snapshot -a snap-baseline disk.qcow2     # 回滚到该快照
qemu-img snapshot -d snap-baseline disk.qcow2     # 删除快照并释放空间

常用参数

参数作用注意点
-c创建内部快照仅适用于支持内部快照的格式
-l列出快照可看名称、大小与创建时间
-a应用(回滚)快照会丢弃之后的写入,不可撤销
-d删除快照释放其占用空间,操作不可恢复
不建议对正在被 QEMU 使用的镜像执行应用操作:libvirt 不感知 qemu-img 创建的快照,两套快照体系互相覆盖会让状态无法解释。服务化环境统一走 virsh 更可靠。
内部快照存放在镜像文件内部,必须删除快照才能真正释放空间;这与外部快照生成独立 delta 文件的存储行为不同,做容量规划时要区分开。

易错点

  • virsh snapshot-list 看不到 qemu-img 建的快照,误判快照丢失
  • 运行中的镜像做回滚有数据风险:先关机,或统一用 libvirt 接口
  • 只创建内部快照不清理,镜像体积随快照层数持续增长
  • 把内部快照当备份,镜像文件损坏时快照和数据一起丢失
  • 对不支持内部快照的格式(如 raw)执行创建,命令直接报错
  • 回滚前未确认快照对应的状态,恢复到的不是期望的时间点
  • 在共享同一镜像的虚机之间混用快照,回滚后两边数据互相不匹配
  • 在快照上继续做文件操作而不留标记,后续无法判断当前处于哪一层

数据来源与参考

  • qemu-img 手册:snapshot
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌