Предположим, у меня есть файловая система ZFS, которая содержит образы дисков виртуальных машин, например
/tank/examplevm/examplevm-flat.vmdk
Далее предположим, что я делаю ежедневные снимки этой файловой системы ZFS, например
$ zfs snapshot tank@20120716
$ zfs snapshot tank@20120717
Очевидно, что в период между каждым ежедневным снимком в мой examplevm-flat.vmdk вносятся изменения (в большинстве случаев размер изображения остается постоянным, но блоки на виртуальном диске изменяются).
Соответственно, команда ZFS diff теперь будет сообщать, что файл был изменен между двумя снимками:
$ zfs diff tank/@20120716 tank@20120717
M /tank/examplevm/examplevm-flat.vmdk
Хотя хорошо знать, что файл был изменен, меня гораздо больше интересовало бы количество байтов / блоков, которые были изменены в vmdk.
Поэтому мне были бы интересны любые подсказки по следующим вопросам:
cmp –l file1 file2 | wc –l
делает это, но это ужасно, ужасно медленно.ZFS не имеет возможности сообщить, что, однако, недокументированные zdb Инструмент, безусловно, можно использовать для получения блоков, используемых файлом в определенном наборе данных (файловая система или моментальный снимок), поэтому достижение того, что вы ищете, с небольшим количеством сценариев выполнимо, хотя, вероятно, потребуется очень много времени для обработки вывода zdb .
Вот - это блог, в котором показано, как использовать zdb для извлечения блоков файла.