rsync je univerzální nástroj, který zjednodušuje přenos souborů přes síťové připojení a urychluje synchronizaci lokálních adresářů. Díky své vysoké flexibilitě je tento synchronizační nástroj vynikající volbou pro celou řadu operací na úrovni souborů.

Co je rsync?

rsync, zkratka pro „remote synchronisation“ (vzdálená synchronizace), je flexibilní a síťově kompatibilní synchronizační nástroj pro Linux. Tento open-source program lze použít k synchronizaci souborů a adresářů mezi lokálními systémy nebo napříč sítěmi. Nástroj využívá techniku diferenciálního přenosu dat, při které se přenášejí pouze ty části dat, které byly skutečně změněny. Tím se minimalizuje množství vyměňovaných dat a výrazně se zrychluje proces synchronizace. Díky řadě možností umožňuje rsync přesné řízení synchronizačního chování. Flexibilní syntaxe umožňuje jak jednoduché lokální kopírování, tak komplexní síťovou synchronizaci.

Jaká je syntaxe pro rsync?

Syntaxe příkazů rsync má jednoduchou strukturu a je podobná syntaxi příkazů SSH, SCP a CP. Základní struktura je následující:

rsync [OPTION] source destination
bash

Zdrojová cesta, ze které mají být data synchronizována, se zadává v source, zatímco cílová cesta se zadává v destination. rsync nabízí řadu možností, které uživatelé mohou využít k přizpůsobení synchronizačního procesu svým požadavkům. Nejčastěji používané možnosti jsou:

  • -a (archivy): Zachovává rekurzivní oprávnění souborů, časová razítka, skupiny, vlastníky a speciální vlastnosti souborů
  • -v (verbose): Zobrazuje podrobné informace o procesu synchronizace
  • -r (recursive): Synchronizuje adresáře a jejich obsah rekurzivně
  • -u (update): Přenáší pouze soubory, které jsou novější než soubory již existující v cílovém adresáři
  • -z (compress): Snižuje datový provoz v síti
  • -n –itemize-changes: Zobrazí seznam změn, které mají být provedeny
  • --delete: Odstraní soubory v cílovém adresáři, které již neexistují ve zdroji
  • --exclude: Vyloučí určité soubory nebo adresáře ze synchronizace
  • --dry-run: Simuluje proces synchronizace bez skutečného přenosu souborů
  • --progress: Zobrazí průběh přenosu souborů
  • --partial: Soubory, které byly částečně přeneseny, zůstanou v cílovém adresáři, pokud je přenos přerušen. Po obnovení přenosu se soubor pokračuje od posledního stavu

Příklady syntaxe rsync

Následující příklady syntaxe rsync by měly usnadnit pochopení toho, jak se příkaz používá. Následující příklad kódu vytvoří adresář dir1 obsahující 100 prázdných testovacích souborů a druhý prázdný adresář dir2:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Obsah dir1 lze synchronizovat na stejném systému s dir2 pomocí možnosti -r:

$ rsync -r dir1/ dir2
bash

Alternativně lze použít volbu -a, která synchronizuje rekurzivně a obsahuje symbolické odkazy, speciální soubory zařízení, časy úprav, skupiny, vlastníky a oprávnění:

$ rsync -a dir1/ dir2
bash

Poznámka: Lomená čára (/) na konci zdrojového adresáře v příkazu rsync je důležitá , protože označuje , že má být synchronizován obsah adresáře, nikoli adresář samotný.

$ rsync -a dir1/ dir2
bash

Zde je příklad výstupu:

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Pokud zdrojový adresář neobsahuje koncovou lomítko, bude zdrojový adresář zkopírován do cílového adresáře:

$ rsync -a dir1 dir2
bash

Zde je výstup:

sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

Použití lomítka na konci zdrojového adresáře zajišťuje, že synchronizační proces proběhne podle očekávání a že obsah zdrojového adresáře skončí ve správném cílovém adresáři.

Jak synchronizovat rsync se vzdáleným systémem

Synchronizace vzdáleného systému pomocí rsync není obvykle obtížná, pokud máte přístup k vzdálenému počítači přes SSH a disponujete potřebnými autentizačními údaji. Rsync často používá SSH (Secure Shell) pro bezpečnou komunikaci se vzdálenými systémy. Aby bylo možné tento nástroj používat, musí být nainstalován na obou stranách.

Pokud je ověřen přístup SSH mezi oběma počítači, lze složku dir1 synchronizovat na vzdáleném počítači. V tomto případě je třeba přenést skutečný adresář, proto byla v následujícím příkazu vynechána koncová lomítka:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Pokud je adresář přesunut z lokálního systému do vzdáleného systému, jedná se o operaci push. Naopak, pokud je vzdálený adresář synchronizován s lokálním systémem, jedná se o operaci pull. Syntaxe pro tuto operaci je následující:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash

Jaké další možnosti nabízí rsync?

Standardní chování rsync lze dále přizpůsobit pomocí níže uvedených možností.

Přenos nekomprimovaných souborů pomocí rsync

Zátěž sítě při přenosu nekomprimovaných souborů lze snížit pomocí volby -z:

$ rsync -az source destination
bash

Zobrazení průběhu a obnovení přerušených přenosů

S -P můžete kombinovat možnosti --progress a --partial. Získáte tak přehled o průběhu přenosů a zároveň můžete obnovit přerušené přenosy:

$ rsync -azP source destination
bash

Zde je výstup:

sending incremental file list
./
file1
    0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
    0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
    0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
    0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .
bash

Proveďte příkaz znovu, abyste získali kratší výstup. To umožní rsync určit, zda byly provedeny změny na základě časů změn.

$ rsync -azP source destination
bash

Zde je výstup:

sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Synchronizujte adresáře pomocí rsync

Aby bylo zajištěno, že dva adresáře jsou skutečně synchronizovány, je nutné odstranit soubory, které byly odstraněny ze zdrojového adresáře, také z cílového adresáře. Rsync však soubory z cílového adresáře neodstraňuje automaticky. To lze změnit pomocí volby --delete. Je však důležité používat tuto volbu s opatrností, protože odstraní soubory v cílovém adresáři, které již ve zdrojovém adresáři neexistují.

Před použitím této možnosti byste měli použít možnost --dry-run. To vám umožní provést simulaci synchronizačního procesu bez smazání jakýchkoli skutečných souborů. Tímto způsobem můžete zajistit, že budou provedeny pouze požadované změny, aniž byste omylem ztratili důležitá data:

$ rsync -a --delete source destination
bash

Vyloučit soubory a adresáře ze synchronizace

V programu rsync můžete použít volbu --exclude k vyloučení určitých souborů a adresářů ze synchronizace. To je užitečné například v případě, že nechcete synchronizovat dočasné soubory, soubory protokolu nebo jiný obsah.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Pokud jste zadali vzor pro vyloučení souborů, můžete pomocí volby --include= přepsat toto vyloučení pro určité soubory, které odpovídají jinému vzoru.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Ukládání záloh pomocí rsync

Možnost --backup umožňuje ukládat zálohy důležitých souborů. Lze ji použít ve spojení s možností --backup-dir k určení adresáře, do kterého se mají záložní soubory ukládat:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Podrobný přehled různých scénářů zálohování najdete v našem článku o zálohování serverů pomocí rsync.

Přejít do hlavního menu