Как использовать Rsync для синхронизации локальных и удаленных файлов и каталогов

Rsync to oprogramowanie typu open source, którego można używać do synchronizowania plików i folderów z komputera lokalnego na komputer zdalny i odwrotnie.

Godną uwagi cechą Rsync jest możliwość przesyłania zaszyfrowanych plików za pomocą SSH i SSL. Ponadto transfer plików odbywa się w jednym wątku, w przeciwieństwie do innych podobnych programów, które tworzą osobny wątek dla każdego transferu plików. Zwiększa to szybkość i eliminuje dodatkowe opóźnienia, które stają się problem podczas transferu dużych ilości małych plików.

Rsync jest bardzo elastycznym narzędziem synchronizacji sieciowej. Ze względu na jego rozpowszechnienie w systemach Linux i UNIX-podobnych systemów oraz popularność jako narzędzie do tworzenia skryptów, Rsync jest domyślnie dołączany do większości dystrybucji Linux.

Dla systemu Microsoft Windows cwRsync jest darmową dystrybucją takiego oprogramowania narzędziowego jak Rsync, z tym że jest zoptymalizowana pod kątem szybkiej i łatwej instalacji w systemie Microsoft Windows. cwRsync można pobrać TUTAJ, jednak zalecamy sprawdzić najnowszą wersję TUTAJ. Po pobraniu pliku instalacyjnego należy go uruchomić. Również należy wybrać ustawienia domyślne które oferuje instalator, w tym domyślną ścieżkę instalacji: C:\Program Files\cwRsync. PODKREŚLAMY, że lepiej zainstalować dany program w folderze domyślnym.

Zalety Rsync:

  • Możliwość utrzymywać synchronizację całego drzewa katalogów;
  • Możliwość zapisywania dowiązywań symbolicznych, dowiązywań twardych, właścicieli i uprawnienia plików, metadane oraz czas tworzenia;
  • Nie wymaga specjalnych uprawnień;
  • Transfer plików jednym potokiem;
  • Obsługa RSH, SSH jako transportu;
  • Opcja anonimowego Rsync.

Rsync domyślnie wykorzystuje transport SSH. Aby używać transportu Rsync, należy wykonać minimalną konfigurację serwera Rsync. Umożliwi to nie tylko synchronizację plików ze zdalnym serwerem, ale także odbierać ich ze zdalnego serwera.

Najpierw trzeba utworzyć plik konfiguracyjny o następującej treści:

vi /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[share]
path = /tmp/share/
hosts allow = 123.123.133.133
hosts deny = *
list = true
uid = root
gid = root
read only = false

Tu ustawiamy ścieżkę do naszego folderu dla synchronizacji, zezwalamy dostęp do serwera tylko z adresu IP (123.123.133.133) i odmawiamy wszystkim innym połączeniom. Parametry uid i gid wskazują na użytkownika i grupę z jakiej będzie uruchamiany daemon. Lepiej nie używać root, a sprecyzować użytkownika nobody i nadać mu uprawnienia do folderu, w którym katalogi Rsync będą synchronizowane.

Konfiguracja serwera Rsync została zakończona, zostało tylko zapisać plik, uruchomić serwer Rsync i dodać go do pobierania automatycznego.

systemctl start rsync

systemctl enable rsync

Składnia Rsync

Podstawowa składnia Rsync jest bardzo prosta i działa analogicznie ssh, scp oraz cp.

rsync opcje źródło przeznaczenie

Źródłem i miejscem docelowym może być katalog zdalny lub katalog lokalny. Naprzykład ssh, rsync, serwer Samba lub katalog lokalny. Polecenia określają dodatkowe parametry Rsync.

Polecenia Rsync

Przyjrzyjmy się teraz szybko poleceniom Rsync. Nie wszystkie polecenia są tutaj wymienione. Można przeczytać więcej o wszystkich opcjach na stronie manualu Rsync:

-v – Wyświetla szczegółowe informacje o procesie kopiowania;

-q – Minimum informacji;

-c – Sprawdzenie sum kontrolnych dla plików;

-a – Tryb archiwizacji, w którym zapisywane są wszystkie atrybuty oryginalnych plików;

-R – Ścieżki względne;

-b — Utwórz kopię zapasową;

-u – Nie przepisuj nowszych plików;

-l – Kopiuj linki symboliczne;

-h — wyprowadza liczby w formacie czytelnym dla człowieka;

-L – Kopiować zawartość linków;

-H – Kopiować twarde linki;

-W – Kopiować całe pliki;

-p — Zachowaj uprawnienia do plików;

-g – Zapisz grupę;

-t – Zapisz czas modyfikacji;

-x – Pracuj tylko na tym systemie plików;

-e – Użyj innego transportu, naprzykład ssh;

-z – Kompresuj pliki przed transferem;

–delete — Usuń pliki, których nie ma w źródle;

–exclude – Wyklucz pliki według wzorca;

–include – Dołącz pliki według wzorca;

–recursive — Rekurencyjnie przeglądaj katalogi;

–no-recursive — Wyłącz rekursję;

–progress – Wyświetla postęp przesyłania plików;

–stat – Pokaż statystyki transferu;

–version – Wersja.

Kopiować i synchronizować pliki lokalnie.

Rsync umożliwia synchronizację plików oraz folderów na tym samym komputerze. Przyjrzyjmy się najpierw użyciu Rsync do lokalnej synchronizacji pliku:

rsync -zvh anyfile /mnt/backup_dir/

Wybierając polecenie – progress, można zobaczyć ile procent już zostało skopiowano, a ile jeszcze zostało:

rsync -zvh --progress anyfile /mnt/backup_dir/

Synchronizacja folderów na komputerze lokalnym

Synchronizować foldery przy pomocy Rsync jest tak samo łatwo, jak synchronizować pliki:

rsync -zvh /home/user/documents /mnt/backup_dir/

Jeśli chcecie, aby wszystkie atrybuty pliku, tj. data modyfikacji i utworzenia zostały zachowane, należy użyć polecenie -a:

rsync -azvh /home/user/documents /mnt/backup_dir/

Synchronizacja z serwerem zdalnym

Synchronizować pliki z serwerem zdalnym nie jest dużo trudniejszym zadaniem. Kopiujemy plik z dokumentami lokalnymi na zdalny serwer:

rsync -avz /home/user/documents/ [email protected]:/home/

Domyślnie Rsync próbuje korzystać się z transportu SSH. Jeśli chcecie  wykorzystywać wcześniej utworzony serwer Rsync, musicie go jawnie wskazać:

rsync -avz /home/user/documents/ rsync://123.123.133.133:/home/

Podobnie możena synchronizować pliki za pomocą Rsync ze zdalnego serwera:

rsync -avz [email protected]:/home/ /home/user/documents/

Synchronizacja plików drogą ssh

Polecenie -e się wykorzystuje dla instalacji protokołu połączenia. W przypadku korzystania z SSH wszystkie przesyłane dane są szyfrowane i przekazywane bezpiecznym kanałem, aby nikt nie mógł ich przechwycić. Aby korzystać z SSH, musisz znać hasło użytkownika w systemie.

Synchronizacja plików ze zdalnego serweru drogą ssh będzie wygłądała w następny sposób:

rsync -avzhe ssh [email protected]:/home/ /home/user/documents/

Jeśli wykorzystujesz inny port dla ssh, można go określić za pomocą tej metody:

rsync -avzhe "ssh -p 22" [email protected]:/home/ /home/user/documents/

Synchronizacja niektórych plików w Rsync

Polecenia -include i -exclude pozwalają określić jakie pliki synchronizować, a które wykluczyć. Dane polecenia działają nie tylko z plikami, ale i z katalogami.

Naprzykład, skopiujemy wszystkie pliki które zaczynają się literą S:

rsync -avze ssh --include 'S*' --exclude '*' /home/user/documents/ [email protected]:/home/

Usuwanie podczas synchronizacji

Podczas synchronizacji można usuwać pliki których nie ma na komputerze z którego leci synchronizacja Rsync, w tym celu wykorzystujemy polecenie -delete.

Naprzykład:

rsync -avz --delete [email protected]:/home/ /home/user/documents/

Jeśli przed wykonaniem tego polecenia utworzymy plik w folderze, który nie istnieje na zdalnym serwerze, zostanie on usunięty.

Usuwanie plików oryginalnych

Po zakończeniu synchronizacji ze zdalnym serwerem, można usunąć pliki oryginalne:

rsync --remove-source-files -zvh [email protected]:/home/anyfile.tar /home/user/documents/

Plik anyfile.tar zostanie usunięty po zakończeniu kopiowania do folderu /home/user/documents/.

Tryb symulacji Rsync

Jeśli jesteś nowicjuszem i nigdy przed tym nie używałeś Rsync, to będziesz chciał zobaczyć, jak działa polecenie, faktycznie nic nie robiąc w systemie plików. Otóż jest do tego polecenie -dry-run. Polecenie wypisuje do terminalu tylko wszystkie wykonane czynności, bez wprowadzania żadnych rzeczywistych zmian:

rsync --dry-run --remove-source-files -zvh [email protected]:/home/anyfile.tar /home/user/documents/

Limit szybkości transferu

Można ograniczyć wykorzystanie przepustowości sieci za pomocą opcji –bwlimit:

rsync --bwlimit=100 -avzhe ssh [email protected]:/home/ /home/user/documents/

Rsync synchronizuje tylko części pliku, jeśli chcesz zsynchronizować cały plik, użyj polecenia -W:

rsync -zvhW [email protected]:/home/anyfile.tar /home/user/documents/anyfile.tar