Linux LVM快照基于COW机制提供瞬时视图,需满足LVM逻辑卷挂载、卷组有足够空闲PE、已安装lvm2且内核支持;配合数据库写入控制(如MySQL加读锁、PostgreSQL调用pg_start_backup)、合理空间规划(按写入量×耗时×1.5估算,最低1G)及挂载-备份-清理闭环操作,方可实现高效一致性备份。

Linux LVM 快照不是“复制数据”,而是基于写时复制(COW)机制的瞬时视图。它本身不保证数据库事务一致,但配合写入控制和合理空间规划,就能实现高效、低干扰的一致性备份。
前提条件必须确认
快照功能依赖底层LVM结构,缺一不可:
- 目标文件系统(如/var/lib/mysql或/data)必须挂载在LVM逻辑卷上,运行df -h /path可查设备路径(如/dev/mapper/vgdata-mysql_lv)
- 该逻辑卷所属的卷组(VG)需有足够空闲PE,用vgdisplay vgname | grep "Free PE"验证
- 系统已安装lvm2包,且内核启用LVM支持(主流发行版默认满足)
写入控制:快照“一致”的关键
LVM只冻结块设备状态,数据库仍在运行时直接打快照,可能留下半提交事务。必须主动暂停或协调写入:
- MySQL:执行FLUSH TABLES WITH READ LOCK → 创建快照 → 立即UNLOCK TABLES,停写时间通常毫秒级
- PostgreSQL:调用pg_start_backup('label') → 创建快照 → pg_stop_backup(),确保WAL同步完成
- 通用场景(如静态文件目录):若无数据库,可短暂停服务或用rsync --delete-after配合快照,避免长时锁
快照空间不能靠猜
空间不足会导致快照失效(变为inactive),不是警告,是立即不可用。按实际写入节奏估算:
- 公式:快照大小 = (每秒平均写入量 × 预估备份耗时) × 1.5
- 例如:MySQL每秒写2MB,rsync拷贝预计8分钟(480秒),则建议≥ 2 × 480 × 1.5 ≈ 1440MB → 取整为2G更稳妥
- 冷备场景也不能忽略后台写(audit日志、socket文件等),最低建议原LV容量的3%~5%,且不小于1G
- 创建后立刻用lvs -o +data_percent监控,占用超85%需处理(删快照或lvextend扩容)
挂载、备份与清理三步闭环
快照是只读副本指针,必须挂载才能读取内容:
- 新建挂载点:mkdir -p /mnt/snap_readonly
- 强制只读挂载(xfs/ext4需加nouuid防冲突):mount -o ro,nouuid /dev/vgname/snapname /mnt/snap_readonly
- 执行备份:rsync -aHAX --delete /mnt/snap_readonly/ /backup/20260609/ 或 tar --acls --xattrs -cf /backup/full_$(date +%F).tar -C /mnt/snap_readonly .
- 备份完成后立即卸载并删除:umount /mnt/snap_readonly && lvremove /dev/vgname/snapname


















