25.3 ZFS 快照与还原

ZFS 快照类似于虚拟机快照。

创建快照

默认创建分区(Auto ZFS)如下:

#  zfs list
NAME                 USED  AVAIL     REFER  MOUNTPOINT
zroot               1.72G   440G       96K  /zroot
zroot/ROOT          1004M   440G       96K  none
zroot/ROOT/default  1004M   440G     1004M  /
zroot/tmp            104K   440G      104K  /tmp
zroot/usr            760M   440G       96K  /usr
zroot/usr/home       128K   440G      128K  /usr/home
zroot/usr/ports       96K   440G       96K  /usr/ports
zroot/usr/src        759M   440G      759M  /usr/src
zroot/var            628K   440G       96K  /var
zroot/var/audit       96K   440G       96K  /var/audit
zroot/var/crash       96K   440G       96K  /var/crash
zroot/var/log        148K   440G      148K  /var/log
zroot/var/mail        96K   440G       96K  /var/mail
zroot/var/tmp         96K   440G       96K  /var/tmp

快照 zroot(经测试,在上述默认分区下代表快照整个 ZFS 文件系统,-r 即递归创建快照,test 是随便起的名字):

# zfs snapshot -r zroot@test
# zfs list -t snap
NAME                      USED  AVAIL     REFER  MOUNTPOINT
zroot@test                  0B      -       96K  -
zroot/ROOT@test             0B      -       96K  -
zroot/ROOT/default@test     0B      -     7.18G  -
zroot/tmp@test              0B      -      176K  -
zroot/usr@test              0B      -       96K  -
zroot/usr/home@test         0B      -     31.1M  -
zroot/usr/ports@test        0B      -     1.98G  -
zroot/var@test              0B      -       96K  -
zroot/var/log@test          0B      -      444K  -

文件变动测试

我们可以增删一些文件来验证。

经过测试,若提前快照,单纯的 rm -rf /* 亦可顺利恢复。若使用 UEFI,则需要自行按照其他章节一道恢复 EFI 引导。

警告

请不要在生产环境中进行测试。

还原快照

还原时却不能递归还原快照,必须挨个还原。

思考题

如果你有更好的方案请告诉我们,已知网络上有一些脚本可用。请读者思考自己能否将其作为功能请求或 PR 提交到 OpenZFS 项目。

与虚拟机快照有所不同,在缺省状态下,zfs rollback 命令无法回滚到除最新快照以外的快照(参考手册),除非使用 -r,但这会删除该快照创建后的所有快照。

# zfs rollback -r zroot@test
# zfs rollback -r zroot/ROOT@test
# zfs rollback -r zroot/ROOT/default@test
# zfs rollback -r zroot/tmp@test
# zfs rollback -r zroot/usr@test
# zfs rollback -r zroot/usr/home@test
# zfs rollback -r zroot/usr/ports@test
# zfs rollback -r zroot/var@test
# zfs rollback -r zroot/var/log@test
  • 销毁快照

销毁快照(销毁的时候可以使用 -r 递归销毁):

# zfs destroy -r zroot@test
# zfs list -t snap
no datasets available

技巧

在命令中 snapshot 可以缩写为 snap。其他各命令也均有缩写,请读者自行研究。

最后更新于

这有帮助吗?