rsync zawsze używa sum kontrolnych do sprawdzenia, czy plik został poprawnie przesłany. Jeśli plik docelowy już istnieje, rsync może pominąć aktualizację pliku, jeśli czas i rozmiar modyfikacji są zgodne z plikiem źródłowym, ale jeśli rsync zdecyduje, że dane muszą zostać przesłane, sumy kontrolne są zawsze wykorzystywane na danych przesyłanych między procesami wysyłającymi i odbierającymi rsync . To weryfikuje, czy otrzymane dane są takie same jak dane wysłane z dużym prawdopodobieństwem, bez dużego obciążenia związanego z porównywaniem poziomu bajtów w sieci.
Po otrzymaniu danych pliku rsync zapisuje dane do pliku i ufa, że jeśli jądro wskazuje na pomyślny zapis, dane zostały zapisane bez uszkodzenia na dysku. rsync nie odczytuje danych ponownie i nie porównuje ze znaną sumą kontrolną jako dodatkową kontrolę.
Jeśli chodzi o samą weryfikację, w przypadku protokołu 30 i późniejszych (pierwszy obsługiwany w 3.0.0) rsync używa MD5 . W przypadku starszych protokołów używana jest suma kontrolna MD4 .
Choć od dawna uważany za przestarzały dla bezpiecznych skrótów kryptograficznych, MD5 i MD4 pozostają odpowiednie do sprawdzania uszkodzenia plików.
Źródło: strona podręcznika i sprawdzanie kodu źródłowego rsync w celu weryfikacji.
-c
flagi strony podręcznika : „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 ten automatyczny po przesłaniu plik weryfikacja nie ma nic wspólnego z opcją przed przesłaniem „Czy ten plik wymaga aktualizacji?” sprawdź.rsync
ma nie robić weryfikację po kopiowania dla lokalnych kopii plików. Możesz sprawdzić, czy tak nie jest,rsync
kopiując duży plik na wolny dysk (np. USB), a następnie kopiując ten sam plikcp
, np .:Oba polecenia zajmują tyle samo czasu, dlatego też
rsync
prawdopodobnie nie można wykonać sumy kontrolnej - ponieważ wymagałoby to ponownego odczytania pliku docelowego z wolnego dysku.man
Strona jest niestety mylące na ten temat. Sprawdziłem to również za pomocąstrace
- po zakończeniu kopiowaniarsync
nieread()
wywołuje żadnych wywołań w pliku docelowym, więc nie można go sprawdzić . Jeszcze raz możesz to sprawdzić za pomocą czegoś takiegoiotop
: widziszrsync
robienie odczytu i zapisu jednocześnie (kopiowanie ze źródła do miejsca docelowego), a następnie wyjście. Gdyby weryfikował integralność, istniałaby faza tylko do odczytu.źródło
rsync -c
ponownie, jeśli chcesz zmusić go do sprawdzenia.rsync
dokonuje porównania sumy kontrolnej przed kopiowaniem (w niektórych przypadkach), aby uniknąć kopiowania tego, co już istnieje. Celem porównania sum kontrolnych nie jest sprawdzenie, czy kopiowanie powiodło się. Na tym polega podstawowa infrastruktura: sterowniki systemu plików, sterowniki dysków, sterowniki sieciowe itp. Poszczególne aplikacjersync
nie muszą zawracać sobie głowy tym szaleństwem. Wszystko, corsync
należy zrobić (i robi to!), To sprawdzić zwracane wartości wywołań systemowych, aby upewnić się, że nie wystąpił błąd.źródło
Szybkie i brudne odpowiedzi, bezpośrednio na pytania.
P: Czy
rsync
porówna się podczas kopiowania plików między dwoma dyskami lokalnymi? Odp .: Przeprowadzi porównanie, aby dowiedzieć się, co skopiować.P: Jeśli przeprowadzi weryfikację - czy jest to bezpieczny zakład? A może lepiej jest porównywać bajty po bajtach? Odp .: Tak bezpieczny jak matematyka za sumą kontrolną pliku MD5. Możesz spróbować wykonać prosty eksperyment, aby nauczyć się i ufać narzędziu.
Długa odpowiedź: myślę, że chciałeś
rsync
zrobić porównanie plików (krok po kroku lub suma kontrolna) po skopiowaniu plików. Jeśli jesteś jednym z niewielu, którzy cenią integralność danych, poniższe informacje mogą okazać się przydatne:powyższy
rsync
folder plików kodu przy pierwszym uruchomieniu i jeśli zostanie ukończony bez problemu, uruchomi sięrsync
ponownie natychmiast, wykonując porównanie nazw plików przy użyciu skrótu całego pliku.źródło
Użycie rsync do sprawdzenia integralności duplikatu
Aby zagwarantować, że ten test fizycznie ponownie odczyta pliki z nośnika dysku, sugeruję wyłączenie obu dysków i ich ponowne uruchomienie przed uruchomieniem tego testu. Spowoduje to wyczyszczenie ich wewnętrznych lotnych pamięci podręcznych.
Jeśli nie zrestartujesz również Linuksa, powinieneś przynajmniej upuścić pamięć podręczną ( * ) za pomocą:
Następnie ponownie przeczytaj oba drzewa i porównaj ich sumy kontrolne:
Nowoczesna suma kontrolna rsync wykorzystuje MD5, który ma 128 bitów. Prawdopodobieństwo tego, że nie wykryje błędu w pojedynczym pliku, jest astronomicznie niskie ( tutaj trochę dyskusji ), ale nie niemożliwe.
źródło
--checksum
dopóki test nie przejdzie bez niego.