LVM快照是基于COW的轻量级时间点副本,需合理预估空间、只读挂载、监控扩容并及时清理;数据库场景须配合锁和binlog实现一致性备份。

Linux LVM 快照不是“全量复制”,而是基于 COW(Copy-On-Write) 的轻量级时间点副本,适合做瞬时备份、测试回滚和数据库一致性快照。关键不在“能不能用”,而在“怎么控风险、保可用”。
快照创建:大小预估与命令要点
快照空间只用于存放原始 LV 被修改前的数据块,因此容量必须覆盖“快照存活期间的预期变更量”。例如:
- 若源 LV 是 MySQL 数据目录(已用 957M/1G),且备份窗口内预计写入约 200MB 新数据或日志,则快照至少需预留 200MB —— 实际建议上浮 30%~50%,即设为 300MB 更稳妥;
- 命令中
-s表示快照,-n指定名称,-L指定大小,路径必须是完整 LV 设备路径(如/dev/mqsvg1/mysqllv1); - 执行示例:
lvcreate -L 300M -s -n mysqllvsnap /dev/mqsvg1/mysqllv1; - 快照必须与源 LV 在同一卷组(VG)内,否则报错。
挂载与备份:只读访问 + 原子操作
快照默认为只读,挂载前建议显式指定 -o ro 防误写:
- 先创建挂载点:
mkdir -p /mnt/snap; - 挂载快照:
mount -o ro /dev/mqsvg1/mysqllvsnap /mnt/snap; - 立即验证内容是否可读:
ls -l /mnt/snap应与源目录结构一致; - 备份推荐使用
tar --one-file-system -czf或rsync -aH,避免跨文件系统符号链接干扰; - 备份完成后务必
umount /mnt/snap,再执行清理,防止快照长期挂载导致空间耗尽。
快照生命周期管理:监控、扩容与安全删除
快照不自动清理,空间满则失效(状态变为 Invalid),必须人工干预:
- 查看使用率:
lvs -o +snap_percent,lv_attr,重点关注Data%列; - 若使用率接近 85%,可临时扩容:
lvresize -L +100M /dev/mqsvg1/mysqllvsnap(需 VG 有空闲 PE); - 确认不再需要后,先卸载,再删除:
lvremove /dev/mqsvg1/mysqllvsnap; - 禁止对快照卷执行写操作(除非使用 Btrfs 可写快照),LVM 快照写入会破坏 COW 机制。
数据库场景增强实践:锁+日志+快照协同
对 MySQL/MariaDB 等服务,仅靠快照不能保证事务一致性,需配合逻辑锁与二进制日志标记:
- 备份前请求全局只读锁:
FLUSH TABLES WITH READ LOCK;; - 记录当前 binlog 位置:
SHOW MASTER STATUS;,保存文件名与偏移量; - 立即创建快照(此时数据静止);
- 解锁:
UNLOCK TABLES;; - 后续恢复时,先用快照还原数据文件,再通过
mysqlbinlog回放锁之后的增量日志,实现 RPO≈0。
不复杂但容易忽略:快照不是永久备份,它只是“时间锚点”——真正可靠的数据保护,需要快照 + 外存归档 + 日志校验三位一体。










