zfs list -t snaphost 以确定池是否已更改

zfs list -t snaphost to identify if pool was changed

我正在使用 zfs list -t snapshot 来确定池是否已更改。如果最后一个快照显示它使用了一些 space 那么我确定池已更改并且我(实际上是一个脚本)做了另一个快照。

我注意到,如果我将文件从 1 个文件夹移动到池中的另一个文件夹,而不是命令 zfs list -t snapshot 仍然 returns 0 作为最后一个快照的大小。这对我不利,因为我需要确定我的泳池是否已更换。我做错了什么?有没有其他更可靠的方法来识别池是否真的被改变了?

快照显示您的文件系统在过去特定时间点的情况(包括其大小)。如果您之后删除或修改文件,不同的块(意味着现在删除或修改的块)将保留在文件系统中(将它们视为锁定的;或类似于硬链接在 Unix 上的工作方式,只要存在对文件的引用,不会将其删除)。

相反,如果你只是添加一个新文件,旧的块保持不变,所以快照不会有大小差异。将您的文件夹移动到同一文件系统中不会添加新数据,因此不会显示大小。

要查看差异,您可以使用zfs diff pool/dataset@snapshot pool/dataset将当前状态与上次快照进行比较。有关在脚本中使用输出的详细信息,请参阅 my other answer here