Wznów przesyłanie pojedynczego pliku przez rsync

22

W Ubuntu chcę skopiować duży plik z mojego dysku twardego na dysk wymienny przez rsync. Z jakiegoś powodu lub innej operacji nie można ukończyć w jednym przebiegu. Próbuję więc wymyślić, jak użyć rsync, aby wznowić kopiowanie plików z miejsca, w którym zostało ostatnio.

Próbowałem użyć opcji --partial lub --inplace, ale wraz z --progress znalazłem, że rsync z opcją --partial lub --inplace faktycznie zaczyna się od początku zamiast od tego, co zostało po raz ostatni. Ręczne wcześniejsze zatrzymanie rsync i sprawdzenie rozmiaru otrzymanego pliku również potwierdzi to, co znalazłem.

Ale z --append, rsync zaczyna się od tego, co zostało po raz ostatni.

Jestem zdezorientowany, jak zobaczyłem na stronie podręcznika - częściowy, - w miejscu lub - dołącza się do wznowienia kopiowania z tego, co zostało po raz ostatni. Czy ktoś może wyjaśnić różnicę? Dlaczego - częściowe lub - w miejscu nie działają w celu wznowienia kopiowania? Czy to prawda, że ​​aby wznowić kopię, rsync musi działać z opcją --append?

Także jeśli mv lub cp nie pozostawił częściowego pliku przez rsync, czy rsync --append poprawnie?

Dziękuję i pozdrawiam!

Tim
źródło
Moje rozumienie działania rsync jest ograniczone, ale odpowiadam na ostatnie pytanie. Jeśli cp jest niekompletny, rsync powinien wznowić kopiowanie. Wierzę , że pliki rsync hashs w taki sposób, że odnalazłaby tę samą początkową część pliku i skopiowała pozostałą część pliku.
Scott McClenning

Odpowiedzi:

25

Patrząc na niektóre strony rsync:

--append
Powoduje to, że rsync aktualizuje plik, dołączając dane na końcu pliku, co zakłada, że ​​dane, które już istnieją po stronie odbierającej, są identyczne z początkiem pliku po stronie wysyłającej.

--inplace
Ta opcja zmienia sposób, w jaki rsync przesyła plik, gdy jego dane wymagają aktualizacji: zamiast domyślnej metody tworzenia nowej kopii pliku i przenoszenia go na miejsce, gdy jest kompletny, rsync zapisuje zaktualizowane dane bezpośrednio w plik docelowy.

--partial
Domyślnie rsync usunie częściowo przesłany plik, jeśli transfer zostanie przerwany. W niektórych okolicznościach bardziej pożądane jest przechowywanie częściowo przesłanych plików.

Wygląda na to, że jeśli plik jest bardzo duży, chcesz go użyć --partial --append. ( --appendimplikuje --inplace) Jeśli ten duży plik ulegnie zmianie, upuść, --appenda rsync sprawdzi początek pliku, aby upewnić się, że również pasuje do pliku źródłowego. --inplacedla mnie brzmi niebezpiecznie, z wyjątkiem sytuacji, gdy rsynchronizujesz duży plik, nie chcesz, aby rsync utworzył nowy plik tymczasowy części początkowej, kontynuował przesyłanie, a następnie usunął stary plik, aby umieścić nowy plik na miejscu. Transfer przebiegałby szybciej, gdybyś mógł użyć tego samego pliku, nie wspominając o tym, że miejsce na dysku potrzebne do transferu byłoby mniejsze.

Ponadto z punktu widzenia przesyłania plików znalazłem, że kopia jest szybsza niż rsync. Jednak jeśli potrzebowałem zaktualizować plik, miałem synchronizację pliku przez rsync szybciej niż ponowne przesyłanie całego pliku. (jak powiedziałem powyżej) Rsync powinien móc wznowić od cp.

Mam nadzieję, że to pomoże.

Scott McClenning
źródło
1
Możesz zajrzeć do tego raportu o błędzie: lists.samba.org/archive/rsync/2012-June/027615.html
Stefan Schmidt
Dobra uwaga na temat korzystania z szybszego cp domyślnie i rsync do „naprawy” zepsutego procesu cp! Schludnie :)
Samuel Lampa