linux不提供“逻辑卷快照剩余量”概念,因快照基于cow/row机制按需写入、无独立文件系统;df不可见未挂载快照设备,其空间实际取决于vg剩余pe和snap%使用率。

Linux 本身不提供“逻辑卷快照剩余量”这个概念——快照不单独占用预分配空间,而是按需写入,其实际占用取决于原卷变更量和COW机制行为。
为什么 df 不显示 LVM 快照的“剩余空间”
LVM 快照(如 lvcreate -s 创建的)本质是写时复制(COW)或写时重定向(ROW)的元数据映射,它没有独立的“文件系统”,也不挂载为普通目录。因此:
-
df -h只能查挂载点,快照设备(如/dev/vg0/lv0-snap)默认未挂载,df对它完全不可见 - 快照所在卷组(VG)的剩余空间 ≠ 快照可用空间;快照实际增长只消耗 VG 中未分配的物理拓展块(PE),但无硬上限,直到 VG 耗尽或快照失效
- 所谓“剩余量”其实是 VG 剩余 PE 数量,不是快照专属配额
查看快照实际已用空间:lvs 和 lvdisplay
真正反映快照健康状态的是它的“已使用比例”,即 COW 表填充率。超出阈值(默认 100%,但建议监控 80%+)会导致快照失效:
- 运行
lvs -o +snap_percent,origin,vg_name,lv_name,关注Snap%列(如42.32表示已用 42.32% 的快照空间) - 等价命令:
lvdisplay /dev/vg0/lv0-snap | grep "Copy%",输出类似Copy% 42.32 - 注意:
Snap%是相对于快照创建时分配的 COW 表大小(由-L指定)的百分比,不是 VG 剩余空间
快照空间耗尽前必须做的事
快照空间满 ≠ 磁盘满,但会导致快照立即失效(inactive 状态),且无法恢复。关键动作:
- 扩容快照:用
lvextend -L +2G /dev/vg0/lv0-snap(需 VG 有足够空闲 PE) - 清理旧快照:
lvremove /dev/vg0/old-snap释放其占用的 COW 表空间 - 避免长期保留快照:快照越久,原卷写入越多,COW 表膨胀越快;生产环境建议生命周期 ≤ 24 小时
- 创建时指定合理初始大小:
lvcreate -L 5G -s -n lv0-snap /dev/vg0/lv0;太小易满,太大浪费 VG 空间
真正需要盯住的是卷组整体剩余 PE
快照能否继续增长,最终取决于 VG 是否还有空闲 PE:
- 查 VG 剩余空间:
vgdisplay vg0 | grep "Free PE / Size",输出如Free PE / Size 1240 / 4.84 GiB - 换算成字节:
echo $((1240 * 4 * 1024 * 1024))(假设 PE 大小为 4MB) - 注意:这个“剩余”是给所有 LV(含快照)共用的,不是快照独占额度
快照空间管理的核心矛盾在于:它既没有独立文件系统可 df,又依赖 VG 整体资源。盯着 Snap% 防失效,盯着 Free PE 防枯竭,二者缺一不可。











