Jak deduplikować 40 TB danych?

17

Odziedziczyłem klaster badawczy z ~ 40 TB danych w trzech systemach plików. Dane sięgają prawie 15 lat wstecz i najprawdopodobniej istnieje duża liczba duplikatów, ponieważ badacze kopiują dane z różnych powodów, a następnie po prostu trzymają się kopii.

Wiem o narzędziach do usuwania duplikatów, takich jak fdupes i rmlint. Próbuję znaleźć taki, który będzie działał na tak dużym zestawie danych. Nie dbam o to, czy zaindeksowanie wszystkich danych zajmie tygodnie (a może nawet miesiące) - prawdopodobnie i tak dusię je, aby ułatwić sobie pracę z systemami plików. Ale muszę znaleźć narzędzie, które albo w jakiś sposób będzie super wydajne z pamięcią RAM, albo może przechowywać wszystkie potrzebne dane pośrednie w plikach, a nie w pamięci RAM. Zakładam, że moja pamięć RAM (64 GB) zostanie wyczerpana, jeśli przeszukam wszystkie te dane w jednym zestawie.

Eksperymentuję z fdupes teraz na drzewie o pojemności 900 GB. Zajmuje to 25% czasu, a zużycie pamięci RAM powoli rośnie przez cały czas, teraz wynosi 700 MB.

Lub czy istnieje sposób na skierowanie procesu do użycia pamięci RAM z mapowaniem dysku, aby było o wiele więcej dostępnych i nie wykorzystuje pamięci RAM systemu?

Używam CentOS 6.

Michael Stauffer
źródło
Systemy plików to XFS, na wypadek, gdyby było to istotne. To znaczy, wiem, że to nie jest fs z funkcjami usuwania duplikatów, takimi jak XFS.
Michael Stauffer,
dlaczego martwisz się przede wszystkim pamięcią RAM? System operacyjny ma własne algorytmy zarządzania pamięcią, a fakt, że użycie pamięci RAM „przyspiesza”, nie oznacza, że ​​ostatecznie pochłonie całą pamięć RAM. Jestem pewien, że tak się nie stanie.
Art Gertner
1
Nie wiem, jak działają dedykowane narzędzia, ale możesz obliczyć skrót dla każdego pliku i zalogować go wraz ze ścieżką pliku, a następnie sortować według skrótów i deduplikować. Powinno to być wykonalne za pomocą prostego skryptu Python, a może nawet w Bash. Zużycie pamięci RAM powinno być minimalne, z wyjątkiem kroku sortowania, ale myślę, że możesz użyć jakiegoś zmodyfikowanego scalania, aby utrzymać go na stosunkowo niskim poziomie.
gronostaj
1
Tak, dedykowane narzędzie oblicza wartość skrótu, ale najpierw wykonaj takie czynności, jak spojrzenie na rozmiar pliku, a skrót tylko na początku plików, aby ograniczyć liczbę pełnych skrótów, które wymagają obliczenia.
Michael Stauffer
Jeśli chodzi o pamięć RAM, martwiłem się spowolnieniem serwera plików - patrz mój komentarz poniżej do odpowiedzi.
Michael Stauffer

Odpowiedzi:

4

Lub czy istnieje sposób na skierowanie procesu do użycia pamięci RAM z mapowaniem dysku, aby było o wiele więcej dostępnych i nie wykorzystuje pamięci RAM systemu?

Tak, to się nazywa dysk wymiany. Prawdopodobnie już go masz. Jeśli martwisz się brakiem pamięci RAM, zwiększanie to dobry początek. Działa automatycznie, więc nie trzeba robić nic specjalnego.

Nie martwiłbym się o fdupes. Wypróbuj, powinien działać bez problemów.

krowe
źródło
Myślałem, że poleganie na zamianie spowolni cały system - jest to zajęty serwer plików. Ale może nie wystarczy się martwić? Mógłbym użyć ulimit, aby zapobiec wykorzystaniu przez proces więcej niż pamięci RAM w każdym przypadku, jako zabezpieczenie przed awarią. Ale wygląda na to, że krowe i smc nie sądzą, że fdupes i tak użyłby tak dużo pamięci RAM, więc powinienem spróbować.
Michael Stauffer,
1

wyszukiwanie duplikatów na podstawie skrótu działa dobrze i jest bardzo szybkie.

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
kumar
źródło
0

Napisz szybką aplikację do chodzenia po drzewach, pchając (hash, mtime) => ścieżkę pliku do słownika lub zaznaczając plik do usunięcia, jeśli wpis już istnieje. Hash będzie po prostu MD5 obliczonym dla pierwszych N bajtów. Możesz zrobić kilka różnych przejść, z haszem nad małym N.

Prawdopodobnie możesz to zrobić w mniej niż dwudziestu lub trzydziestu liniach Pythona (używając os.walk ()).

Dustin Oprea
źródło