W Ubuntu chcę skopiować duży plik z mojego dysku twardego na dysk wymienny rsync
. Z innego powodu operacja nie może zostać zakończona w jednym przebiegu. Próbuję więc wymyślić, jak użyć, rsync
aby wznowić kopiowanie pliku od miejsca, w którym został ostatnio przerwany.
Próbowałem użyć opcji --partial
lub --inplace
, ale wraz z --progress
, znalazłem rsync
z --partial
lub --inplace
faktycznie zaczyna się od początku zamiast od tego, co zostało po raz ostatni. Ręczne zatrzymanie rsync
wcześniej i sprawdzenie rozmiaru otrzymanego pliku również potwierdziło to, co znalazłem.
Ale z --append
rsync zaczyna się od tego, co zostało po raz ostatni.
Jestem zdezorientowany, jak widziałem na stronie man --partial
, --inplace
i --append
wydaje się odnosić do wznowienia kopiowanie z tego, co zostało po raz ostatni. Czy ktoś jest w stanie wyjaśnić różnicę? Dlaczego nie chcesz pracować --partial
lub --inplace
wznowić kopiowania? Czy to prawda, że aby wznowić kopiowanie, rsync
musi działać z tą --append
opcją?
Ponadto, czy plik częściowy został pozostawiony przez, mv
czy cp
nie przez rsync, czy rsync --append
poprawnie wznowi kopiowanie pliku?
--append
sprawia, żersync
wierzę, że jeśli dwa odpowiednie pliki mają różną długość, wówczas krótszy jest identyczny z początkowej części dłuższa. Tak, jeśli zaczniesz kopiować duży plikcp
i przerwiesz proces kopiowania,rsync --append
skopiujesz tylko pozostałą część pliku. ( Uwaga: jeślicp
zostanie przerwana przez awarię systemu, istnieje niewielka szansa, że treść i metadane plików nie są zsynchronizowane, to znaczy, że plik jest uszkodzony W tym przypadku działa.rsync
Po raz kolejny bez--append
powinno rozwiązać problem.)--partial
bez--append
.--append
i--append-verify
miej niebezpieczny przypadek awarii: gdy plik odbiorcy ma ten sam rozmiar lub większy, ale zawiera inne dane. Zamiast tego sugeruję rozwiązanie oparte na--no-whole-file
.Pamiętaj, że to
--append
sugeruje--inplace
, co samo w sobie sugeruje--partial
.Używając tylko
--partial
powinieneś spowodowaćrsync
pozostawienie częściowych transferów i wznowienie ich w kolejnych próbach.Korzystając z niego
--append
, powinieneś spowodowaćrsync
pozostawienie częściowych plików i wznowienie ich następnym razem. Po przesłaniursync
należy zweryfikować sumę kontrolną tylko przesłanych danych.--append-verify
włącza cały plik do weryfikacji sumy kontrolnej, w tym każdą część przesłaną w poprzednim transferze.Z jedną weryfikacją sumy kontrolnej
--append
lub--append-verify
jej nieudaną weryfikacją powinno spowodować całkowite ponowne przesłanie pliku (za pomocą--inplace
)Powinieneś być w stanie wznowić operację
mv
lubcp
operację,rsync
ale możesz chcieć skorzystać z tej--append-verify
opcji dla spokoju ducha.Zauważ, że użycie
--append
powodujersync
skopiowanie tylko tych plików, które mają rozmiar odbiornika krótszy niż rozmiar nadawcy (niezależnie od znaczników czasu) lub są nieobecne w odbiorniku. Dokumentując tę opcję:Więcej informacji na stronie man
źródło
--append
i--append-verify
mieć niebezpieczny przypadek awarii: gdy plik odbiornika jest tego samego rozmiaru lub większy, ale ma inne dane. Zamiast tego sugeruję rozwiązanie oparte na--no-whole-file
.--checksum
należy je zastosować. Nie mogę znaleźć tego wyraźnie, ale logicznie, każda z opcji, które można wznowić, powinna sugerować,--no-whole-file
ponieważ--whole-file
powinna być niekompatybilna.--append-verify
pominie pliki o tym samym lub większym rozmiarze z różnymi datami , co może być „nieoczekiwane”. Nie--checksum
wszystkie pliki są potrzebne, ponieważ i takrsync
zrobi całą sumę kontrolną, ale tylko to, co przesyła.--checksum
nakazujersync
sumę kontrolną plików przed wysłaniem, co gwarantuje, że wszystkie zmienione pliki zostaną przesłane, niezależnie od rozmiaru / czasu. Czy masz źródło nieoczekiwanego--append-verify
zachowania, ponieważ to, co opisujesz, nie pasuje do dokumentacji lub mojego (ograniczonego) doświadczenia?--append-verify
odnosi się do tego,--append
co mówi:If a file needs to be transferred and its size on the receiver is the same or longer than the size on the sender, the file is skipped.
Nawet jeśli plik musi zostać przesłany z tego powodu--checksum
, nadal może zostać pominięty.David Schwartz ma rację
--partial
(lub lepiej-P
) robi to, co chcesz. Sprawdziłem to na pliku 37G, który został w nim zatrzymany ~ 8g, przez sieć. rsync szybko przeskanował pierwsze części części (pokazując postęp, dzięki czemu-P
), a następnie wznowił przesyłanie do końca pliku częściowego.źródło
--whole-file
opisem opcji.--no-W
(co w rzeczywistości działa!)--no-W
chyba że dokładnie rozumiesz, co to ustawienie oznacza dla plików lokalnych. Zobacz unix.stackexchange.com/a/181018/100397Robiłeś to dobrze,
--partial
robi to, co chcesz. Wygląda na to, że zaczyna się od początku, ponieważ zawsze zaczyna się na początku listy fragmentów danych plików, które należy skopiować. Ta--append
opcja jest niebezpieczna i spowoduje uszkodzenie pliku, jeśli dane z jakiegoś powodu nie będą pasować.źródło
--append
kontynuowane od przesunięcia bajtu).Domyślnie
rsync
włącza się w--whole-file
przypadku przesyłania z dysku lokalnego na dysk lokalny. Spowoduje to ponowne uruchomienie przerwanego transferu od początku, zamiast sprawdzania części, które już tam są.Aby to wyłączyć, użyj:
Łącząc to z albo
--inplace
czy--partial
pozwoli wznawianie transferu później.Mój alias używany
rsync
do kopiowania to:Ostrzeżenie : używaj ostrożnie,
--append-verify
ponieważ pomija pliki docelowe o tym samym rozmiarze lub większym.źródło
rsync
porównuje pliki źródłowe i odpowiednie pliki docelowe przed przesłaniem, aby wysłać tylko te części, które uległy zmianie (transfer delta).--no-whole-file
mówi,rsync
aby zrobić to samo w przypadku kopiowania z lokalnego na lokalny. Dokumentacja nie sugeruje, że wpłynęłoby to na wznowienie częściowych transferów pojedynczych plików.rsync
pominie pliki o dokładnie takim samym rozmiarze i znacznikach czasu według projektu. Ani to--append-verify
nie--no-whole-file
powinno, ani nie powinno zmieniać tego zachowania, ale--checksum
powinno działać na rzecz spokoju ducha kosztem IO dysku--append-verify
pominie pliki o tym samym lub większym rozmiarze z różnymi datami , co może być „nieoczekiwane”. Nie--checksum
wszystkie pliki są potrzebne, ponieważ i takrsync
zrobi całą sumę kontrolną, ale tylko to, co przesyła.