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?

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ć.


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.


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.


10

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


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/).


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.


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]'

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.


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.


4

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


4

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


3

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



2
--partial 

W przypadku przerw

--bwlimit=100

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


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.