Poradniki > Jak skonfigurować kopię zapasową za pomocą rsync na Ubuntu 18.04

Jak skonfigurować kopię zapasową za pomocą rsync na Ubuntu 18.04

Zobacz poradnik tutaj

Opublikowany: 23 stycznia 2020

Backup Storage Ubuntu

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

copy folder

 $ rsync -r ~/source/ ~/destination

Zawartość folderu „source” zostanie skopiowana do folderu „destination”.

A copy of the contents of the source folder is made in the destination folder

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

copy txt files

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.

Copy files on SSH protocol between two machines

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.

Copy files based on size

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

Only files larger than 20Kb will be copied

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

Excluding files from copying based on extension

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

Remove the content from the source folder once transferred

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)

Set transfer rate limit

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.

Edit crontab

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)

How to configure a crontab

How to configure a crontab

Po zapisaniu zmian i wyjściu z edytora, możesz wyświetlić listę crontabs za pomocą komendy:

$ crontab -l