不能。lvm快照基于写时复制(cow),仅提供创建瞬间的一致性视图,不实时同步后续写入;快照空间耗尽会失效,且需在有效期内完成备份,否则可能读取损坏数据。

lvm快照能实时备份正在写的文件吗
不能。LVM 快照是写时复制(COW)机制,不是实时同步;一旦原逻辑卷(LV)有块被修改,快照会先保存旧数据再允许写入——这过程本身有开销,且快照空间耗尽后会自动失效(变成 Invalid 状态),此时备份已不可用。
常见错误现象:lvdisplay 显示快照 LV Status 为 Not available 或 Invalid;mount 报错 Wrong fs type, bad option。
- 快照只保证「创建瞬间」的一致性视图,不保证后续读取时数据仍可用
- 必须在快照有效期内完成备份(如 tar、rsync),否则可能读到损坏的元数据
- 建议快照大小至少为原 LV 预估变更量的 20%~30%,小了极易撑爆;
lvcreate -L 2G -s -n snap_lv /dev/vg0/lv0
创建快照前必须停服务吗
不一定,但取决于应用是否支持文件系统一致性。LVM 层面不关心上层状态,它只管块设备;如果你的数据库或 Web 服务正在持续写文件,直接打快照可能导致恢复后文件系统报错(如 xfs_repair 提示 AG corruption)或应用数据不一致。
使用场景:对静态配置目录或日志归档可跳过停服;对 MySQL、PostgreSQL、Elasticsearch 等必须配合应用级冻结(如 mysqlbackup --suspend)或文件系统 freeze(xfs_freeze -f /mnt/data)。
-
xfs_freeze -f会阻塞新 I/O,等挂起后立刻执行lvcreate -s,再xfs_freeze -u - ext4 不支持 freeze,只能靠应用自身 flush + sync,或临时停写几秒
- 别信“快照=热备份”的说法——它只是热备份的必要一环,不是充分条件
快照挂载后为什么看不到最新写入的文件
因为快照是创建时刻的只读副本,它不会随原 LV 更新。你挂载的是那个时间点的文件系统镜像,后续所有写入都发生在原 LV 上,与快照无关。
典型误操作:挂载快照后运行 ls -l /mnt/snap | tail,发现没有刚 touch 的文件,以为快照失败。
- 快照挂载后内容固定,适合做离线校验、单次备份或回滚测试
- 不要试图往快照里写(即使挂载为 read-write,也会报错或破坏 COW 结构)
- 如果需要持续可见的备份视图,得用别的方案,比如
rsync --delete定期推送到另一 LV,而非依赖快照生命周期
快照删不掉提示 device busy 怎么办
说明还有进程在访问该快照设备,或者它被挂载了但没 umount 干净,甚至内核还缓存着它的块映射。
常见错误现象:lvremove /dev/vg0/snap_lv 报 Device or resource busy;lsof /mnt/snap 查不到进程,但依然删不掉。
- 先确认是否挂载:
findmnt | grep snap_lv,有就umount /mnt/snap - 检查是否有打开的文件描述符:
lsof +D /mnt/snap(注意 +D 是递归,比普通lsof /mnt/snap更准) - 强制清理设备映射:
dmsetup remove vg0-snap_lv(需确保无任何访问,慎用) - 最稳妥方式:重启相关服务 → umount → lvremove,别硬扛
快照的生命周期管理比创建更易出问题,尤其当它被脚本反复创建又未清理时,残留设备节点和映射表会让后续操作连锁失败。










