首页/云/云平台与虚拟化速查/blockcommit / blockpull 合并快照链
虚拟化操作94 条

blockcommit / blockpull 合并快照链

外部快照产生的增量层需要合并回基础盘:blockcommit 把中间层合并到基础(--active --pivot 用于活动层),blockpull 则把 backing 内容拉进当前层以断开依赖。

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

是什么

做外部快照会在基础盘之上叠出增量层,快照多了以后虚机磁盘就成了一条链:读写要穿透多层,管理也更复杂。合并操作把增量层的内容并回基础盘,让链变短。合并活动层使用提交命令加枢轴参数,把当前运行层并回底层并切换;拉平则把底层内容并入当前层,让镜像不再依赖底层文件。

基本信息

合并活动层把运行中的增量层并入基础盘,并切换到合并后的镜像
拉平镜像把底层内容拉进当前层,使镜像脱离对底层文件的依赖
查看进度查询块任务信息,观察已完成比例
取消任务任务执行中可请求取消,但要确认取消后的数据状态
收尾核对合并完成后用镜像信息命令查看依赖链是否已经清空

典型使用场景

  • 快照收尾:备份完成后把增量层合并回基础盘,恢复单层结构
  • 链过长:多层叠加导致性能下降,合并缩短链长
  • 交付整理:把依赖底层的镜像拉平,便于单独分发
  • 空间回收:合并后清理不再需要的增量文件,释放存储
  • 迁移准备:迁移前先把镜像链拉平,避免搬漏依赖文件

合并与拉平

合并与拉平
virsh blockjob vm1 vda --info            # 查看当前是否有块任务在跑
# 合并活动层并切换:适用于外部快照收尾
virsh blockcommit vm1 vda --active --pivot --wait --verbose
# 拉平:把底层内容并入当前层,之后不再依赖底层文件
virsh blockpull vm1 vda --wait --verbose
virsh domblklist vm1                     # 确认虚机仍指向正确的磁盘
qemu-img info --backing-chain /var/lib/libvirt/images/vm1.qcow2

操作要点

项说明注意点
合并方向增量层并回基础盘,与拉平方向相反选错方向会让链更长或改变镜像结构
枢轴切换合并活动层时切换虚机使用的新镜像完成后核对虚机磁盘指向是否已更新
执行窗口合并涉及大量顺序读写业务高峰执行会明显拖慢虚机 IO
并发同一磁盘上不要同时跑多个块任务并发冲突会导致任务失败或状态不一致
空间合并过程需要额外空间做中转存储余量不足会让任务中途失败
合并是 IO 密集型操作:一套链越深、磁盘越大,耗时越长。安排在业务低谷,并对宿主的存储延迟做监控,避免影响同宿主其他虚机。
合并进行中不要动增量文件:手工删除或移动链上的文件会让任务失败,严重时整条链不可用,虚机需要从备份恢复。

易错点

  • 合并进行中删除或移动增量文件,任务失败并可能损坏镜像链
  • 在业务高峰执行合并,IO 放大导致虚机与应用明显变慢
  • 合并完成后未核对虚机磁盘指向,虚机仍挂在旧链上
  • 存储余量不足就发起合并,任务中途失败且留下中间状态

数据来源与参考

  • libvirt 文档:blockcommit / blockpull
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌