技术文章2026 年 4 月 18 日约 2.8 分钟

KVM qcow2 磁盘与快照:空间管理和回滚策略

介绍 qcow2、内部快照和外部快照的使用边界,避免快照链过长导致性能与空间风险。

qcow2 是 QEMU 的镜像格式,也是 KVM 默认的磁盘格式。它支持稀疏分配、压缩、加密和快照。这篇文章讲清楚它的空间模型,以及「内部快照」和「外部快照」各自的适用场景——很多人在这里翻车。

#qcow2 的空间模型

qcow2 是按需分配的:size=40G 创建的镜像,实际只占几百 KB,写入时才增长。查看真实占用:

bash
du -h /var/lib/libvirt/images/web01.qcow2
qemu-img info /var/lib/libvirt/images/web01.qcow2
# 输出里 virtual size 和 disk size 对比,就是真实占用

这让「创建 40G 虚拟机」变得很轻,但也带来两个风险:

  1. 宿主机磁盘可能被撑爆:20 台虚拟机各声明 40G,宿主机只有 200G,全写满就 OOM 级事故(磁盘满)。规划时按「虚拟 size 总和」和「物理磁盘」两个维度都留余量。
  2. 空洞不是零:删除虚拟机里的文件,qcow2 文件不会自动收缩,du 看到的空间不会回来。需要手动 qemu-img convert 重建镜像来瘦身。

#内部快照:简单,但有代价

内部快照把状态存在同一个 qcow2 文件里(用 virsh snapshot-create-as):

bash
virsh snapshot-create-as web01 before-upgrade --description "升级前"
virsh snapshot-list web01
virsh snapshot-revert web01 before-upgrade
virsh snapshot-delete web01 before-upgrade

优点:一条命令、随镜像走、管理简单。缺点:

  • 快照越多,写性能越差(每次写都要查快照链)。
  • 内部快照在镜像文件变大后不能安全删除,可能把文件搞坏。
  • 不适合长时间保留,适合「操作前临时留一手」。

#外部快照:生产环境的正解

外部快照把状态写到新文件,原镜像变成只读基盘,写操作全部落到新文件:

bash
virsh blockcopy web01 vda /var/lib/libvirt/images/web01.after.qcow2 \
  --wait --pivot --finish

或者用最朴素的方案——停机后直接复制 qcow2:

bash
virsh shutdown web01
cp /var/lib/libvirt/images/web01.qcow2 /backup/web01-$(date +%F).qcow2
virsh start web01

数据库类应用更推荐先 fsfreeze 或用快照工具保证一致性,纯 cp 正在写的文件等于备份一个损坏的数据库。停机复制虽然笨,但一致性和简单性都最好。

#快照链的隐患

外部快照可以叠出很长的链(base → snapshot1 → snapshot2 → ...),链越长:

  • 读路径越长,IO 性能越差;
  • 中间任何一环损坏,整条链都读不出来;
  • 回滚语义变复杂,容易回错层级。

所以快照链要控制深度,定期把链合并回一个文件:

bash
qemu-img convert -O qcow2 web01.current.qcow2 web01.merged.qcow2
# 验证后用合并文件替换,删掉旧链
qemu-img check web01.merged.qcow2

#回滚的正确姿势

bash
virsh snapshot-revert web01 before-upgrade    # 内部快照回滚
# 或(外部快照/备份文件):
virsh destroy web01
mv web01.qcow2 web01.corrupt.qcow2
cp /backup/web01-2026-08-20.qcow2 web01.qcow2
virsh start web01

回滚前记住两件事:先备份当前状态(万一回滚后悔了),回滚后检查虚拟机内时钟和数据一致性(快照恢复后数据库可能需要恢复日志)。

#实战建议

  • 虚拟机刚装好、软件配置完成时,做一次「干净基线」快照,以后随时可以回到这个状态。
  • 升级/变更前用 virsh snapshot-create-as 或停机复制留一手,变更后验证 OK 再删快照。
  • 定期 qemu-img check 检查镜像完整性——这命令快,值得养成习惯。

写于 2026 年 4 月 18 日

栏目
技术文章
约
2.8 分钟
字数
1.8K
阅读
159

本文为原创记录,转载请注明出处。如果这篇替你省了时间,欢迎留言说说你踩到的坑。

同题 · related

留言 · remarks

00 条

还没有留言,来说点什么吧。

KVM qcow2 磁盘与快照:空间管理和回滚策略 · LXH·BLOG