Определение количества измененных байтов между двумя снимками ZFS одного и того же файла

10

Предположим, у меня есть файловая система ZFS, которая содержит образы дисков виртуальной машины, например

/tank/examplevm/examplevm-flat.vmdk

Предположим также, что я делаю ежедневные снимки этой файловой системы ZFS, например:

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

Очевидно, что в период между каждым ежедневным снимком вносятся изменения в мой examplevm-flat.vmdk (в большинстве случаев размер изображения остается постоянным, но блоки на виртуальном диске изменяются).

Соответственно, команда diff ZFS теперь сообщит о файле, который был изменен между двумя снимками:

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

Хотелось бы знать, что файл был изменен, меня гораздо больше интересует количество байтов / блоков, которые были изменены в vmdk.

Поэтому меня будут интересовать любые подсказки по следующим вопросам:

  • Есть ли в ZFS возможность сообщать о количестве измененных блоков в конкретном файле между двумя снимками?
  • Есть ли другой инструмент, который будет двоично различать два образа файловой системы и сообщать о количестве измененных блоков или байтов? Я понимаю, что это cmp –l file1 file2 | wc –lделает, но это ужасно, ужасно медленно.
NLX-ск
источник

Ответы:

7

ZFS не имеет возможности сообщать, что, тем не менее, недокументированный инструмент zdb , безусловно, можно использовать для получения блоков, используемых файлом в определенном наборе данных (файловая система или моментальный снимок), так что достижение того, что вы ищете с помощью небольшого количества сценариев, выполнимо, хотя вероятно, потребуется очень много времени, чтобы обработать вывод zdb.

Вот блог, показывающий, как использовать zdb для извлечения блоков файла.

jlliagre
источник