CentOS7 KVM虚拟机快照占用磁盘过大清理方案:把“吞盘巨兽”关回笼

2025-09-16 21:26:15 137
魁首哥

近期有些网友想要了解CentOS7 KVM虚拟机快照占用磁盘过大清理方案:把“吞盘巨兽”关回笼的相关情况,小编通过整理给您分析,根据自身经验分享CentOS7 KVM虚拟机快照占用磁盘过大清理方案:把“吞盘巨兽”关回笼有关知识。

CentOS7 KVM虚拟机快照占用磁盘过大清理方案:把“吞盘巨兽”关回笼

快照本来是救急用的“后悔药”,结果一不留神变成“磁盘黑洞”,一块500G的盘能被吃掉400G,业务还没挂,宿主机先报警。别急着加硬盘,先把手里的KVM快照盘清楚,空间立马吐回来。

一、先确认是谁在“偷”空间

登录宿主机,两条命令直奔主题:

virsh domblklist 虚拟机名

列出所有磁盘路径,复制对应的qcow2文件路径。

qemu-img info /var/lib/libvirt/images/xxx.qcow2

重点看virtual sizedisk size差距,差值就是快照链占掉的实际物理空间。如果disk size飙到virtual size的八九成,基本已经“胖”到警戒线。

二、合并快照前必做的“保险”

1. 关机:在线合并理论上可行,但IO一高容易把链拉断,直接关机最稳

2. 备份:整盘拷一份到别的目录,cp也好,rsync也罢,十分钟换安心。

3. 确认无残留快照:

virsh snapshot-list 虚拟机名 --tree

只要有分叉,先virsh snapshot-delete子节点,再删父节点,顺序反了会丢数据

三、正式“减肥”:合并qcow2链

1. 找到当前正在用的top镜像:

virsh dumpxml 虚拟机名 | grep 'source file'

2. 合并到 backing file:

qemu-img rebase -b 原盘.qcow2 -f qcow2 top.qcow2

3. 真正压缩:

qemu-img commit top.qcow2

4. 最后把链压成一层:

qemu-img convert -O qcow2 top.qcow2 新盘.qcow2

5. 改配置指向新盘:

virsh edit 虚拟机名

把路径换成新盘,启动验证。

这一步做完,400G常常能压回120G,具体 ratio 看里面碎片率。

四、不想关机的“曲线救国”法

业务24h不能停?用blockpull

virsh blockpull 虚拟机名 vda --wait --verbose

把数据在线拉到当前层,拉完立即删除旧快照,IO会飙高,选凌晨低峰期操作。拉完再qemu-img convert一遍,空间同样能回收。

五、日常“防反弹”三件套

1. 快照留不超过两层,用完即删,拒绝“俄罗斯套娃”。

2. 给虚拟机装virtio-scsi + discard,客户机里执行fstrim -av,qcow2立即释放未用块。

3. 宿主机定时跑:

qemu-img check -r all xxx.qcow2

既能早发现问题,又能把碎片压扁。

六、踩坑速查表

• 合并完启动报“找不到backing file”——rebase时路径写错,用qemu-img rebase -u重新指。

• 删除快照提示“internal error: unable to execute QEMU command ‘transaction’”——说明还有子快照在引用,先删子后删父。

• convert后容量反而变大——源盘曾经写过大量零,加-c参数做压缩:qemu-img convert -c -O qcow2

把上面流程跑通,宿主机磁盘告警直接消失,再也不用被“快照吃盘”半夜叫醒。记住:快照是急救绷带,不是长期仓库,用完就撕,空间永远够用。

分享
海报
137
上一篇:CentOS7 LVM卷组丢失:pvs命令恢复UUID实录 下一篇:CentOS7 GRUB2加密防止单用户模式改密码:把“后门”彻底焊死

忘记密码?

图形验证码