lvm快照核心是秒级生成只读时间点视图以保障在线备份一致性,需满足三前提:目标目录挂载于lvm逻辑卷、卷组有足够空闲pe(建议≥512)、已安装lvm2且内核支持;空间须按写入量精确计算,创建后须只读挂载并配合应用冻结(如mysql锁表),最后及时卸载与清理。

创建 LVM 快照卷用于在线备份,核心是秒级生成逻辑卷的只读时间点视图,不中断业务,但必须满足前提、算准空间、配合应用冻结,才能保障一致性。
确认基础条件是否就位
快照不是万能的,三件事缺一不可:
- 目标目录(如 /var/lib/mysql 或 /var/www)必须挂载在 LVM 逻辑卷上,运行 df -h /path 查看设备名,应显示类似 /dev/mapper/vgdata-mysql_lv
- 该逻辑卷所属的卷组(VG)要有足够空闲 PE,执行 vgdisplay vgname | grep "Free PE",建议至少预留 512 个 PE(约 2GB)
- 系统已安装 lvm2 包,且内核支持 LVM(主流发行版默认满足;精简镜像或容器宿主机需手动验证)
按写入节奏精确计算快照大小
空间不足不会报错,而是快照自动变为 inactive,备份立刻失效。不能凭感觉估:
- 通用公式:快照大小 =(每秒平均写入量 × 备份耗时)× 1.5
- 举例:MySQL 每秒写 3MB,rsync 预计拷 6 分钟(360 秒),则最小需 3 × 360 × 1.5 ≈ 1620MB → 建议设为 2G
- 冷备或低写入场景,最低按源 LV 活跃数据容量的 3%~5% 配置,且不小于 1G
- 创建后立即运行 lvs -o +data_percent 监控,占用超 85% 就得处理
创建、挂载与备份操作闭环
快照是只读指针,不挂载就读不了,不清理就持续占空间、拖慢 I/O:
- 对 XFS 文件系统,先冻结:xfs_freeze -f /mount/point;ext4 可跳过冻结,但务必执行 sync
- 创建快照(以 /dev/vgdata/lv_web 为例):lvcreate -L 2G -s -n web_snap_$(date +\%Y\%m\%d) /dev/vgdata/lv_web
- 检查是否成功:lvs -a | grep web_snap,Attr 字段应含 s(snapshot)和 wi-a-s--- 类标识
- 新建挂载点并只读挂载:mkdir -p /mnt/snap_web && mount -o ro,nouuid /dev/vgdata/web_snap_20260924 /mnt/snap_web
- 执行备份(保留权限与扩展属性):tar --acls --xattrs -cf /backup/web_full_$(date +\%F_\%H%M).tar -C /mnt/snap_web .
- 备份完成立即卸载:umount /mnt/snap_web;验证 tar 包可用后再删除:lvremove /dev/vgdata/web_snap_20260924
数据库等关键应用必须协同冻结
LVM 只冻结块设备,不感知事务。直接打快照可能捕获半写入页:
- MySQL:执行 FLUSH TABLES WITH READ LOCK → 立即创建快照 → UNLOCK TABLES,锁表时间通常仅毫秒级
- PostgreSQL:调用 pg_start_backup('label') → 创建快照 → pg_stop_backup(),确保 WAL 归档同步完成
- 静态文件(如网站代码):可短暂停服务,或用 rsync --delete-after 配合快照,避免长时中断











