Określanie liczby zmienionych bajtów między dwoma migawkami ZFS tego samego pliku

10

Załóżmy, że mam system plików ZFS, który zawiera obrazy dysków maszyny wirtualnej, np

/tank/examplevm/examplevm-flat.vmdk

Załóżmy ponadto, że codziennie wykonuję migawki tego systemu plików ZFS, np

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

Oczywiście w okresie między każdą codzienną migawką wprowadzane są zmiany w moim examplevm-flat.vmdk (w większości przypadków rozmiar obrazu pozostaje stały, ale bloki na dysku wirtualnym są modyfikowane).

W związku z tym polecenie ZFS diff będzie teraz raportować plik jako zmodyfikowany między dwoma migawkami:

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

Chociaż dobrze jest wiedzieć, że plik został zmodyfikowany, byłbym bardziej zainteresowany liczbą bajtów / bloków, które zostały zmodyfikowane w vmdk.

Dlatego byłbym zainteresowany wszelkimi wskazówkami dotyczącymi następujących pytań:

  • Czy ZFS ma jakąś funkcję raportowania liczby zmienionych bloków w określonym pliku pomiędzy dwoma migawkami?
  • Czy jest jakieś inne narzędzie, które binarnie różnicuje dwa obrazy systemu plików i zgłasza liczbę zmienionych bloków lub bajtów? Zdaję sobie z tego sprawę cmp –l file1 file2 | wc –l, ale jest to strasznie, strasznie powolne.
nlx-ck
źródło

Odpowiedzi:

7

ZFS nie ma funkcji zgłaszania, że ​​jednak nieudokumentowane narzędzie zdb może z pewnością zostać użyte do uzyskania bloków używanych przez plik w określonym zbiorze danych (system plików lub migawka), więc osiągnięcie tego, czego szukasz przy odrobinie skryptu jest wykonalne, chociaż przetworzenie wyjścia zdb prawdopodobnie potrwa bardzo długo.

Oto blog pokazujący, jak używać zdb do wyodrębnienia bloków pliku.

jlliagre
źródło