虚拟机合并的本质就是清理快照读写链,把增量数据写回基础磁盘,不同平台底层原理相通,但操作入口和命令各有侧重。
VMware虚拟机快照合并方法
VMware 是我们在服务器虚拟化场景中接触最多的平台之一,所谓合并,就是把虚拟机当前状态与基础磁盘之间的所有快照差异层融合到基础虚拟磁盘文件(VMDK)里,释放被快照占用的存储空间,日常工作中,最常见的状态是虚拟机挂载了几层快照,系统越跑越慢,存储空间报警,这时候就需要动一次合并操作。
vSphere Web Client 图形界面合并步骤
如果你的虚拟机跑在 vSphere 环境里,图形界面是最直观的操作路径,登录 vSphere Client,找到目标虚拟机,右键点击,选择“快照”菜单里的“管理快照”,在弹出的窗口里,你会看到一个快照列表,从上到下依次是当前状态到最早快照的时间线,删除旧快照会触发合并过程,系统会把快照数据写入父磁盘,这个过程对虚拟机性能影响较大,建议在业务低峰期操作。
操作完成后,需要确认虚拟机硬件列表里的虚拟磁盘文件大小变化,如果之前快照层积累了大量数据(比如删除过的文件还残留在快照里),VMDK 文件不会立刻缩小,因为空间回收需要额外的存储操作,这一点在后面讲空间整理时展开。
使用 esxcli 命令合并快照
命令行合并适合批量处理或者图形界面卡死的场景,通过 SSH 登录 ESXi 主机,先定位目标虚拟机的 vmid:
- 执行
vim-cmd vmsvc/getallvms查看所有虚拟机的 VMID - 执行
vim-cmd vmsvc/snapshot.get {vmid}列出当前快照树 - 确定要删除的快照 ID 后,执行
vim-cmd vmsvc/snapshot.remove {vmid} {snapshotId}
命令执行期间,ESXi 会创建一个名为”replay”的临时快照作为保护点,合并完成后自动消失,如果进度条卡住不动超过半小时,多半是存储队列拥堵或者源磁盘上有 I/O 错误,这时候不要强行重启,等它超时或者联系存储厂商协助排查。
快照太多怎么合并处理
快照不是越多越好,每层快照都会拖慢虚拟机性能,业内有个不成文的建议,生产环境的快照层级不要超过三层,时间不要超过一周,如果你接手了一台快照叠了七八层的虚拟机,不要一次性全部删除,这会让底层磁盘瞬间产生大量写操作,可能导致存储超时甚至虚拟机挂起。
正确操作方式是分批合并,先删除中间层级的旧快照,每删除一个,检查虚拟机的磁盘 I/O 延迟是否恢复正常,等存储端负载回落,再删除下一条,如果虚拟机跑的是数据库等写入密集型应用,合并前最好先挂起应用或者短暂关机,避免数据不一致,行业共识认为,快照清理是虚拟化运维里最容易踩坑的操作之一,宁可多停机几分钟,也不要冒险热合并。
KVM虚拟机磁盘合并命令详解
KVM 平台下的虚拟机磁盘合并,核心工具是 qemu-img,它不依赖任何商业管理平台,纯命令行操作,在 OpenStack 环境或纯 Linux 服务器上非常常见,合并本质上就是把快照文件的磁盘数据 rebase(基底重定向)回原始磁盘镜像。
基于 qemu-img 的快照合并方法
先查看当前磁盘和快照的父子关系,假设你的虚拟机磁盘文件是ubuntu-base.qcow2,快照文件是snap1.qcow2,执行:
qemu-img info ubuntu-base.qcow2会显示 backing file 信息,如果你需要把快照合并到底部镜像,最稳妥的方式是使用 rebase 命令:
qemu-img rebase -b '' -f qcow2 -F qcow2 snap1.qcow2(将快照脱离 backing file 独立)qemu-img commit snap1.qcow2(直接将快照内容写回底层镜像)
commit 和 rebase 的区别:commit 是向上合并(快照数据覆盖到基础盘),rebase 是重新指定基底路径,日常操作中,如果你只想保留快照里的数据并让虚拟机直接使用基础盘,用 commit 即可,如果基础盘路径迁移了(比如换存储目录),用 rebase。
虚拟机未开机状态下的磁盘合并流程
KVM 合并有个硬性要求,虚拟机必须处于关机状态,测试环境里你或许能关闭写操作后强行合并,但生产环境会带来 qcow2 文件损坏、目录结构错乱等连锁故障,具体操作建议:
- 登录宿主机,确认虚拟机状态:
virsh list --all - 关机:
virsh shutdown {vm-name},如果是数据库实例,先停止应用再关机 - 进入镜像目录,手动备份一份元数据(可选操作):
cp snap1.qcow2 snap1.qcow2.bak - 使用 commit 合并,完成后用
qemu-img info验证 backing file 是否已经消失
市面上不少管理工具(Proxmox VE、OpenStack 的 glance)也封装了 qemu-img 的操作,逻辑不变,只是多了 API 层。
qcow2 磁盘空间回收技巧
即使成功合并了快照,qcow2 文件本身也不会变小,这是因为 qcow2 采用稀疏文件分配,已写入的数据块不会自动释放,若你的虚拟机删除过大量文件(比如清理日志),宿主机上看到的磁盘文件还是原封不动的几十 GB,解决办法是占用空间清零后再压缩:
- 在虚拟机内部执行
dd if=/dev/zero of=/tmp/zero.bin bs=1M,直到磁盘写满 - 删除这个临时文件:
rm /tmp/zero.bin - 关机后在宿主机执行
qemu-img convert -O qcow2 --sparse source.qcow2 compacted.qcow2
convert 命令会生成一个新镜像,新文件只包含实际数据块,比较常用的大文件瘦身手段,配合定期压缩,能有效缓解 KVM 虚拟机磁盘占满的经典问题。
虚拟机合并时数据安全如何保证
快照合并涉及底层磁盘的批量读写,一旦中断,轻则数据文件不一致,重则整台虚拟机无法启动,针对不同平台的保护策略不尽相同,但有一条主线:先备份,再合并,永远不要跨过备份直接在生产环境上操作。
合并虚拟机前必须做的备份确认
VMware 环境下,先通过 Storage vMotion 把虚拟机迁移到另一台数据存储上,生成一个完整副本,或者使用 VDP/Veeam 做一次虚拟机级备份,KVM 环境更简单,直接复制 qcow2 文件到备份目录即可,但要注意虚拟机需处于关闭状态才能保证复制出的文件是一致的。
近年来,勒索软件对虚拟化平台的攻击频繁,“备份不可信”的教训不少,所以备份文件不要存放在同一台宿主机上,至少放到另一台物理服务器的磁盘,这样主机丢失或系统崩溃时还有退路,据工信部相关安全通告,虚拟化平台的数据安全事件呈上升趋势,加固备份意识是底线。
合并前如何评估虚拟机的当前负载
合并期间,I/O 延迟会比平时高出不少,尤其是存储端负载已超过 70% 的集群,建议在操作之前查看 Datastore 的性能图表,确认当前读写延迟是否处在正常范围,如果你机器上有持续性的任务(比如批处理、数据迁移),最好等任务结束再操作。
常用评估手段:
- VMware 环境查看 vCenter 性能图,看“存储 D 以毫秒计的延迟”指标
- KVM 环境使用 iostat 观察宿主机磁盘 util 百分比,util 超 80% 时不宜执行合并
- 数据库类应用需要确认主从同步状态,合并完成前不要让写入流量涌入
合并失败后的回滚计划
快照合并很少完全失败,但一旦发生,常见的表现是虚拟磁盘文件锁住、虚拟机无法开机,VMware 里可以通过 VCSA 的 API 删掉残留 lock 文件,但操作不当可能会丢数据,需要慎之又慎,KVM 环境有更简单的恢复法:把备份的 qcow2 文件放回原目录,修改虚拟机配置指向备份文件即可找回数据。
从这里也可以看出,冗余备份不仅是为了防患于未然,更是你回滚的唯一钥匙,没有备份的合并操作,相当于闭眼开车,翻车只是时间问题。
虚拟机快照合并出现异常怎么排查
快照合并异常,通常是合并过程中存储空间不足、磁盘锁竞争,或者源文件损坏引起的,异常后不要手忙脚乱,按顺序排查能省下不少时间。
- 第一,查看虚拟机任务日志,VMware 任务窗格里能看到错误码,ESXi 的 vmkernel 日志里也会有对应记录,KVM 则查看宿主机的 syslog 日志,
grep qemu /var/log/messages。 - 第二,检查数据存储剩余空间,合并过程中的临时文件可能会占用比预期更大的空间,空间不够就直接导致合并失败,预留出至少虚拟磁盘文件大小 1.5 倍的余量,是比较稳妥的。
- 第三,检查是否有其他任务正在占用磁盘,比如同时有虚拟机克隆、模板转换任务在跑,会跟快照合并操作争抢 I/O 锁,导致其中一个任务超时。
Hyper-V 平台的情况稍有不同,它的检查点(Checkpoint)合并是作为后台任务执行的,一旦失败,虚拟机会变成“合并挂起”状态,这时候在 PowerShell 里运行Get-VM –Name {虚拟机名} | Get-VMSnapshot查看状态,如果显示异常,执行Remove-VMSnapshot清理异常检查点,再重新启动合并,Hyper-V 的合并机制相对保守,但也正因如此,它在生产库环境里更受欢迎。
Q&A:虚拟机快照合并常见问题
虚拟机快照合并会很慢,正常吗?
正常,快照合并的本质是把差异数据逐块写入基础磁盘,耗时与快照数据量、存储类型呈正相关,全闪存储可能几分钟完成,机械盘阵列上几十 GB 快照跑一两个小时并不罕见,合并期间建议暂缓高峰业务,尽量将写入控制在安全水位以下。
KVM 虚拟机磁盘合并是否可以热操作
生产环境不建议热操作,虽然部分存储后端(如 Ceph)支持在线 rebase,但这依赖宿主机的存储驱动和虚拟化层完整支持,多数情况下,corruption 的风险远大于那几分钟的停机成本,离线合并仍然是 KVM 平台最稳妥的方案。
虚拟机合并操作在 Windows Hyper-V 平台如何处理
Windows Server 上通过 Hyper-V 管理器删除检查点,或者在 PowerShell 中执行 Remove-VMSnapshot 均可完成合并,删除检查点时,系统将检查点的数据合并到父虚拟磁盘,较大检查点的合并会持续较长时间,期间虚拟机的存储性能会受影响,计划内操作同样建议先备份,再检查副本状态,最后合并。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/927987.html


评论列表(1条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是执行部分,给了我很多新的思路。感谢分享这么好的内容!