Ulubione porady i wskazówki dotyczące rsync

57

Im więcej używam, rsynctym bardziej zdaję sobie sprawę, że to szwajcarski scyzoryk do przesyłania plików. Jest tak wiele opcji. Niedawno dowiedziałem się, że możesz przejść --remove-source-filesi usunie on plik ze źródła po skopiowaniu, co sprawia, że ​​jest to bardziej ruch, niż kopiowanie programu. :)

Jakie są twoje ulubione małe porady i wskazówki dotyczące rsync?

Rory
źródło

Odpowiedzi:

19

Spróbuj użyć rsync w wersji 3, jeśli musisz zsynchronizować wiele plików! V3 tworzy swoją listę plików przyrostowo i jest znacznie szybszy i zużywa mniej pamięci niż wersja 2.

W zależności od platformy może to mieć spore znaczenie. W OSX w wersji 2.6.3 próba zbudowania indeksu 5 milionów plików zajęłaby ponad godzinę lub awaria, a skompilowana wersja 3.0.2 zaczęła od razu kopiować.

robcast
źródło
Należy zauważyć, że jeśli użyjesz niektórych opcji ( --delete-beforena przykład), zostanie użyte stare zachowanie „najpierw buduj listę”, ponieważ jest to wymagane do prawidłowego działania tych opcji - więc jeśli nie widzisz tego zachowania, sprawdź, czy znane są inne opcje, których używasz. Może to być przydatne, jeśli używasz rsync interaktywnie na dużym drzewie i chcesz wymusić skanowanie początkowe, aby wynik --progressbył dokładny (tzn. Liczba „obiektów do porównania” nigdy nie wzrośnie, ponieważ po pierwszym skanie nie zostaną znalezione żadne nowe obiekty ).
David Spillett,
18

Używanie --link-destdo tworzenia oszczędnych przestrzennie kopii zapasowych opartych na migawkach, przy czym wydaje się, że masz wiele kompletnych kopii danych kopii zapasowej (po jednym dla każdego uruchomienia kopii zapasowej), ale pliki, które nie zmieniają się między uruchomieniami, są połączone na stałe zamiast tworzenia nowych kopii, oszczędzając miejsce.

(właściwie nadal używam metody rysnc-followed-by-cp -al , która osiąga to samo, zobacz http://www.mikerubel.org/computers/rsync_snapshots/, aby zapoznać się z starymi, ale wciąż bardzo dobrymi ocenami obu technik i powiązane problemy)

Jedną z głównych wad tej techniki jest to, że jeśli plik jest uszkodzony z powodu błędu dysku, jest tak samo uszkodzony we wszystkich migawkach, które prowadzą do tego pliku, ale mam również kopie zapasowe offline, które chroniłyby przed tym w przyzwoitym stopniu. Inną rzeczą, na którą należy zwrócić uwagę, jest to, że twój system plików ma wystarczającą liczbę i-węzłów lub zabraknie ich zanim faktycznie zabraknie miejsca na dysku (chociaż nigdy nie miałem problemu z domyślnymi ustawieniami ext2 / 3).

Nigdy też nie zapominaj o bardzo bardzo przydatnej --dry-rundla trochę zdrowej paranoi, szczególnie gdy korzystasz z --delete*opcji.

David Spillett
źródło
6
+1 dla --dry-run
David Z
1
Zauważ, że -n jest skrótem do --dry-run
ctennis
3
Wolę trzymać się długich nazw, szczególnie w skryptach, które inni mogą w końcu utrzymać. Ułatwia to zrozumienie tego, co jest zamierzone bez odniesienia do dokumentów.
David Spillett
+1 Wdrożyłem rozwiązanie do tworzenia kopii zapasowych wielu TB na wielu komputerach z metodą --link-dest dla twardych migawek, jak opisano powyżej - działało idealnie.
matja
Jeśli lubisz kopie zapasowe --link-dest, sprawdź Dirvish, który używa rsync pod maską
hfs
14

Jeśli chcesz zaktualizować witrynę internetową o duże pliki za pomocą powolnego łącza, możesz przenieść małe pliki w ten sposób:

rsync -a --max-size = 100K / var / www / there: / var / www /

następnie zrób to dla dużych plików:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / there: / var / www /

rsync ma wiele opcji przydatnych na stronach internetowych. Niestety nie ma wbudowanego sposobu wykrywania równoczesnych aktualizacji, więc musisz dodać logikę do skryptów cron, aby uniknąć nakładania się zapisów dużych plików.

Kok
źródło
10

Korzystam z opcji --existing, gdy próbuję zachować mały podzbiór plików z jednego katalogu zsynchronizowanego z innym miejscem.

TCampbell
źródło
Dzięki! To właśnie uratowało mnie przed paskudnym pisaniem reguł filtrowania.
benzado
8

--rsh jest moje.

Użyłem go, aby zmienić szyfr na ssh na coś szybszego ( --rsh="ssh -c arcfour"), a także skonfigurować łańcuch sshs (zalecane użycie z nim ssh-agent) do synchronizacji plików między hostami, które nie mogą rozmawiać bezpośrednio. ( rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/).

Stephen Paul Lesniewski
źródło
7
--time-limit

Gdy ta opcja zostanie użyta, rsync zatrzyma się po upływie T minut i zakończy działanie. Myślę, że ta opcja jest przydatna podczas rsynchronizacji dużej ilości danych w nocy (godziny bezczynne), a następnie zatrzymania, gdy nadszedł czas, aby ludzie zaczęli korzystać z sieci w ciągu dnia (godziny intensywne).

--stop-at=y-m-dTh:m

Ta opcja pozwala określić, o której godzinie zatrzymać rsync.

Batch Mode

Trybu wsadowego można użyć do zastosowania tego samego zestawu aktualizacji do wielu identycznych systemów.

jftuga
źródło
Przydatny! Użyłem wcześniej polecenia „at”, aby zabić proces
Lionel
2
Niestety te opcje nie są dostępne w rsync dystrybuowanym z dystrybucjami Redhat / Centos lub Ubuntu.
IanB,
@Lionel: Jak wykorzystujesz atten proces do zabicia?
IMTheNachoMan
6

Jeśli zastanawiasz się, jak daleko się posunął wolno działający program rsync i nie użyłeś opcji -v, aby wyświetlić listę plików podczas ich przesyłania, możesz dowiedzieć się, które pliki on otworzył:

 ls -l /proc/$(pidof rsync)/fd/*

w systemie, który ma / proc

Np. Rsync został właśnie dla mnie zawieszony, mimo że zdalny system wydawał się mieć sporo miejsca. Ta sztuczka pomogła mi znaleźć nieoczekiwanie ogromny plik, którego nie pamiętałem i który nie zmieściłby się na drugim końcu.

Podał mi także trochę ciekawszą informację - drugi koniec najwyraźniej się poddał, ponieważ nastąpiło również przerwane łącze do gniazda:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
nealmcb
źródło
5

--archive jest standardowym wyborem (choć nie domyślnym) dla zadań przypominających kopie zapasowe, co zapewnia kopiowanie większości metadanych z plików źródłowych (uprawnień, własności itp.).

Jeśli jednak nie chcesz tego używać, często będziesz nadal chciał uwzględnić --times, który będzie kopiowany w czasie modyfikacji plików. To sprawia, że ​​kolejny rsync, który działa (zakładając, że robisz to wielokrotnie), jest znacznie szybszy, ponieważ rsync porównuje czasy modyfikacji i pomija plik, jeśli jest niezmieniony. Zaskakujące (przynajmniej dla mnie) ta opcja nie jest domyślna.

Andrew Ferrier
źródło
4

Ten, którego najczęściej używam to zdecydowanie, --exclude-fromktóry pozwala określić plik zawierający rzeczy, które mają zostać wykluczone.

Uważam również za --chmodbardzo przydatny, ponieważ pozwala upewnić się, że uprawnienia kończą się pożądanym stanem, nawet jeśli twoje źródło jest popsute.

innaM
źródło
4

--backup-dir = date +%Y.%m.%d--delete Usuwamy, ale tworzymy kopię ... na wszelki wypadek


źródło
4

Mój jest --inplace. Działa cuda, gdy na serwerze kopii zapasowych działa ZFS lub btrfs i tworzone są rodzime migawki.

Hubert Kario
źródło
3

Oczywiście jest też --deletecoś, co usuwa z celu elementy, których nie można znaleźć w źródle.

innaM
źródło
2

cwrsync - Rsync dla Windows http://www.itefix.no/i2/node/10650

Ta wersja zawiera OpenSSH, dzięki czemu możesz przesyłać pliki bezpiecznym kanałem.

jftuga
źródło
Używam cwrsync i to świetnie. Cieszę się, że ktoś wprowadził tę niesamowitą funkcję do systemu Windows.
Andrew Ensley,
2
--partial 

W przypadku przerw

--bwlimit=100

Aby ograniczyć przepustowość - dobre do kopiowania dużych plików, katalogów

zbuntowany
źródło
Jaka jest jednostka bwlimit? bitów na sekundę, bajtów na sekundę?
Timo Kähkönen,
@Timo, bwlimit jest w KBytes / sekundę.
Andrew Ferrier,
1

Jeśli masz skonfigurowany rsync jako demon na serwerze, możesz po prostu przeglądać współdzielone moduły jak każda inna lista katalogów. Następnie możesz zobaczyć, które ścieżki są dostępne, a jakie nie.

sybreon
źródło
1

gdy korzystam z GlusterFs, mamy wąskie gardło z plikami T o zerowym rozmiarze, do synchronizacji między uszkodzoną cegłą lub repliką musimy użyć, --min-size=1aby nie synchronizować pustego pliku z uszkodzonego serwera

vahid chakoshy
źródło