ZFS 快照

ZFS 原生写时复制快照:创建与回滚快,空间按增量占用,可对数据集或卷做时间点保护,并支持保留与自动化语义。

备份与容灾速查数据更新于 2026-10-13

ZFS 快照是什么

ZFS 快照是文件系统的只读时间点视图,基于写时复制实现:创建瞬间完成,空间只随数据变更增长,可以精确到数据集或卷。它既是误删与写入错误的回退手段,也是 zfs send 增量复制的数据源。快照不是备份,它和原数据集在同一个存储池里,池损坏时会同时丢失。

基本信息

适用平台ZFS / OpenZFS:FreeBSD、Linux(含 Ubuntu 原生模块)、部分存储设备
权限要求root 或带 zfs 委托权限的用户
粒度数据集或卷,可加 -r 递归包含子数据集
空间计入所属数据集的配额与池容量,不额外预留

典型使用场景

  • 升级或改配置前留时间点,出问题几秒内回滚
  • 为 zfs send 提供只读数据源,做异地增量复制
  • 临时冻结某个目录内容,做一致性比对或离线审计
  • 配合 zfs hold 防止关键快照被清理脚本误删
  • 用 zfs diff 对比两个快照,定位到底改了哪些文件

创建查看与回滚

创建查看与回滚
zfs snapshot tank/data@2026-10-12                 # 创建快照,瞬时完成
zfs list -t snapshot -r tank/data -o name,used,creation   # 查看快照与占用
zfs hold keep tank/data@2026-10-12                # 加保护,防止误删
zfs diff tank/data@2026-10-12 tank/data@2026-10-13 # 对比两次快照的差异
zfs rollback tank/data@2026-10-12                 # 回滚,丢弃之后的所有写入
zfs release keep tank/data@2026-10-12             # 释放保护标记
zfs destroy tank/data@2026-10-12                  # 删除快照释放空间

常见命令读法

命令/字段含义异常表现
used该快照独占的空间持续攀升说明变更量大,需检查快照数量与清理策略
zfs rollback回滚到指定快照报 dataset is busy 说明有挂载点或克隆依赖
zfs diff两个快照间的文件级差异输出量大说明变更范围超出预期
zfs hold 的 tag防删标记忘记 release 会让 destroy 一直失败
回滚要求数据集上没有更新的快照:若中间存在更新的快照,直接 rollback 会被拒绝,需要先删除中间快照或用 clone 另开一份数据。
快照数量多时占用会持续挤压池空间,写满后整个池进入只读状态,影响所有数据集;必须配套自动清理策略与容量告警。

易错点

  • 回滚不可撤销:快照之后的写入全部丢弃,执行前确认有可用备份或其他副本
  • 递归快照与发送时漏掉子数据集:副本看起来成功,实际缺少部分数据
  • 把快照当备份:池级故障(多盘损坏、控制器故障)会同时带走快照与原数据
  • 长期不清理旧快照:占用累积写满池,触发整池只读,影响面远超单个数据集

数据来源与参考

  • OpenZFS 文档(Snapshots、zfs-rollback)
  • man 8 zfs-snapshot
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌