Identificar el número de bytes modificados entre dos instantáneas ZFS del mismo archivo

10

Supongamos que tengo un sistema de archivos ZFS que contiene imágenes de disco de máquina virtual, p. Ej.

/tank/examplevm/examplevm-flat.vmdk

Supongamos además que tomo instantáneas diarias de ese sistema de archivos ZFS, p. Ej.

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

Obviamente, en el período entre cada instantánea diaria, se realizan cambios en mi ejemplo vm-flat.vmdk (en la mayoría de los casos, el tamaño de la imagen permanece constante, pero los bloques en el disco virtual se modifican).

En consecuencia, el comando ZFS diff ahora informará el archivo como modificado entre las dos instantáneas:

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

Si bien es bueno saber que el archivo ha sido modificado, estaría mucho más interesado en la cantidad de bytes / bloques que se han modificado en el vmdk.

Por lo tanto, me interesaría cualquier pista sobre las siguientes preguntas:

  • ¿Tiene ZFS alguna función para informar el número de bloques modificados en un archivo específico entre dos instantáneas?
  • ¿Hay alguna otra herramienta que difunda binariamente dos imágenes del sistema de archivos e informe el número de bloques o bytes modificados? Me doy cuenta de que eso cmp –l file1 file2 | wc –lhace eso, pero es horrible, horriblemente lento.
nlx-ck
fuente

Respuestas:

7

ZFS no tiene ninguna función para informar que, sin embargo, la herramienta zdb indocumentada ciertamente puede usarse para obtener los bloques utilizados por un archivo en un conjunto de datos particular (sistema de archivos o instantánea), por lo que es posible lograr lo que busca con un poco de secuencia de comandos. probablemente tomará mucho tiempo procesar la salida zdb.

Aquí hay un blog que muestra cómo usar zdb para extraer los bloques de un archivo.

jlliagre
fuente