如何让 ZFS 仅在文件发生变化时创建目录的快照?

如何让 ZFS 仅在文件发生变化时创建目录的快照?

是否可以让 ZFS 仅在文件更改时创建文件系统(即 pool/filesystem/)的快照?除了使用 cron 或其他程序每 5 分钟自动创建一次快照外,是否可以让 ZFS 在文件更改后自动创建快照?

这有可能吗?会涉及什么?你会怎么做?

提前致谢。

答案1

多种选择:

1)基于 cron 的 zfs diff(Solaris 11 Express++),如果发生更改 -> Snapshot() 2)dtrace zfs 快照触发器

我没有做过后者,但读过相关内容。1)可能是做某事的最简单的方法,尽管您可能会错过一些更改,但您不会拥有没有变化堆积的快照。

问候,罗伯特

答案2

首先,使用 ZFS 时,您不是对目录进行快照,而是对整个文件系统(或卷)进行快照。此外,尽管 ZFS 的快照非常轻量,但除非您的文件系统更新率非常低,否则每次文件更改都触发快照可能会损害性能。文件可以通过大量写入操作进行更新,每个写入操作都会根据您的要求创建一个快照。我不确定数千或数百万个快照是否可管理。

答案3

难道你不能编写一个脚本来制作新的快照,将其与上一个快照进行比较,如果没有任何变化,则只需删除该快照吗?我不确定如何比较这两个快照,但看起来应该很简单。

答案4

假设您想要避免每五分钟对未更改的文件进行一次快照,您可以实现一个 dtrace 脚本,该脚本触发写入发生并创建一个标志文件;然后通过 cron 定期运行一个脚本,当标志文件存在时创建一个快照。Constantin Gonzalez 写了一篇博客文章,其中涵盖了实现此目标所需的大部分内容:

http://constantin.glez.de/blog/2010/04/how-automatically-update-your-home-media-server-library-dtrace

相关内容