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 另开一份数据。
快照数量多时占用会持续挤压池空间,写满后整个池进入只读状态,影响所有数据集;必须配套自动清理策略与容量告警。