Rsync (remote sync) je nástroj pro synchronizaci souborů a složek na jednom či více serverech v systému Linux.
Výhodou rsync oproti klasickému „kopírovat a vložit“ je automatická detekce rozdílů mezi složkami nebo soubory. Rsync synchronizuje pouze tyto rozdíly, čímž se značně urychluje proces kopírování ze zdrojové složky do cílové.
V tomto návodu vám ukážeme, jak nainstalovat, nastavit a následně používat rsync v systému Linux Ubuntu 18.04 pro synchroznizaci souborů a složek a také jak naplánovat pravidelné zálohování serveru.
Instalace
Balíčky rsync jsou k dispozici v oficiálním repozitáři Ubuntu. Pro instalaci zadejte příkaz:
$ sudo apt install rsync
Syntax
$ rsync options /path/source/ /path/destination/
Dostupné možnosti:
-
• -v: průběžně zobrazuje jednotlivé zkopírované soubory a složky
-
• -r: pro rekurzivní kopírování složek a jejich obsahu včetně podsložek
-
• -h: velikost kopírovaných souborů se zobrazí v čitelnějším formátu (místo 14.167.396 bytes, se zobrazí 14.17 Mb)
-
• -z: pro kompresi kopírovaných dat
-
• -a: zobrazí původní informace o souboru, například časové razítko, oprávnění, vlastníka apod.
-
• -u: update – pokud cílový soubor již existuje, kopíruje soubor pouze v případě, že se na cílovém stroji nachází starší verze souboru
-
• --delete: rsync odstraní z cílové složky soubory, které nejsou ve zdrojové složce
-
• --exclude: určité soubory a/nebo složky budou při kopírování ignorovány
-
• --progress: zobrazí procentuální dokončení procesu kopírování a zbývající čas
-
• --existing: kopíruje pouze soubory, které již existují v cílové složce
Synchronizace dvou složek na stejném serveru
Kopírování z jedné složky do druhé se provádí příkazem „rsync“ následovaným zdrojovou složkou (složkou, ze které se data kopírují) a cílovou složkou. Bez ohledu na to, zda kopírovaná složka obsahuje další podsložky doporučujeme přidat tag "-r":
$ rsync -r path/source path/destination
Celá zdrojová složka se zkopíruje do cílové složky.
$ rsync -r ~/source/ ~/destination
Obsah zdrojové složky se zkopíruje do cílové složky.
Všimněte si rozdílu mezi těmito dvěma příkazy: zadáním "/" po zdrojové složce je systém vyzván ke kopírování souborů obsažených ve složce.
Příkaz bez “/” vyzývá k výběru celé složky a následně vytvoření kopie zdrojové složky v cílové složce.
Kopírování souborů stejného typu
Rsync umožňuje také kopírovat pouze soubory určitého typu definováním názvu či koncovky souboru.
Pokud chcete například kopírovat všechny soubory s koncovkou "pdf", lze tak učinit příkazem:
$ rsync path/source_folder/*.pdf path/destination_folder
Pomocí "* .pdf" byl zadán příkaz pro kopírování všech souborů s koncovkou ".pdf".
Kopírování souborů mezi dvěma servery na protokolu SSH
Ke kopírování souborů a složek z jednoho serveru na druhý lze využít protokolu SSH. Použití tohoto protokolu zaručuje, že během přenosu budou všechna data šifrována, nikdo je tedy nebude moci přečíst.
Parametr "-e ssh" je následován zdrojovou a cílovou destinací.
$ rsync -e ssh path/source/ user@IP_machine:/path/destination/
Bude vyžadováno heslo uživatele k cílovému počítači.
Kopírování souborů na základě velikosti
Rsync umožňuje také kopírování souborů na základě velikosti, kterou zabírají na disku.
$ rsync --max-size=15k path/source_folder/*.* path/destination_folder/*.*
Pomocí příkazu výše budou zkopírovány pouze soubory menší než 15 kB.
Větší soubory budou ignorovány.
$ rsync --min-size=20k ~/source_folder/*.* ~/destination_folder/*.*
Pomocí příkazu výše budou zkopírovány pouze soubory větší než 20 kB.
Menší soubory budou ignorovány.
Výjimky z kopírování na základě přípony
Pokud si nepřejete kopírovat některé typy souborů, lze je na základě přípony z kopírování vyloučit použitím tagu “--exclude”.
V níže uvedeném příkladu nebudou ze zdrojové do cílové složky zkopírovány soubory s příponou .PDF.
$ rsync -r --exclude="*.pdf" path/source_folder/ path/destination_folder
Odstranění dat ze zdrojové složky po kopírování
Pomocí rsync lze použít také postupu "vyjmout a vložit". Pomocí příkazu níže budou data zkopírována do cílové složky a následně smazána ze složky zdrojové
$ rsync -r --remove-source-files path/source_folder path/destination_folder
Nastavení transfer limitu
Pokud kopírujete data po síti, možná se vám bude hodit také možnost nastavit limit rychlosti uploadu. K tomu použijeme tag "--bwlimit = KBPS", kde "KBPS" nahradíme požadovanou hodnotou.
$ rsync --bwlimit=KBPS -r ssh source_path/folder user@IP_receiver:/destination_path
Nahraďte "KBPS" maximální přenosovou rychlostí v KB / s (2048 KB/s = 2MB/s).
Pravidelné a automatické kopírování
Pokud používáte rsync a nechcete příkazy zadávat stále dokola ručně, můžete použít nástroj Cron.
Je součástí Ubuntu 18.04 a umožňuje nastavit různá pravidla pro pravidelné opakování některých příkazů.
Chcete-li začít vytvářet pravidla a nastavovat proces automatického kopírování, zadejte:
$ crontab -e
Otevře se textový editor, ve kterém je uvedeno, který příkaz se má pravidelně opakovat. Po nastavení pravidel jej můžete uložit a zavřít.
Jak nastavit crontab
Zápis crontabu musí odpovídat přesné syntaxi a specifikovat 6 parametrů v následujícím pořadí:
m h dom mon dow command
-
• m: minuta (0-59)
-
• h: hodina (0-23)
-
• dom: den v měsíci (1-31)
-
• mon: měsíc (1-12)
-
• dow: den v týdnu (0:sunday - 6:saturday)
-
• command: příkaz po spuštění
Příklady možného nastavení:
30 * * * * rsync path/source/*.pdf path/destination
(každých 30 minut budou všechny ".pdf" soubory ze zdrojové složky zkopírovány do složky cílové)
*/2 * * * * rsync path/source/*.pdf path/destination (všechny .pdf soubory ve zdrojové složce budou zkopírovány do cílové každé 2 minuty)
50 8 * * 1,3 rsync path/source/*.pdf path/destination (všechny .pdf soubory ve zdrojové složce budou kopírovány do cílové složky každé pondělí a středu v 8:50)
Po uložení a zavření editoru můžete zkontrolovat seznam naplánovaných úloh:
$ crontab -l