lvm快照卷不会自动清理,需主动干预;其空间满因cow机制下源卷写入导致变更块持续复制,清理须按“删、合、扩、查”优先级操作,并通过合理预设大小、启用自动扩容及监控告警预防溢出。

LVM 快照卷不是“自动清理”的对象,它不会随时间推移自行释放空间;快照溢出(snap%=100%)本质是写入变更耗尽了预分配空间,清理的关键是主动干预:删、合、扩、查——而不是等它“满了再救”。
快照空间为什么会满
快照采用 COW(Copy-on-Write)机制:源 LV 每次修改旧数据块,LVM 就把原块拷贝进快照卷保存。只要源卷持续写入(如日志轮转、数据库更新、临时文件生成),快照空间就会线性增长。
⚠️ 注意:快照本身不记录“新增文件”,只保存被覆盖的原始块——所以哪怕你只改一个 1KB 的配置文件,也可能触发整块(通常 4MB)复制。
立即执行的清理操作(按优先级排序)
确认快照是否还在用
运行lvs -o +snap_percent,attr,找出 SNAP% 高(≥90%)且状态含s(suspended)或I(inactive)的快照。
若该快照已无业务用途(比如备份已完成、测试已结束),直接进入下一步。-
合并快照(最彻底的清理)
合并会把快照中保留的原始数据回写到源 LV,并自动删除快照:lvconvert --merge /dev/vgname/snapname
✅ 前提:源 LV 必须处于未挂载状态(
umount /dev/vgname/lvname),且快照不能被挂载或激活。
✅ 合并后源 LV 恢复为创建快照时的状态(相当于一次“回滚”)。 -
删除无用快照(最常用)
如果快照没被挂载、也没在用于备份/恢复,直接删:lvremove /dev/vgname/snapname
⚠️ 删除前务必确认:
lsof /dev/vgname/snapname或mount | grep snapname,确保没进程正在访问它。 -
扩容快照(应急保命,非长久之计)
若快照还在运行中、又不能立刻合并或删除(比如备份脚本正读取它),可临时加空间:lvextend -L +1G /dev/vgname/snapname
✅ 要求卷组(VG)有空闲 PE;扩容后 suspended 状态会自动解除,I/O 恢复。
❌ 不解决根本问题——只是买时间,后续仍需合并或删除。
日常预防快照溢出的实操建议
-
创建快照时设合理大小
不要盲目用-L 1G。参考源卷写入频率:- 静态数据(如镜像库)→ 500MB~1GB 足够;
- 日志类活跃卷 → 至少预留 5%~10% 源卷大小;
- 数据库主卷 → 建议 15%+,或启用自动扩容(见下条)。
启用自动快照扩容(LVM 2.03+ 支持)
创建时加--ignoremonitoring并配合lvchange --monitor y,让dmeventd监控快照使用率,接近阈值时自动lvextend。
(需确保dmeventd服务已启用:systemctl enable --now dmeventd)-
加监控告警(必做)
每小时跑一次检查:lvs -o lv_name,vg_name,snap_percent,attr --noheadings | awk '$4 ~ /s/ || $3 > 85 {print "ALERT: " $1 "/" $2 " at " $3 "%"}'把输出接入邮件或企业微信,避免等到
df卡死才发现。
快照不是垃圾桶,而是快门——按完就得及时“洗照片”,否则胶卷会塞满。











