Po pierwsze, jeśli chodzi o część „wznawiania” pytania, --partialpo prostu mówi stronie odbierającej, aby zachowała częściowo przesłane pliki, jeśli strona wysyłająca zniknie, jakby zostały całkowicie przeniesione.
Podczas przesyłania pliki są tymczasowo zapisywane jako pliki ukryte w folderach docelowych (np. .TheFileYouAreSending.lRWzDC) Lub w specjalnie wybranym folderze, jeśli ustawisz --partial-dirprzełącznik. Gdy przesyłanie się nie powiedzie i --partialnie zostanie ustawione, ten ukryty plik pozostanie w folderze docelowym pod tą tajemniczą nazwą, ale jeśli --partialzostanie ustawiony, nazwa pliku zostanie zmieniona na rzeczywistą nazwę pliku docelowego (w tym przypadku TheFileYouAreSending), nawet jeśli plik nie jest kompletny. Chodzi o to, że można później zakończyć przenoszenie ponownie uruchomiony z rsync albo --appendalbo --append-verify.
Tak więc, --partialnie sama wznowić uszkodzonego lub odwołany transfer. Aby go wznowić, przy następnym uruchomieniu będziesz musiał użyć jednej z wyżej wymienionych flag. Tak więc, jeśli musisz upewnić się, że cel nigdy nie będzie zawierał plików, które wydają się być w porządku, ale w rzeczywistości są niekompletne, nie powinieneś używać --partial. I odwrotnie, jeśli chcesz się upewnić, że nigdy nie pozostawisz zabłąkanych plików, które są ukryte w katalogu docelowym, i wiesz, że będziesz w stanie dokończyć transfer później, --partialpomoże Ci to.
W odniesieniu do --appendwspomnianego powyżej przełącznika jest to rzeczywisty przełącznik „wznawiania” i możesz go używać, niezależnie od tego, czy korzystasz --partial. W rzeczywistości, gdy korzystasz --append, nigdy nie są tworzone pliki tymczasowe. Pliki są zapisywane bezpośrednio w swoich obiektach docelowych. Pod tym względem --appenddaje taki sam wynik jak --partialw przypadku nieudanego transferu, ale bez tworzenia ukrytych plików tymczasowych.
Podsumowując, jeśli przenosisz duże pliki i chcesz wznowić anulowaną lub nieudaną operację rsync od dokładnego punktu, który został rsynczatrzymany, musisz użyć --appendlub --append-verifywłączyć kolejną próbę.
Jak wskazuje @Alex poniżej, ponieważ wersja 3.0.0 rsyncma teraz nową opcję --append-verify, która zachowuje się tak, --appendjak przed wprowadzeniem tego przełącznika. Prawdopodobnie zawsze chcesz się zachowywać --append-verify, więc sprawdź swoją wersję za pomocą rsync --version. Jeśli jesteś na Macu i nie korzysta rsyncze homebrewbędziesz (przynajmniej włącznie El Capitan) masz starszą wersję i trzeba użyć --appendzamiast --append-verify. Dlaczego nie utrzymywali tego zachowania --appendi zamiast tego nazwali przybysza, --append-no-verifyjest to nieco zagadkowe. Tak czy inaczej, --appendna rsyncwcześniej wersja 3 jest taka sama jak --append-verifyw nowszych wersjach.
--append-verifynie jest niebezpieczne: zawsze będzie czytać i porównywać dane na obu końcach, a nie tylko zakładać, że są równe. Robi to za pomocą sum kontrolnych, więc jest to łatwe w sieci, ale wymaga odczytu udostępnionej ilości danych na obu końcach drutu, zanim będzie mógł faktycznie wznowić przesyłanie przez dołączenie do celu.
Po drugie, powiedziałeś, że „słyszałeś, że rsync jest w stanie znaleźć różnice między źródłem a miejscem docelowym, a zatem po prostu skopiować różnice”.
Zgadza się i nazywa się to transferem delta, ale to inna sprawa. Aby to włączyć, dodaj przełącznik -club --checksum. Po użyciu tego przełącznika rsync sprawdzi pliki, które istnieją na obu końcach drutu. Robi to w kawałkach, porównuje sumy kontrolne na obu końcach, a jeśli się różnią, przenosi tylko różne części pliku. Ale, jak wskazuje @Jonathan poniżej, porównanie jest wykonywane tylko wtedy, gdy pliki mają ten sam rozmiar na obu końcach - różne rozmiary powodują, że rsync prześle cały plik, zastępując cel o tej samej nazwie.
Wymaga to początkowo trochę obliczeń na obu końcach, ale może być niezwykle skuteczne w zmniejszaniu obciążenia sieci, jeśli na przykład często tworzysz kopie zapasowe bardzo dużych plików o stałym rozmiarze, które często zawierają niewielkie zmiany. Przykładami, które przychodzą na myśl, są pliki obrazów wirtualnych dysków twardych używane w maszynach wirtualnych lub obiektach docelowych iSCSI.
Warto zauważyć, że jeśli użyjesz --checksumdo przeniesienia partii plików, które są całkowicie nowe do systemu docelowego, rsync nadal obliczy ich sumy kontrolne w systemie źródłowym przed przesłaniem ich. Dlaczego nie wiem :)
Krótko mówiąc:
Jeśli często za pomocą rsync po prostu „przenieść rzeczy z punktu A do B” i chcą możliwość anulowania tej operacji a potem wznowić go nie używać --checksum, ale nie używać --append-verify.
Jeśli używasz rsync do częstego tworzenia kopii zapasowych, --append-verifyprawdopodobnie nie zrobisz dla ciebie wiele, chyba że masz zwyczaj wysyłania dużych plików, które stale rosną, ale rzadko są modyfikowane po napisaniu. Jako dodatkową wskazówkę, jeśli tworzysz kopię zapasową w pamięci, która obsługuje migawki, takie jak btrfslub zfs, dodanie --inplaceprzełącznika pomoże zmniejszyć rozmiary migawek, ponieważ zmienione pliki nie są odtwarzane, ale zmienione bloki są zapisywane bezpośrednio nad starymi. Ten przełącznik jest także przydatny, jeśli chcesz uniknąć rsync tworzenia kopii plików w systemie docelowym, gdy wystąpiły tylko niewielkie zmiany.
Podczas używania --append-verifyrsync zachowuje się tak samo jak zawsze we wszystkich plikach o tym samym rozmiarze. Jeśli różnią się modyfikacją lub innymi znacznikami czasu, zastąpi cel źródłem bez dalszego sprawdzania tych plików. --checksumporówna zawartość (sumy kontrolne) każdej pary plików o identycznej nazwie i rozmiarze.
ZAKTUALIZOWANO 01.01.2015 Zmieniono, aby odzwierciedlać punkty wykonane przez @Alex (dzięki!)
ZAKTUALIZOWANO 2017-07-14 Zmieniono, aby odzwierciedlać punkty poczynione przez @Jonathan (dzięki!)