Identificando o número de bytes alterados entre dois instantâneos do ZFS do mesmo arquivo

10

Vamos supor que eu tenho um sistema de arquivos ZFS que contém imagens de disco da máquina virtual, por exemplo

/tank/examplevm/examplevm-flat.vmdk

Vamos supor ainda que eu tire instantâneos diários desse sistema de arquivos ZFS, por exemplo

$ zfs snapshot tank@20120716
$ zfs snapshot tank@20120717

Obviamente, no período entre cada instantâneo diário, são feitas alterações no meu examplevm-flat.vmdk (na maioria dos casos, o tamanho da imagem permanece constante, mas os blocos no disco virtual são modificados).

Portanto, o comando diff do ZFS agora reportará o arquivo como modificado entre os dois instantâneos:

$ zfs diff tank/@20120716 tank@20120717
M       /tank/examplevm/examplevm-flat.vmdk

Embora seja bom saber que o arquivo foi modificado, eu estaria muito mais interessado no número de bytes / blocos que foram modificados no vmdk.

Portanto, eu estaria interessado em alguma dica sobre as seguintes perguntas:

  • O ZFS possui algum recurso para relatar o número de blocos alterados em um arquivo específico entre dois instantâneos?
  • Existe alguma outra ferramenta que binará duas imagens do sistema de arquivos e relate o número de blocos ou bytes alterados? Sei que cmp –l file1 file2 | wc –lisso é verdade, mas é terrivelmente, terrivelmente lento.
nlx-ck
fonte

Respostas:

7

O ZFS não tem nenhum recurso para relatar que, no entanto, a ferramenta zdb não documentada pode certamente ser usada para obter os blocos usados ​​por um arquivo em um conjunto de dados específico (sistema de arquivos ou instantâneo), portanto é possível realizar o que você procura com um pouco de script, embora provavelmente levaria muito tempo para processar a saída zdb.

Aqui está um blog mostrando como usar o zdb para extrair os blocos de um arquivo.

jlliagre
fonte