LVM 快照怎么恢复
LVM 快照基于写时复制:创建时几乎不占空间,之后原卷被改写的块才复制到快照卷。恢复有两条路,一是 lvconvert --merge 把原卷整体回滚到快照时间点,二是把快照只读挂载后按需拷贝单个文件。前者快但不可逆,后者慢但影响面小,升级回退与误删事故分别对应这两种用法。
基本信息
| 适用平台 | Linux + LVM2(lvcreate/lvconvert/lvs) |
|---|---|
| 权限要求 | root |
| 快照容量 | 按预计变更量设置,写满后快照失效 |
| 查看状态 | lvs -a -o name,origin,lv_size,data_percent |
典型使用场景
- 系统升级或打补丁前建快照,出问题在窗口内整体回滚
- 误删数据后挂载快照,只把受影响的文件拷回生产目录
- 批量变更前留一个时间点,作为变更失败时的兜底
- 数据库停机维护期间的快速回退点(配合停库保证一致性)
- 取某个历史版本的配置或代码目录做对比
回滚与按需导出
回滚与按需导出
lvcreate -L 10G -s -n data_snap /dev/vg_data/data # 变更前建快照
lvs -a -o name,origin,data_percent # 观察快照使用率
lvconvert --merge /dev/vg_data/data_snap # 整体回滚到快照时间点
mkdir -p /mnt/snap # 或只挂快照取文件
mount -o ro /dev/vg_data/data_snap /mnt/snap
cp /mnt/snap/conf/app.yml /srv/app/conf/ # 拷回被误删的文件
umount /mnt/snap && lvremove /dev/vg_data/data_snap # 用完后清理快照两种恢复方式对比
| 方式 | 影响范围 | 注意事项 |
|---|---|---|
| lvconvert --merge | 原卷全部数据回退 | 快照时间点之后的写入全部丢失,且快照卷随后被删除 |
| 挂载快照取文件 | 只覆盖指定文件 | 需要人工确认取哪些文件,快照容量不足时可能已失效 |
| data_percent 接近 100% | 快照空间耗尽 | 快照标记为无效,回滚与挂载都不可用 |
回滚要求原卷未被占用:多数发行版会拒绝合并正在挂载使用的卷,需要先停服务或卸载文件系统。执行前确认其他副本存在,合并完成后没有第二次尝试机会。
快照一致性取决于创建瞬间的状态:文件系统在挂载可写状态下建快照,得到的是崩溃一致视图,恢复后可能需要日志回放;数据库要拿到应用一致快照,需先执行 FLUSH TABLES WITH READ LOCK 或停库后再建快照。
操作要点
| 步骤 | 命令要点 | 注意 |
|---|---|---|
| 创建 | lvcreate -L 大小 -s -n 名称 原卷 | 大小按变更量估算,写满即失效 |
| 观察 | lvs -o data_percent | 持续接近 100% 需扩容或提前回滚 |
| 回滚 | lvconvert --merge 快照卷 | 原卷需卸载,时间点之后的数据全部丢弃 |
| 取文件 | mount -o ro 快照卷 | 只读挂载,避免改动快照内容 |