LVM快照创建前必须确认三件事:源LV与快照同卷组、文件系统可快照(XFS需xfs_freeze,ext4需sync)、快照空间按写入量×备份时长×1.5精确计算;缺一不可,否则lvcreate -s失败或快照迅速Invalid。

快照创建前必须确认的三件事
不满足这三点,lvcreate -s 会失败或快照几秒后就变 Invalid:
- 源 LV 和快照必须在同一个卷组(VG)里:运行
vgs确认目标 LV 所属 VG,再用vgdisplay <vg_name></vg_name>查看 Free PE 是否足够(比如 2G 快照 ≈ 512 个默认 4MB PE) - 文件系统需处于可快照状态:XFS 强烈建议先
xfs_freeze -f /mount/point;ext4 可跳过冻结,但必须执行sync && echo 3 > /proc/sys/vm/drop_caches - 快照大小不是“备份数据量”,而是 COW 元数据区容量:按业务写入节奏算——例如日志每分钟写 80MB、备份耗时 5 分钟,则至少预留
80MB × 5 × 1.5 ≈ 600MB;生产环境建议起步 1–2GB
lvcreate -s 命令的关键参数避坑
加错参数会导致快照不可挂载、设备节点缺失或静默失效:
-
-L必须显式指定,且不能为 0:小于 100MB 的快照极易因元数据填满而自动失效 -
--name必须给出有意义的名字(如web_snap_20260708),避免默认时间戳名,否则lvremove时容易输错 - 不要加
--permission r:会导致 ext4/xfs 挂载报错wrong fs type - 禁用
--noudevsync:否则/dev/mapper/下无设备节点,mount会找不到设备
挂载快照时只读是硬性要求
写入快照 LV 会破坏一致性,且 XFS 快照强制只读:
- 挂载命令必须含
-o ro:如mount -o ro /dev/vg0/lv_app_snap /mnt/snap - ext4 理论支持读写,但生产环境严禁写入 —— 一旦写入,源卷和快照都会出现数据错乱
- 建议额外加
-o nouuid:防止 xfs/ext4 自动修复 UUID 冲突干扰备份完整性 - 挂载前务必运行
vgchange -ay <vg_name></vg_name>:否则设备未就绪,可能挂载空目录而不报错
快照使用率接近 90% 就该立即处理
lvs -o +snap_percent 显示的百分比不是“已用空间”,而是 COW 区块占用率。超过 90%,快照随时会失效:
- 失效后
lvdisplay显示snapshot status: Invalid,此时无法恢复,只能lvremove - 监控脚本应每 5 分钟检查一次:
lvs -o lv_name,snap_percent --noheadings vg0 | awk '$2 > 85 {print $1}' - 临时扩容不是万能解法:
lvextend -L +1G /dev/vg0/lv_app_snap只延缓问题,不能替代及时备份与清理


















