Sprawdź poprawność skopiowanych plików

14

Po skopiowaniu powiedz ponad 50 GB (30 000 plików, w tym różne formaty) plików z wewnętrznego dysku twardego na dysk zewnętrzny, czy jest jakiś sposób, aby sprawdzić, czy wszystko zostało poprawnie skopiowane? Czy jeśli zatrzymam się w międzyczasie, anulując operację, a później powiesz scalenie podczas kontynuowania operacji, czy poprawność odniesie trafienie?

Mógłbym korzystać z aplikacji takich jak, back-in-timeale jestem bardzo wybredny w kopiowaniu plików i następnym razem zamierzam użyć copyoperacji i powiedzieć mergezamiast replace. Czy wskazane jest kopiowanie dużej liczby plików?

Chethan S.
źródło
2
możesz znaleźć odpowiedź tutaj .
Takkat

Odpowiedzi:

17

Korzystam z funkcji hashdeep w celu weryfikacji kopii zapasowych / przywracania, a czasami w celu sprawdzenia, czy system plików nie jest uszkodzony w macierzy RAID.

Szybkość zależy od używanych funkcji skrótu (niektóre z nich wymagają więcej procesora niż inne), a także od prędkości odczytu dysków. W moim systemie hashdeepmożna przetwarzać lub weryfikować około 1 TB / godzinę przy prędkości odczytu md5 i 300 MB / s.


Przykład obliczania sum kontrolnych i przechowywania ich w pliku:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

Parametry:

  • r - rekurencyjny
  • l - stosować ścieżki względne
  • c - określ funkcję skrótu
  • . - rekurencyjne rozpoczynanie od bieżącego katalogu
  • > - przekieruj wyjście do określonego pliku

Zobacz stronę manuala .


Przykład weryfikacji sum kontrolnych i wydrukowania listy różnic:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

Parametry:

  • a - audyt (porównaj z listą znanych sum kontrolnych)
  • v- pełne (aby uzyskać listę niezgodności, wielokrotność vs oznacza więcej szczegółowych)
  • k - plik znanych skrótów

Pamiętaj, że od marca 2016 r. hashdeepWydaje się być porzucony .

jg-faustus
źródło
14

Wygląda na idealne zadanie dla rsync . Rsync porównuje i kopiuje różnice.

rsyncNarzędzie pierwszy wpadł mi do głowy, kiedy zobaczyłem swoje pytanie. Wykonanie czegoś takiego jak poniżej może szybko pokazać, które pliki znajdują się w katalogu, aale nie w b:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Jest to dobra opcja, ponieważ możesz również porównać zawartość plików, aby upewnić się, że pasują do siebie. rsyncAlgorytm delta jest zoptymalizowany dla tego typu przypadków użycia. Następnie, jeśli chcesz bdopasować zawartość a, możesz po prostu usunąć -nopcję wykonania faktycznej synchronizacji.

Niektóre powiązane pytania:

ddeimeke
źródło
1
rsync jest zdecydowanie narzędziem do tego zadania, ale samo w sobie nie porównuje i nie kopiuje różnic. Porównuje pliki przy użyciu rozmiarów i skrótów.
Justin Force
@JustinForce Używasz rozmiaru? Oczywiście, różnej wielkości upewnij się, że plik nie jest dokładnie taki sam, ale rsync jest bardzo wszechstronny, może opcjonalnie ufać metadanych (jak czas), aby uniknąć ponownego odczytu wszystkich plików. Podczas kopiowania przez sieć oblicza skrót, aby dokładnie wykryć wspólne części, aby uniknąć ich przeniesienia, ale domyślnie skróty na dysku lokalnym nie odgrywają tej roli (jeśli w ogóle są używane). Możesz nawet poprosić go o zaufanie, że krótszy cel podróży ma już prawidłową treść i po prostu wymaga dołączenia, ale pozostańmy na ten temat.
Stéphane Gourichon
3

Sytuacja, o której mówisz, jest zbyt skomplikowana. Możesz napisać skrypt do obliczenia MD5 wszystkich plików, które chcesz skopiować, a następnie porównać je z skopiowanymi:

Jeśli chcesz czegoś prostego i szybkiego (nie zadziała to w bardzo skomplikowanych scenariuszach), możesz użyć Meld

sudo apt-get install meld
puneet
źródło
0

W „jeśli wszystko zostało poprawnie skopiowane”, używam zmodyfikowanego cp (lub mv), który zawiera sumowanie kontrolne (opcjonalnie przechowywane w xattr, dlatego należy to obliczyć tylko raz dla źródła) http://sourceforge.net/projects / crcsum /

Hans
źródło
1
Chociaż twoja odpowiedź jest w 100% poprawna, dla początkującego użytkownika jest to prawie niemożliwe. Dlatego edytuj swoją odpowiedź i dołącz do odpowiedzi kroki pobierania, kompilacji, instalacji i odinstalowania crccp! ;-) Zawsze możesz zostawić link w dolnej części odpowiedzi jako źródło materiału ...
Fabby