25.3 ZFS 快照与还原

ZFS 快照(ZFS snapshot)类似于虚拟机快照,但其实现方式和用途有所不同。

  • 目前 FreeBSD 中文社区(CFC)提供了 ZFS 脚本,可用于查看、创建、删除和恢复 ZFS 快照(ZFS snapshot)。ZFS 脚本项目地址

  • 同时,已将该 ZFS 脚本部署至 https://docs.bsdcn.org/zfs.sh,可以在 FreeBSD 系统上直接使用 fetch 命令进行下载

创建快照

默认情况下,使用 Auto ZFS 布局创建的分区结构如下

# zfs list  # 列出所有 ZFS 文件系统及其属性
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

创建名为 testzroot 快照(使用 -r 参数可递归创建快照)

技巧

在命令中,snapshot 可以缩写为 snap,其他命令也有对应的缩写形式,读者可自行查阅文档研究使用。

经测试,在上述默认分区布局下,该操作会快照整个 ZFS 文件系统。

还原快照

警告

请勿在生产环境中进行此类测试。

文件变动测试

可以通过增删文件来验证快照的有效性

经测试,如果事先创建了快照,即使执行 rm -rf /* 命令也可以顺利恢复;若系统使用 UEFI,则需要根据其他章节的说明自行恢复 EFI 引导

在还原快照时,不能一次性递归还原,需要对每个子文件系统单独还原

快照还原测试

思考题

如果读者有更优方案,可尝试实现;已知网络上存在一些相关脚本,读者可考虑将其作为功能请求或提交 Pull Request(PR)至 OpenZFS 项目。或者使用中文社区的 ZFS 脚本项目

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

销毁快照

销毁快照时,可以使用 -r 参数递归删除:

最后更新于