Deduplikacja danych może się odbywać na trzech poziomach: pliku, bloku i bajtu. Każdy z poziomów definiuje inny rozmiar fragmentu danych, które później są sprawdzane przez system pod kontem wystąpienia duplikacji. Algorytm funkcji skrótu generuje unikalne identyfikatory dla każdego przeanalizowanego fragmentu danych. Identyfikatory są przechowywane w indeksie i wykorzystywane w procesie deduplikacji – duplikujące się fragmenty mają ten sam identyfikator funkcji skrótu.
Teoretycznie im bardziej dokładna analiza, tym większy współczynnik deduplikacji. W praktyce, wszystkie trzy poziomy mają swoje zalety. Deduplikacja na poziomie plików jest najłatwiejsza do wdrożenia. Nie jest ona obciążając dla serwera ponieważ wygenerowanie funkcji skrótu dla pliku jest relatywnie prosty. Jednakże, jest druga strona medalu: jeżeli w pliku zmieni się tylko jeden bajt, to identyfikator funkcji skrótu zostanie zmieniony. W wyniku czego oba pliki zostaną zapisane na serwerze.
Deduplikacja na poziomie blokowym jak sama nazwa wskazuje porównuje bloki. Każdy plik jest podzielony na bloki o tej samej lub różnej wielkości, a następnie wyliczane są funkcje skrótu, które potem są porównywane w celu wyłapania identycznych bloków. Jeżeli dokonamy drobnej zmiany w dużym pliku, wtedy system na serwerze zapisze tylko zmieniony fragment. Średnio deduplikacji plików umożliwia oszczędność miejsca na dysku 5:1, podczas gdy deduplikacja blokowa osiąg współczynnik 20:1.
Deduplikacja blokowa wymaga większej mocy obliczeniowej niż deduplikacja plikowa, ponieważ liczba identyfikatorów, która musi zostać wyliczona dla bloków jest zdecydowanie większa. Co za tym idzie ilość indeksów jaką należy przeanalizować też jest więcej. Deduplikacja blokowa o zmiennej wielkości bloku jest nawet bardziej obciążająca. Innym minusem tego typu deduplikacji jest to, że czasami następuje kolizja funkcji skrótu tzn. dla dwóch różnych bloków wyliczany jest identyczny identyfikator. Gdy kolizja ma miejsce, wtedy system nie zapisze nowych danych, ponieważ będzie myślał, że ten blok z danymi już jest zapisany na dysku.
Deduplikacja na poziomie bajtów nie wymaga większej ilości mocy obliczeniowej niż deduplikacja blokowa – w tym przypadku dane są porównywane w najbardziej prymitywny sposób – bajt po bajcie. Sprawia to, że analiza danych jest bardziej dokładna. Niedogodnością może być czas trwania deduplikacji bajtowej, który jest dość długi i dlatego z reguły jest stosowany deduplikacji typu post-process. Polega ona na tym, że na dysku najpierw zapisuje się wszystkie dane, a dopiero później są one analizowane przez system. Jest jeszcze deduplikacja typu In-line, wykorzystywana np. z deduplikacją blokową, wtedy bloki danych są analizowane w locie i po ich przetworzeniu na dysk zapisywane są tylko nowe bloki.
Jesteś ciekawy jaki rodzaj deduplikacji wykorzystuje Rsync, to zapraszamy do lektury:
https://www.backupacademy.pl/rsync-i-de-duplikacja-podczas-przesylania-kopii-zapasowych