LVM逻辑卷快照基于写时复制机制实现毫秒级只读数据视图,需满足源LV由LVM管理、与快照同属一卷组、VG有足够空闲空间三个前提;创建后应只读挂载、配合应用冻结用于备份,并及时删除以释放COW空间。

在 Linux 中创建 LVM 逻辑卷快照,本质是利用写时复制(COW)机制生成一个只读的、某一时刻的数据视图,整个过程毫秒级完成且不影响原卷运行。关键不在于“能不能做”,而在于是否满足前提、空间是否预留充分、挂载与清理是否规范。
确认前提条件是否满足
快照不是万能的,必须确保以下三点成立:
- 目标逻辑卷(LV)必须由 LVM 管理,不能是直接格式化的物理分区(如 /dev/sdb1)
- 快照和源 LV 必须属于同一个卷组(VG),跨 VG 创建会失败
- 卷组中需有足够空闲空间分配给快照 LV——建议按原卷活跃数据变化量预估:低写入场景可设为原卷大小的 10%,数据库或日志类高写入场景建议 20%–25%,极端情况需更高
执行快照创建命令
以源 LV 为 /dev/vg0/lv_data、快照名为 lv_data_snap、大小为 2G 为例:
lvcreate -L 2G -s -n lv_data_snap /dev/vg0/lv_data
说明:
- -s 表示创建快照(snapshot)
- -L 2G 指定快照区域大小,单位支持 G/M/k;也可用 -l 100%FREE 分配全部剩余空间(慎用,需确保不影响其他操作)
- 创建后可通过 lvs vg0/lv_data_snap 查看状态,Attr 列含 s 字符即表示是快照卷
安全挂载与使用快照
快照默认为只读,挂载前建议显式设置只读属性,避免误操作污染:
- 创建挂载点:mkdir -p /mnt/snap
- 只读挂载:mount -o ro /dev/vg0/lv_data_snap /mnt/snap
- 若用于数据库备份,应在挂载前配合应用层冻结(如 MySQL 的 FLUSH TABLES WITH READ LOCK),卸载后再释放锁
- 备份完成后立即卸载:umount /mnt/snap
及时清理快照资源
快照不是长期存储手段,它依赖原始 LV 的完整性,且随写入增加持续消耗空间:
- 一旦备份完成,应立刻删除快照释放 COW 空间:lvremove /dev/vg0/lv_data_snap
- 若忘记删除导致快照空间耗尽,快照将自动失效(invalid),原卷不受影响但快照数据不可用
- 生产环境建议将创建→挂载→备份→卸载→删除封装为脚本,并加入超时检查与失败告警


















