Rsync (Remote sync) jest narzędziem do kopiowania oraz synchronizacji plików i folderów na tym samym serwerze, bądź na różnych maszynach Linux.
Rsync różni się od klasycznego „kopiuj i wklej” wykorzystaniem narzędzia, które automatycznie wykrywa różnice w plikach pomiędzy dwoma katalogami, co przyspiesza proces kopiowania folderu do katalogu docelowego.
Niniejszy poradnik przedstawi instalację, konfigurację oraz instrukcję użytkowania rsync na Linux Ubuntu 18.04, co pozwoli na synchronizację plików i folderów, oraz zaplanowanie cyklicznego backupu Twojego serwera.
Instalacja
Pakiet rsync jest dostępny w Oficjalnym Repozytorium Ubuntu. Zainstaluj go za pomocą komendy:
$ sudo apt install rsync
Syntaks
$ rsync options /path/source/ /path/destination/
Dostępne opcje:
-
-v: skopiowane pliki i foldery będą widoczne w shell
-
-r: kopiuje foldery oraz ich zawartość
-
-h: zamiast wyświetlania rozmiaru skopiowanego pliku w bajtach, wyświetlony zostanie bardziej czytelny format ( zamiast 14.167.396 bajtów, wyświetlony zostanie format 14.17 Mb)
-
-z: to kompresja przenoszonych danych
-
-a: wyświetla oryginalne szczegóły pliku, takie jak znacznik czasu, uprawnienia, właściciel, itp.
-
-u: pliki z folderu źródłowego nie zostaną skopiowane, jeśli w folderze docelowym znajdują się ich nowsze wersje.
-
--delete: rsync usunie z folderu docelowego pliki, które nie są obecne w folderze źródłowym.
-
--exclude: wybrane pliki lub foldery zostaną pominięte w czasie kopiowania.
-
--progress: wyświetla procentowy postęp procesu kopiowania oraz pozostały czas.
-
--existing: skopiowane zostaną tylko pliki, które już znajdują się w folderze docelowym.
Synchronizacja dwóch folderów na tym samym komputerze
Kopiowanie odbywa się za pomocą komendy „rsync”, po której należy podać ścieżkę folderu źródłowego (z którego kopiowane są elementy), a następnie folderu docelowego. Bez względu na to, czy kopiowany katalog zawiera w sobie foldery, wskazane jest dodanie „-r” do komendy:
$ rsync -r path/source path/destination
Cały folder „source” zostanie skopiowany do folderu „destination”.
$ rsync -r ~/source/ ~/destination
Zawartość folderu „source” zostanie skopiowana do folderu „destination”.
Zwróć uwagę na różnice pomiędzy powyższymi komendami: poprzez użycie „/” po folderze źródłowym system kopiuje pliki zawarte w folderze.
Brak „/” skutkuje wyborem całego folderu, więc zostanie on przekopiowany z folderu źródłowego do folderu docelowego w całości.
Kopiowanie plików jednego formatu
Rsync pozwala również na kopiowanie jedynie plików tego samego rodzaju, poprzez sprecyzowanie formatu lub nazwy.
Przyjmując, że pliki są zapisane w formacie „.txt”, możliwe jest przekopiowanie ich wszystkich za pomocą komendy:
$ rsync path/source_folder/*.txt path/destination_folder
Poprzez człon „*.txt” wysłane zostaje żądanie przekopiowania wszystkich plików .txt.
Kopiowanie plików pomiędzy dwoma maszynami przez SSH
Możliwe jest również wykorzystanie protokołu SSH do kopiowania plików i folderów z jednego komputera na drugi. Wykorzystanie protokołu gwarantuje szyfrowanie danych w czasie transferu, co oznacza, iż strony trzecie nie będą wstanie ich odczytać.
Komenda wymaga skorzystania z opcji „-e ssh”, po której należy podać ścieżkę folderu źródłowego, a następnie folderu docelowego.
$ rsync -r ssh path/source/ user@IP_machine:/path/destination/
Hasło użytkownika maszyny docelowej jest niezbędne do wykonania operacji.
Kopiowanie plików bazując na ich rozmiarze
Filtry rsync pozwalają również na kopiowanie plików, bazując na ich rozmiarze na dysku.
$ rsync --max-size=15k path/source_folder/*.* path/destination_folder/*.*
Komenda powyżej spowoduje kopiowanie jedynie plików mniejszych niż 15Kb.
Większe pliki zostaną zignorowane.
$ rsync --min-size=20k ~/source_folder/*.* ~/destination_folder/*.*
Powyższa komenda natomiast spowoduje skopiowanie jedynie plików większych niż 20Kb.
Mniejsze pliki zostaną zignorowane.
Pomijanie plików bazując na ich rozszerzeniu
Jeśli nie chcesz skopiować plików danego formatu, możesz skorzystać z opcji „--exclude”, która pominie pliki bazując na ich rozszerzeniu.
W przykładzie poniżej pliki w formacie .txt nie zostaną skopiowane z folderu „source” do folderu „destination”.
$ rsync -r --exclude="*.txt" path/source_folder/ path/destination_folder
Usuwanie zawartości z folderu źródłowego po transferze
Dokładnie jak w przypadku opcji „wytnij i wklej”, rsync posiada możliwość przenoszenia plików z folderu źródłowego do folderu docelowego. W tym przypadku pliki zostaną skopiowane do folderu docelowego, a następnie usunięte z folderu źródłowego.
$ rsync -r --remove-source-files path/source_folder path/destination_folder
Ustawianie limitu prędkości transferu
W przypadku kopiowania plików poprzez sieć, niezbędne może być ustawienie limitu prędkości transferu dla Twoich plików. W takim przypadku skorzystaj z opcji „--bwlimit = KBPS” i zastąp „KBPS” docelową wartością prędkości transferu.
$ rsync --bwlimit=KBPS -r ssh source_path/folder user@IP_receiver:/destination_path
Zastąp „KBPS” wartością maksymalnej prędkości transferu, wyrażonej w KB/s (2048 KB/s = 2 MB/s)
Cykliczne i automatyczne kopie
Jeśli chcesz wykorzystać rsync do wykonywania backupów, ale nie chcesz za każdym razem ręcznie wprowadzać komend, sugerujemy skorzystanie z narzędzia Cron.
Jest ono domyślnie dostępne na Ubuntu 18.04 i pozwala na ustawienie „zasad” cyklicznego powtarzania niektórych komend.
W celu rozpoczęcia tworzenia zasad i konfiguracji automatycznego procesu kopiowania, wprowadź komendę:
$ crontab -e
Zostanie otwarty edytor tekstu, który wskaże jakie komendy są cyklicznie powtarzane. Po ustawieniu własnych zasad, zapisz zmiany i zamknij edytor.
Konfiguracja crontab
Zapis crontab musi zawierać dokładny syntaks, który sprecyzuje 6 wymaganych parametrów:
m h dom mon dow command
-
m: minuty (0-59)
-
h: godzina (0-23)
-
dom: dzień miesiąca (1-31)
-
mon: miesiąc (1-12)
-
dow: dzień tygodnia (0:niedziela - 6:sobota)
-
command: komenda do wykonania
Przykłady możliwych konfiguracji:
30 * * * * rsync path/source/*.pdf path/destination
(każdego miesiąca, każdego dnia oraz co godzinę przy 30 minutach na zegarze, wszystkie pliki „.pdf” z folderu „source” zostaną przekopiowane do folderu „destination”)
*/2 * * * * rsync path/source/*.pdf path/destination (wszystkie pliki .pdf znajdujące się w folderze „source” będą kopiowane do folderu „destination” każdego dnia miesiąca, co 2 minuty)
50 8 * * 1,3 rsync path/source/*.pdf path/destination (komenda kopiowania plików .pdf z folderu „source” do folderu „destination” będzie wykonywana od poniedziałku do środy o godzinie 8:50)
Po zapisaniu zmian i wyjściu z edytora, możesz wyświetlić listę crontabs za pomocą komendy:
$ crontab -l