Po pierwsze, jeśli chodzi o część „wznawiania” pytania, --partial
po 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-dir
przełącznik. Gdy przesyłanie się nie powiedzie i --partial
nie zostanie ustawione, ten ukryty plik pozostanie w folderze docelowym pod tą tajemniczą nazwą, ale jeśli --partial
zostanie 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 --append
albo --append-verify
.
Tak więc, --partial
nie 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, --partial
pomoże Ci to.
W odniesieniu do --append
wspomnianego 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 --append
daje taki sam wynik jak --partial
w 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ł rsync
zatrzymany, musisz użyć --append
lub --append-verify
włączyć kolejną próbę.
Jak wskazuje @Alex poniżej, ponieważ wersja 3.0.0 rsync
ma teraz nową opcję --append-verify
, która zachowuje się tak, --append
jak 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 rsync
ze homebrew
będziesz (przynajmniej włącznie El Capitan) masz starszą wersję i trzeba użyć --append
zamiast --append-verify
. Dlaczego nie utrzymywali tego zachowania --append
i zamiast tego nazwali przybysza, --append-no-verify
jest to nieco zagadkowe. Tak czy inaczej, --append
na rsync
wcześniej wersja 3 jest taka sama jak --append-verify
w nowszych wersjach.
--append-verify
nie 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 -c
lub --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 --checksum
do 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-verify
prawdopodobnie 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 btrfs
lub zfs
, dodanie --inplace
przełą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-verify
rsync 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. --checksum
poró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!)