直接查 lvs 不显示快照剩余空间,需用 lvs -o +snap_percent 显式获取实时使用率;snap_percent 列反映 COW 空间已用比例,是唯一动态准确指标,lvdisplay 中的 Allocated 值为静态初始大小,不可代表余量。

直接查 lvs 不显示快照剩余空间?用 lvs -o +snap_percent
Linux LVM 快照的“剩余空间”不是独立分区,而是源逻辑卷(LV)预留的 COW(Copy-on-Write)空间,它会随写入变化实时消耗。默认 lvs 输出不显示这个百分比,必须显式加列。
执行:lvs -o +snap_percent 或更常用的是 lvs -S 'lv_attr=~[^s.*]' -o lv_name,vg_name,lv_size,snap_percent,origin(过滤出快照卷并显示使用率)
-
snap_percent列显示当前已用比例,比如87.23表示 COW 空间已用 87.23%,剩余约 12.77% - 如果该列为空或显示
-,说明这不是快照卷(lv_attr第 7 位不是s),别误判 -
lvs默认不递归统计,快照本身不占用额外文件系统空间,只吃源 LV 的预留空间
lvdisplay 显示的 Allocated to snapshot 是静态值,不能反映实时余量
lvdisplay /dev/vgname/lvname 会列出 Allocated to snapshot 字段,但它只是创建快照时指定的初始大小(如 1G),不是动态剩余值。这个数字不会变,哪怕快照已写满或几乎没动过。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
真正有意义的指标只有 snap_percent —— 它由内核实时更新,依赖于 COW 元数据扫描,所以 lvs 比 lvdisplay 更准、更及时。
- 不要用
df -h查快照剩余:快照不是挂载点,df对它完全无意义 - 快照空间耗尽时,LVM 会自动将其停用(
invalid状态),lvs中lv_attr第 7 位变成大写S,此时快照不可读 - 扩容快照空间要用
lvextend -L+2G /dev/vgname/snap_lvname,不是改源 LV
快照空间突然告急?先确认是不是写密集型操作触发了快速膨胀
快照 COW 空间增长速度取决于源 LV 的**随机写频率**和**修改块数量**,不是总数据量。比如数据库日志轮转、频繁小文件覆盖、容器层叠加写入,都可能让 1G 快照在几分钟内打满。
- 用
lvs -o +snap_percent --noheadings --separator : | awk -F: '$5 > 80 {print $1,$2,$5}'批量扫出超 80% 的快照 - 结合
dmsetup status看底层设备状态,输出中类似snapshot (253:2) 0 10485760 snapshot 2097152/10485760,分子是已用扇区数,分母是总扇区数 - 注意:
du和ls -l对快照设备文件(如/dev/vg/lv_snap)返回的是设备节点大小(0 字节),毫无参考价值
误删快照后空间没释放?检查是否有进程仍持有快照设备句柄
执行 lvremove 后,如果 lvs 还显示该快照,或 df -h 发现对应 VG 的可用 PE 没增加,大概率是某个进程(如备份工具、监控 agent)仍在 open() 该快照设备文件。
- 查句柄:
lsof /dev/vgname/lvname_snap或lsof | grep "VG_NAME.*LV_NAME" - 强制释放需 kill 对应 PID,不能仅靠
lvremove;否则 LVM 会拒绝删除并报错device-mapper: remove ioctl failed: Device or resource busy - 快照删除后,COW 空间立即返还给 VG,但
vgs输出可能延迟 1–2 秒刷新,不用等
snap_percent 超过 90%,就该立刻决策:扩容、合并,或丢弃。等它到 100%,快照就废了,再没补救机会。

















