Czy w systemie Ubuntu / Linux istnieje polecenie kopiowania i weryfikacji?

23

Kopię zapasową wszystkich moich zdjęć cyfrowych wykonuję w kilku miejscach. Korzystałem z polecenia cp, ale - biorąc pod uwagę osobistą wartość - zacząłem się zastanawiać, czy istnieje bardziej niezawodny sposób. Nie jestem obcy Linuksowi, Bashowi, Perlowi itp., Więc mogłem napisać coś do skopiowania i porównania skrótów md5, ale zastanawiałem się, czy coś już istnieje (ponowne wymyślenie, koła i co nie).

Większość moich googlingów na kopiowanie i (weryfikacja | poprawność | kontrola | skrót | potwierdzenie) pojawia się w rsync. Jednak, o ile wiem, rsync używa tylko skrótów, aby sprawdzić, czy plik wymaga aktualizacji. Później nie wykonuje porównania skrótów.

W tym celu w szczególności pliki są binarne i zwykle mają 8–10 MB. Wszelkie zalecenia dotyczące narzędzi lub wskazówek dotyczących rozwiązań dla majsterkowiczów byłyby bardzo mile widziane.

N13
źródło
Co powiesz na unison ? Służy do synchronizacji dwukierunkowej, ale z pewnością sprawdza sumę kontrolną pliku.
stożek

Odpowiedzi:

19

Od man rsync, w -copcji:

-c, --checksum: pomiń w oparciu o sumę kontrolną, a nie mod-time i rozmiar

Zauważ, że rsync zawsze sprawdza, czy każdy przesłany plik został poprawnie zrekonstruowany po stronie odbierającej, sprawdzając sumę kontrolną całego pliku, która jest generowana podczas przesyłania pliku, ale ta automatyczna weryfikacja po przesłaniu nie ma nic wspólnego z tą opcją before-the-transfer „Czy ten plik wymaga aktualizacji?” czek.

icyrock.com
źródło
7
Niektóre osoby zorientowały się, że instrukcja rsync wprowadza w błąd co do domyślnego sprawdzania po skopiowaniu: unix.stackexchange.com/a/66702/148560 Wygląda na to, że nie ma takiego sprawdzania. Mówią, że aby zweryfikować wszystkie kopie, musisz wykonać kolejny rsync z opcją --checksum.
Rotareti
5

Kilka lat temu miałem takie same wymagania jak ty. Rozwiązaniem, które wybrałem, było użycie ZFS poprzez sterownik ZFS-FUSE na moim serwerze pamięci. Myślałem, że moje osobiste zdjęcia, zeskanowane dokumenty i inne podobne pliki to rzeczy, do których mogę uzyskać dostęp tylko sporadycznie, więc może minąć bardzo dużo czasu, powiedzmy rok lub dłużej, zanim zauważę, że plik został uszkodzony z powodu błąd napędu lub podobny.

Do tego czasu wszystkie posiadane przeze mnie kopie zapasowe mogą być tą zgniłą wersją plików.

ZFS ma przewagę nad RAID-5, ponieważ może wykrywać i naprawiać błędy w danych przechowywanych na poszczególnych dyskach, nawet jeśli napędy nie zgłaszają błędu odczytu podczas odczytu danych. Za pomocą sum kontrolnych wykryje, że jeden z dysków zwrócił uszkodzone informacje i użyje danych nadmiarowości do naprawy tego dysku.

Ze względu na sposób, w jaki zaprojektowano sumowanie kontrolne w ZFS, czułem, że mogę na nim polegać, aby przechowywać rzadko używane dane przez długi czas. Co tydzień uruchamiam „peeling zpool”, który przechodzi i ponownie odczytuje wszystkie dane i weryfikuje sumy kontrolne.

ZFS-FUSE radził sobie całkiem dobrze w ciągu ostatnich kilku lat.

W odległej przeszłości dla klienta wdrożyłem system bazy danych, który przechowywał informacje o sumie kontrolnej wszystkich plików przechowywanych w określonym katalogu. Miałem wtedy inny skrypt, który uruchamiałby się okresowo i sprawdzał plik z sumą kontrolną przechowywaną w bazie danych. Dzięki temu możemy szybko wykryć uszkodzony plik i przywrócić go z kopii zapasowych. Zasadniczo wdrażaliśmy te same rodzaje kontroli, które ZFS wykonuje wewnętrznie.

Sean Reifschneider
źródło
Dlaczego głosowanie w dół? Ponieważ nie pozostał żaden komentarz, zakładam, że to „-1, nie zgadzam się”. :-)
Sean Reifschneider
... ale potem: na jakiej części się nie zgadzam? Choć może to trochę nie na temat pytania, wydaje mi się to solidne. Mam więc nadzieję, że głosowanie było za „nie odpowiedzeniem na pytanie”, a nie pozostawieniem nas nieświadomych jakiejś prawdziwej wady w powyższym ...
Arjan
Uświadomiłem sobie dziś rano, że zakładam, że icyrock pytał z powodu zmartwień o zgniliznę bitów, co było moim zmartwieniem. Ale może jest jakoś inaczej. Chociaż nie mogę sobie wyobrazić, jaki byłby przypadek użycia, który zmieniłby zawartość pliku zgodnie z prawem bez zmiany czasów pliku.
Sean Reifschneider,
Myślę, że obawą PO było uszkodzenie danych w transporcie. Po skopiowaniu pliku kopia kończy się inaczej niż oryginał.
Jon Bentley,
btrfs? , który ma sumy kontrolne i jest rodzimy ...
Dmitrij Kudriavtsev,
1

Znalazłem to narzędzie (Linux i Windows), które robi dokładnie to, co chcesz (kopia z haszowaniem + weryfikacja z logami): http://sourceforge.net/projects/quickhash/

Jedynym minusem jest to, że istnieje tylko jako GUI (brak dostępu do wiersza poleceń)

Od wersji 1.5.0 wybrany folder źródłowy może być mieszany, a następnie kopiowany i odtwarzany do folderu docelowego, w którym zawartość jest ponownie mieszana w celu weryfikacji. Od wersji 1.5.5 można również używać wybranych masek plików (* .doc; * .xls itp.).

2072
źródło
0

jeśli kopiujesz plik lokalnie (jak sugeruje to odwołanie do cpzamiast scpitp.), to tylko cmppliki źródłowe i docelowe ... ale realistycznie, jeśli cpnie powoduje jakiegoś błędu (w wierszu polecenia lub w wartość zwracana wykonania), nie ma powodu, aby sądzić, że nie działa.

jeśli naprawdę chcesz legalnie nadmiarowej kopii zapasowej, rozważ zdalne rozwiązanie, takie jak dropbox .

Brad Clawsie
źródło
+1. Nie jest jasne, dlaczego ta odpowiedź została odrzucona, ponieważ zapewnia (jak mi się wydaje) idealne rozwiązanie problemu, chociaż wymaga dwóch poleceń zamiast jednego.
Jon Bentley,
Naprawdę musisz napisać skrypt z pętlą, aby użyć tej odpowiedzi, ponieważ nie bierze ona pod uwagę wielu plików i folderów.
Gringo Suave