
凌晨跑批的时候把命令打错了,导致整个核心配置目录都被删掉了——这样的事故在运维中很常见。如果没有快照的话,只能停机、卸载磁盘、扫描inode来恢复数据,而用上了LVM和ZFS的快照之后就可以把时间缩短到几秒钟之内了,不需要借助外部的恢复工具。
快照可以“秒级”兜底的原因是什么
LVM瘦快照和ZFS快照都是采用**写时复制(CoW)**的方式来实现的:在创建快照的时候不会去拷贝整个文件系统的完整数据,而是只保存一个指向元数据的指针;之后对原卷进行任何更改都会把相应的数据块写入新的空间中去,而没有被改变过的部分仍然可以共用。所以建立快照的过程本身就是一个O(1)的操作,即使有几十TB的大容量磁盘也可以马上完成。
不同之处在于层次上:
- LVM快照是在块设备层面上进行的,对于上层的文件系统来说是不可见的,因此可以应用于已经安装了ext4或者xfs系统的服务器上。
- ZFS快照是文件系统的一部分,可以读取、查看和增量备份,具有更高的精度。
LVM快照:存量物理机、虚拟机快速修复的方法
用 vg0/data 的逻辑卷来说明一下,在删除之后马上留下证据并且把数据拿出来:
# 1. 立刻对原卷打只读快照(瘦池场景优先)
lvcreate -s -L 20G -n data_rescue --setactivationskip n /dev/vg0/data
# 2. 挂载快照到临时目录(XFS 遇 UUID 冲突加 nouuid)
mount -o ro /dev/vg0/data_rescue /mnt/snap
# 3. 按需捞文件,绝不写回原卷
cp -a /mnt/snap/etc/app/ /data/recovery/
# 4. 校验后清理
umount /mnt/snap
lvremove -f /dev/vg0/data_rescue
关键点是快照空间并不是越大越好,而是根据误删之后到恢复完成之间所写的量来进行估算的。当瘦池空间用尽的时候就会停止所有的I/O操作,在生产环境中应该配合上监控和告警系统来自动删除过期的快照。
LVM适合紧急情况下找回数据;如果要整个卷进行恢复的话,则需要停止写入、卸载和合并快照等操作,这些操作比较麻烦,在日常使用中不推荐对整个卷进行回退。
ZFS 快照:原生的快照可以很容易地恢复数据
ZFS中的快照是一个隐藏的目录,可以进入该目录选择要恢复的文件,不需要全部还原:
# 定时快照(可用 sanoid / zfs-auto-snapshot 托管)
zfs snapshot -r tank/app@2026-11-14_0300
# 误删后先看改动差异
zfs diff tank/app@2026-11-14_0300
# 只恢复单个文件,不动线上状态
cp -a /tank/app/.zfs/snapshot/2026-11-14_0300/config.yaml /tank/app/config.yaml
# 整个数据集都废了,再整体回滚(会丢弃后续写入)
zfs rollback tank/app@2026-11-14_0300
使用 zfs diff 命令根据块出生时间来比较,可以马上知道哪些文件被删除了、哪些文件被修改了、哪些文件是新创建的,不需要去猜测。在进行回滚之前一定要检查一下:在回退点之后如果有更新的快照的话,则需要加上 -r 参数强制回滚,否则会丢失中间的快照。
ZFS 可以配合 zfs send|zfs receive 命令将快照增量备份到备用服务器上,在误删数据之后进行恢复、跨数据中心的数据保护以及版本回滚等操作都可以使用相同的机制来实现。
生产落地的一些硬性规定
- 快照≠备份:同池快照挡不住物理盘损坏,重要数据仍需离线/异地副本;
- 误删第一时间停写:数据库先
FLUSH TABLES WITH READ LOCK,避免新写入覆盖待恢复块; - 恢复文件落到别的盘:校验完再迁回原路径,别直接
mv回原卷; - 保留策略自动化:LVM 用脚本轮转,ZFS 用 sanoid,避免“快照堆满瘦池”引发二次故障;
- 回滚前先 diff:能单文件恢复就别整卷回退,缩小爆炸半径。
选型速查
| 场景 | 推荐 |
|---|---|
| 存量 ext4/xfs 物理机 | LVM 瘦快照 |
| 新部署存储/数据库节点 | ZFS 原生快照 |
| 只捞几个配置文件 | ZFS 隐藏目录直拷 / LVM 挂快照 |
| 需跨机房容灾 | ZFS send-receive |
| 整卷一致性要求高 | 两者都先静默应用再打点 |
总结:快照不是“高级功能”,而是 Linux 存储层的标配安全网。LVM 解决“已有系统怎么快速兜底”,ZFS 把“按时间点翻历史”做成日常操作。真正决定恢复速度的,不是工具多强,而是快照策略有没有提前铺好——等 rm 跑完再想起来,就已经晚了。