快照爆满(snap%=100%)时,LVM自动将原LV设为suspended状态,表现为I/O挂起、应用卡死、df卡住、lvs显示s标志;需用lvs -o +snap_percent,attr、dmsetup status和dmesg定位问题快照;可在线执行lvextend扩容、lvconvert --merge合并或只读挂载快照取数据;事后须删除无用快照并加强监控。

快照爆满(snap% = 100%)时,LVM 会自动将原逻辑卷(LV)设为 suspended 状态,表现为 I/O 挂起、应用卡死、df 卡住、lvs 显示 s 标志(如 -wi-sao----),此时不能写入也不能正常挂载——这不是文件系统损坏,而是 COW 机制强制保护触发的紧急冻结。
立即确认快照状态与挂起根源
先用以下命令快速定位问题快照:
-
lvs -o +snap_percent,attr /dev/vgname—— 查看所有 LV 的 SNAP% 和 attr 列,重点关注带s(suspended)标志且 SNAP% ≥ 95% 的条目 -
dmsetup status—— 输出中若某 device 显示suspended,对应的就是被冻结的 LV 设备名(如vgname-lvname) -
dmesg | tail -20—— 检查内核日志是否含snapshot: snapshot is full或suspend相关报错
不重启的在线紧急恢复三步法
只要原 LV 未被卸载、系统未 panic,可全程在线操作(无需重启或停服务):
-
第一步:临时扩容快照空间
用lvextend立即追加空间(需卷组有空闲 PE):lvextend -L +2G /dev/vgname/snapname
扩容后快照自动解除 suspended,原 LV I/O 恢复(秒级生效) -
第二步:强制合并快照(推荐优先执行)
若快照已无业务用途,直接合并回原 LV:lvconvert --merge /dev/vgname/snapname
注意:必须确保原 LV 当前未挂载(umount),且快照未被 mount;合并后快照消失,原 LV 回滚至创建时刻状态 -
第三步:若无法卸载原 LV,改用只读挂载快照取数据
新建临时挂载点:mkdir /mnt/snap_recover && mount -o ro /dev/vgname/snapname /mnt/snap_recover
从/mnt/snap_recover拷出关键文件,避免依赖原 LV 继续运行
后续必须做的清理与预防
爆满是预警信号,不是终点:
- 删掉已合并或无用的快照:
lvremove /dev/vgname/snapname(确认无残留挂载) - 检查脚本是否漏了
lvchange -ay—— 快照创建后默认 inactive,未激活就 mount 会失败,但不会导致爆满;而爆满只和空间不足有关 - 监控加入定时任务:
*/10 * * * * root lvs -o lv_name,snap_percent --noheadings vgname 2>/dev/null | awk '$2 > 85 {print "ALERT: "$1" at "$2"%"}' - 下次创建快照时显式指定大小,例如原 LV 为 500G,至少分配
-L 100G(20%),而非依赖默认行为

















