标识同一文件的两个 ZFS 快照之间更改的字节数

nlx*_*-ck 10 zfs diff

假设我有一个包含虚拟机磁盘映像的 ZFS 文件系统,例如

/tank/examplevm/examplevm-flat.vmdk
Run Code Online (Sandbox Code Playgroud)

让我们进一步假设我每天拍摄该 ZFS 文件系统的快照,例如

$ zfs snapshot tank@20120716
$ zfs snapshot tank@20120717
Run Code Online (Sandbox Code Playgroud)

很明显,在每个每日快照之间的这段时间里,我的examplevm-flat.vmdk 发生了变化(大多数情况下,图像的大小保持不变,但虚拟磁盘中的块被修改)。

因此,ZFS diff 命令现在将报告在两个快照之间修改的文件:

$ zfs diff tank/@20120716 tank@20120717
M       /tank/examplevm/examplevm-flat.vmdk
Run Code Online (Sandbox Code Playgroud)

虽然很高兴知道文件已被修改,但我对 vmdk 中已修改的字节/块数更感兴趣。

因此,我对以下问题的任何提示感兴趣:

  • ZFS 是否具有报告两个快照之间特定文件中已更改块数的功能?
  • 有没有其他工具可以对两个文件系统映像进行二进制比较并报告更改的块或字节数?我意识到这样cmp –l file1 file2 | wc –l做,但它是可怕的,可怕的慢。

jll*_*gre 7

ZFS 没有要报告的功能,但是,未记录的zdb工具当然可以用于获取特定数据集(文件系统或快照)中文件使用的块,因此通过一点脚本编写实现您要查找的内容是可行的,尽管处理 zdb 输出可能需要很长时间。

是一个博客,展示了如何使用 zdb 提取文件的块。