Průvodce Rysnc a 11 příkladů, jak jej efektivně používat

Synchronizace souborů s Rsync: Podrobný průvodce

Rsync je bezplatný nástroj pracující v příkazovém řádku, který slouží k synchronizaci souborů, a to jak lokálně, tak i na vzdálených systémech. Umožňuje snadno přenášet soubory a celé adresářové struktury.

Tento nástroj je obzvláště užitečný pro migraci dat, vytváření záloh a zrcadlení, což z něj činí neocenitelného pomocníka pro webmastery a administrátory, kteří často potřebují provádět opakované přenosy dat.

V tomto článku si podrobně vysvětlíme, jak Rsync pracuje, a ukážeme si několik praktických příkladů jeho použití.

Jak funguje Rsync?

Rsync je nástroj, který se používá v příkazové řádce pro vzdálenou synchronizaci v systémech typu Unix. Umožňuje uživatelům plynule přenášet a synchronizovat soubory mezi různými počítači nebo hostiteli.

V jádru Rsync využívá algoritmus delta-transfer. Tento algoritmus spočívá v přenosu pouze rozdílů mezi dvěma soubory mezi zdrojovým a cílovým hostitelem. Zdroj i cíl mohou být umístěny lokálně nebo na vzdáleném serveru. Rsync může provádět úlohy kopírování a synchronizace dat dvěma hlavními způsoby:

  • Pro kopírování a synchronizaci mezi dvěma hostiteli využívá protokoly SSH nebo RSH.
  • Pro kopírování a synchronizaci může také využít démona TCP rsync.

Díky svému designu pro systémy Unix funguje bezproblémově i v Linuxu.

Proces synchronizace souborů pomocí Rsync krok za krokem:

  • Rsync se pomocí SSH připojí ke vzdálenému hostiteli a vyžádá si heslo.
  • Po připojení Rsync komunikuje se zdrojovým hostitelem.
  • Tyto programy následně identifikují soubory a adresáře, které je třeba synchronizovat. Ke kontrole rozdílů mezi soubory se využívá algoritmus delta transfer.

Pokud Rsync nenajde soubor na vzdáleném zařízení, ale nalezne ho na zdrojovém hostiteli, zkopíruje ho a přenese na cílový systém. Podobně, u již existujících souborů (na obou systémech) zkopíruje pouze rozdíly (změněné části). Nakonec ignoruje soubory, které jsou identické na obou systémech bez jakýchkoli úprav.

Rsync dosahuje přírůstkových aktualizací tak, že ukládá rozdíly do dočasného souboru před odesláním do cíle.

Před tím, než začnete:

  • Je nutné mít oprávnění root nebo používat sudo.
  • Mějte přístup k terminálu nebo příkazovému řádku.
  • Potřebujete mít SSH přístup pro bezpečné spouštění příkazů Rsync.
  • K vytvoření Rsync potřebujete dva stroje

Pro tento návod budeme používat Linux Mint 21.1 Vera. Avšak principy jsou stejné, takže můžete postupovat podle návodu s jakoukoli jinou distribucí Linuxu.

Proč používat Rsync místo Scp?

Scp (secure copy) je běžně používaný protokol v příkazové řádce, který uživatelům umožňuje kopírovat soubory. Scp přistupuje ke kopírování lineárně, jednoduše kopíruje soubory ze zdroje do cíle. Pro zajištění bezpečnosti využívá SSH.

Syntaxe příkazu Scp je následující:

scp [VOLBA] ZDROJ CÍL

Nicméně, otázkou zůstává: Proč používat Rsync namísto Scp?

Rsync má několik výhod oproti Scp, včetně:

  • Rychlejší provedení: Rsync je rychlejší než Scp, protože využívá protokol pro vzdálenou aktualizaci. Umožňuje mu přenášet pouze změny místo celého souboru. Při pravidelné synchronizaci stačí poprvé provést úplnou kopii. Poté už se kopírují pouze aktualizované části pomocí delta-transfer algoritmu.
  • Menší využití šířky pásma: Vzhledem k tomu, že Rsync nemusí kopírovat celý soubor znovu, dochází k menšímu využití šířky pásma. Navíc využívá kompresní a dekompresní algoritmy pro minimalizaci velikosti souboru během přenosu.
  • Více možností v příkazové řádce: Rsync také překonává Scp v počtu dostupných možností v příkazové řádce. Umožňuje tak uživateli doladit chování Rsync více než u Scp.

Závěrem, Rsync je skvělý nástroj pro přírůstkovou synchronizaci. Scp je rovněž užitečný pro bezpečný přenos souborů. V reálných situacích je Scp vhodný pro běžné úkoly, pokud hledáte jednodušší přístup. Pro opakující se úkoly je však lepší používat Rsync.

Syntaxe příkazu Rsync

Základní syntaxe příkazu Rsync je následující:

rsync [VOLBA] ZDROJ [USER@]HOST:CÍL

Vysvětlení jednotlivých částí:

  • VOLBA: Možnosti Rsync, které definují jeho chování.
  • ZDROJ: Adresář nebo soubory, které chcete zkopírovat.
  • CÍL: Adresář, kam se mají soubory zkopírovat.
  • USER: Uživatelské jméno na vzdáleném serveru.
  • HOST: Název hostitele nebo IP adresa vzdáleného serveru.

Volby jsou parametry, které přidávají příkazu další funkce. Například můžete synchronizovat data rekurzivně pomocí volby -r. Nicméně, volba -r nesynchronizuje vlastnictví skupin a uživatelů, časová razítka, oprávnění ani symbolické odkazy. Proto se místo ní často používá volba -a, která spustí příkaz v archivačním režimu a zajistí, že při kopírování budou zachována všechna vlastnictví, oprávnění a symbolické odkazy souborů.

Mezi další užitečné volby patří:

  • -z: Komprimuje data během přenosu, čímž šetří šířku pásma.
  • -h: Zobrazuje výstup v lidsky čitelné formě.
  • -b: Vytváří zálohy během synchronizace dat.
  • -e: Umožňuje použití SSH pro vzdálené přenosy dat.
  • --progress: Zobrazuje průběh synchronizace dat.
  • -v: Zobrazuje podrobný výstup příkazu.
  • --n: Provede zkušební běh (dry run) pro otestování konfigurace synchronizace dat.
  • -q: Potlačuje výstup a volby příkazu Rsync.

Instalace Rsync

Většina Unixových a Linuxových systémů má Rsync již předinstalovaný. Pokud ho však ve svém systému nemáte, můžete ho nainstalovat pomocí následujících příkazů:

Distribuce Příkaz pro instalaci
Debian/Ubuntu/Mint
sudo apt-get install rsync
Arch Linux
pacman -S rsync
Gentoo
emerge sys-apps/rsync
CentOS/Fedora/REHL
sudo yum install rsync
openSUSE
sudo zypper install rsync

Jelikož v našem případě používáme Linux Mint, Rsync byl již předinstalovaný. Můžete ověřit, zda je Rsync nainstalován, spuštěním příkazu rsync v terminálu. Vypíše se jeho verze, možnosti a další informace.

rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Nyní se podíváme na Rsync v akci na různých příkladech použití.

Pro účely tohoto návodu vytvoříme dva adresáře:

  • zdrojový-adresář
  • cílový-adresář

Pro jejich vytvoření použijte následující příkazy:

mkdir zdrojový-adresář
mkdir cílový-adresář

Budeme také muset vygenerovat nějaké soubory, aby Rsync měl s čím pracovat. Vytvořme si tedy několik testovacích souborů pomocí tohoto příkazu:

touch zdrojový-adresář/soubor{1..100}

Tímto příkazem vytvoříme ve zdrojovém adresáři 100 prázdných souborů. Můžete si to ověřit použitím příkazu ls:

ls zdrojový-adresář
#Výstup
soubor1    soubor18  soubor27  soubor36  soubor45  soubor54  soubor63  soubor72  soubor81  soubor90
soubor10   soubor19  soubor28  soubor37  soubor46  soubor55  soubor64  soubor73  soubor82  soubor91
soubor100  soubor2   soubor29  soubor38  soubor47  soubor56  soubor65  soubor74  soubor83  soubor92
soubor11   soubor20  soubor3   soubor39  soubor48  soubor57  soubor66  soubor75  soubor84  soubor93
soubor12   soubor21  soubor30  soubor4   soubor49  soubor58  soubor67  soubor76  soubor85  soubor94
soubor13   soubor22  soubor31  soubor40  soubor5   soubor59  soubor68  soubor77  soubor86  soubor95
soubor14   soubor23  soubor32  soubor41  soubor50  soubor6   soubor69  soubor78  soubor87  soubor96
soubor15   soubor24  soubor33  soubor42  soubor51  soubor60  soubor7   soubor79  soubor88  soubor97
soubor16   soubor25  soubor34  soubor43  soubor52  soubor61  soubor70  soubor8   soubor89  soubor98
soubor17   soubor26  soubor35  soubor44  soubor53  soubor62  soubor71  soubor80  soubor9   soubor99

Poznámka: Cílový adresář necháme prozatím prázdný.

Rekurzivní kopírování adresářů v lokálním prostředí

Přestože je Rsync primárně určen pro kopírování souborů mezi místním a vzdáleným serverem, je stejně užitečný i pro lokální kopírování souborů.

V tomto případě budeme používat následující syntaxi příkazu Rsync:

rsync [VOLBA] ZDROJ CÍL

Zkopírujeme soubory z našeho zdrojového adresáře do cílového adresáře spuštěním následujícího příkazu:

rsync -r zdrojový-adresář/ cílový-adresář

Příkaz -r zde zajistí „rekurzivní“ zkopírování souborů z celého zdrojového adresáře do cílového adresáře.

#Výstup
ls
cílový-adresář  zdrojový-adresář

ls cílový-adresář

ls zdrojový-adresář
soubor1    soubor18  soubor27  soubor36  soubor45  soubor54  soubor63  soubor72  soubor81  soubor90
soubor10   soubor19  soubor28  soubor37  soubor46  soubor55  soubor64  soubor73  soubor82  soubor91
soubor100  soubor2   soubor29  soubor38  soubor47  soubor56  soubor65  soubor74  soubor83  soubor92
soubor11   soubor20  soubor3   soubor39  soubor48  soubor57  soubor66  soubor75  soubor84  soubor93
soubor12   soubor21  soubor30  soubor4   soubor49  soubor58  soubor67  soubor76  soubor85  soubor94
soubor13   soubor22  soubor31  soubor40  soubor5   soubor59  soubor68  soubor77  soubor86  soubor95
soubor14   soubor23  soubor32  soubor41  soubor50  soubor6   soubor69  soubor78  soubor87  soubor96
soubor15   soubor24  soubor33  soubor42  soubor51  soubor60  soubor7   soubor79  soubor88  soubor97
soubor16   soubor25  soubor34  soubor43  soubor52  soubor61  soubor70  soubor8   soubor89  soubor98
soubor17   soubor26  soubor35  soubor44  soubor53  soubor62  soubor71  soubor80  soubor9   soubor99

rsync -r zdrojový-adresář/ cílový-adresář

ls cílový-adresář
soubor1    soubor18  soubor27  soubor36  soubor45  soubor54  soubor63  soubor72  soubor81  soubor90
soubor10   soubor19  soubor28  soubor37  soubor46  soubor55  soubor64  soubor73  soubor82  soubor91
soubor100  soubor2   soubor29  soubor38  soubor47  soubor56  soubor65  soubor74  soubor83  soubor92
soubor11   soubor20  soubor3   soubor39  soubor48  soubor57  soubor66  soubor75  soubor84  soubor93
soubor12   soubor21  soubor30  soubor4   soubor49  soubor58  soubor67  soubor76  soubor85  soubor94
soubor13   soubor22  soubor31  soubor40  soubor5   soubor59  soubor68  soubor77  soubor86  soubor95
soubor14   soubor23  soubor32  soubor41  soubor50  soubor6   soubor69  soubor78  soubor87  soubor96
soubor15   soubor24  soubor33  soubor42  soubor51  soubor60  soubor7   soubor79  soubor88  soubor97
soubor16   soubor25  soubor34  soubor43  soubor52  soubor61  soubor70  soubor8   soubor89  soubor98
soubor17   soubor26  soubor35  soubor44  soubor53  soubor62  soubor71  soubor80  soubor9   soubor99

Tímto příkazem se zkopírují všechny soubory ze zdrojového adresáře do cílového.

Lokální kopírování jednoho souboru

Nyní, když jsme si ukázali, jak synchronizovat dva adresáře, se naučíme, jak zkopírovat jediný soubor.

Za tímto účelem upravíme prázdný soubor soubor1 ve zdrojovém adresáři a následně ho synchronizujeme se stejným souborem v cílovém adresáři.

Pro úpravu souboru použijte tento příkaz:

nano zdrojový-adresář/soubor1

Zkopírujte a vložte následující text do editoru nano:

Upravujeme soubor1 ve zdrojovém-adresáři.
Po úpravě posuneme novou aktualizaci do cílového adresáře.
rsync nemusí kopírovat soubor znovu díky delta-transfer algoritmu.
Tento algoritmus zkontroluje rozdíly a podle toho aktualizuje cílové soubory.
Takže jakmile uložíte soubor1 ve zdrojovém adresáři, otevřete soubor1 v cílovém adresáři. Bude prázdný.
Nicméně, pokud ho zkontrolujeme po spuštění rsync, uvidíte, že soubor1 v cílovém adresáři je aktualizovaný.

Přidávání obsahu do souboru

Nyní zavřete a uložte soubor.

Nyní zkopírujeme soubor pomocí Rsync:

sudo rsync -v --existing zdrojový-adresář/soubor1 /cílový-adresář
#Výstup
sudo rsync -v --existing zdrojový-adresář/soubor1 cílový-adresář
soubor1

odesláno 557 bajtů  přijato 35 bajtů  1,184.00 bajtů/sec
celková velikost je 474  zrychlení je 0.80

Jak jste si mohli všimnout, použili jsme volbu --existing. Ta aktualizuje stávající soubory. Pokud příkaz spustíte bez --existing, soubor se neaktualizuje, i když příkaz proběhne úspěšně.

Pokud jediný soubor, který kopírujete, v cílovém adresáři neexistuje, musíte spustit následující příkaz:

rsync -v zdrojový-adresář/novySoubor cílový-adresář
#Výstup
rsync -v zdrojový-adresář/novySoubor cílový-adresář
novySoubor

odesláno 82 bajtů  přijato 35 bajtů  234.00 bajtů/sec
celková velikost je 0  zrychlení je 0.00

Kopírování více souborů

Pokud potřebujete kopírovat více souborů, musíte uvést zdrojové cesty všech souborů a na konci cílový adresář.

Za tímto účelem vytvoříme ve zdrojovém adresáři dva nové soubory: novySoubor2 a novySoubor3. Uděláme to pomocí tohoto příkazu:

touch zdrojový-adresář/novySoubor{2..3}

Nyní použijte následující příkaz pro synchronizaci více souborů:

rsync -v zdrojový-adresář/novySoubor2 zdrojový-adresář/novySoubor3 cílový-adresář
#Výstup
rsync -v zdrojový-adresář/novySoubor2 zdrojový-adresář/novySoubor3 cílový-adresář
novySoubor2
novySoubor3

odesláno 135 bajtů  přijato 54 bajtů  378.00 bajtů/sec
celková velikost je 0  zrychlení je 0.00

Kopírování souboru nebo adresáře z lokálního do vzdáleného prostředí

Syntaxe příkazu Rsync pro přenos z lokálního do vzdáleného prostředí je:

rsync [VOLBA] ZDROJ [USER@]HOST:CÍL

Jak vidíte, potřebujete znát IP adresu vzdáleného stroje, aby příkaz fungoval. Musíte také uvést IP adresu ve zdroji souboru.

rsync -av /Projekty/rsync-navod/zdrojový-adresář 192.168.192.200: /Projekty/rsync-navod/cílový-adresář

Před zahájením přenosu budete vyzváni k zadání hesla. Pokud je uživatel na vzdáleném počítači jiný, musíte ho uvést před IP adresou a znakem @:

rsync -av /Projekty/rsync-navod/zdrojový-adresář [email protected]: /Projekty/rsync-navod/cílový-adresář

Pokud potřebujete kopírovat více souborů nebo adresářů, musíte uvést seznam souborů nebo cest k adresářům. Syntax je následující:

rsync -av /Projekty/rsync-navod/zdrojový-adresář/novySoubor1 /Projekty/rsync-navod/zdrojový-adresář/novySoubor2 192.168.192.200: /Projekty/rsync-navod/cílový-adresář

Protokoly specifické pro vzdálený přenos

Rsync vám umožňuje definovat konkrétní protokoly pro přenos souborů. To se provede pomocí volby -e a následného protokolu.

Například pro použití protokolu SSH je nutné k příkazu Rsync přidat volbu -e ssh:

rsync -e ssh /Projekty/rsync-navod/zdrojový-adresář 192.168.192.200: /Projekty/rsync-navod/cílový-adresář

Kopírování souboru nebo adresáře ze vzdáleného do lokálního prostředí

Syntaxe Rsync pro přenos dat ze vzdáleného do lokálního prostředí je následující:

rsync [VOLBA] [USER@]HOST:ZDROJ CÍL

Tento příkaz funguje jako požadavek pro stažení. Pokud chcete získat soubory a adresáře ze vzdáleného serveru na lokální počítač, použijte následující příkaz:

rsync -av 192.168.192.200: /Projekty/rsync-navod/cílový-adresář /Projekty/rsync-navod/zdrojový-adresář

Tento příkaz stáhne soubory z cílového adresáře vzdáleného počítače do zdrojového adresáře lokálního počítače.

Podobně můžete stáhnout konkrétní soubor uvedením jeho celé cesty:

rsync -av 192.168.192.200: /Projekty/rsync-navod/cílový-adresář/novySoubor4 /Projekty/rsync-navod/zdrojový-adresář

Chcete-li zkopírovat více souborů nebo adresářů ze vzdáleného do lokálního prostředí, musíte uvést cestu ve složených závorkách, oddělených čárkami, za IP adresou serveru:

rsync -av 192.168.192.200: {/Projekty/rsync-navod/cílový-adresář/, /domov/hudba/2023-hudba} /Projekty/rsync-navod/zdrojový-adresář

Obdobně můžete uvést i soubory.

Zobrazení aktuálního průběhu během přenosu

U větších záloh dat je užitečné sledovat aktuální průběh. Použijte volbu --progress. Zobrazí se rychlost přenosu, zbývající čas a množství přenesených dat.

rsync -av --progress 192.168.192.200: /Projekty/rsync-navod/cílový-adresář /Projekty/rsync-navod/zdrojový-adresář

Smazání zdrojových souborů po dokončení přenosu

K smazání zdrojových souborů po dokončení přenosu můžete použít volbu --remove-source-files. To vám může pomoci v mnoha situacích, zejména pokud se jedná o zabezpečení souborů bez zanechání stopy nebo pro uvolnění místa:

rsync -av --remove-source-files 192.168.192.200: /Projekty/rsync-navod/cílový-adresář /Projekty/rsync-navod/zdrojový-adresář

Zkušební běh Rsync (Dry Run)

Rsync vám umožňuje zhodnotit nastavení před provedením skutečného přenosu. Suchý běh vám pomůže ověřit správnost nastavení a předejít omylům při aktualizaci nebo mazání souborů.

Pro provedení suchého běhu použijte volbu --dry-run. Přidejte ji do příkazu před určením zdroje a cíle:

sudo rsync -v --dry-run zdrojový-adresář/soubor1 cílový-adresář
#Výstup
sudo rsync -v --dry-run zdrojový-adresář/soubor1 cílový-adresář
soubor1

odesláno 43 bajtů  přijato 19 bajtů  124.00 bajtů/sec
celková velikost je 474  zrychlení je 7.65 (DRY RUN)

Výstup je podobný jako při běžném spuštění, nicméně na konci je uvedena poznámka (DRY RUN).

Nastavení minimální a maximální velikosti souboru

Rsync umožňuje nastavit minimální nebo maximální velikost souboru během přenosu.

Pokud chcete přenášet pouze soubory s minimální velikostí 15 KB, použijte volbu --min-size=15k:

rsync -av --min-size=15k 192.168.192.200: /Projekty/rsync-navod/cílový-adresář /Projekty/rsync-navod/zdrojový-adresář

Tento příkaz zkopíruje pouze soubory, které mají minimální velikost 15 KB. Menší soubory budou ignorovány.

Podobně můžete použít volbu --max-size k nastavení maximální velikosti souboru:

rsync -av --max-size=450k 192.168.192.200: /Projekty/rsync-navod/cílový-adresář /Projekty/rsync-navod/zdrojový-adresář

Zde bude Rsync ignorovat soubory, které mají velikost větší než 450 KB.

Nastavení limitu šířky pásma

Pokud provádíte další operace, které zatěžují šířku pásma, můžete omezit Rsync pro nastavení limitu šířky pásma přenosu. Použijte --bwlimit=KB/s:

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projekty/rsync-navod/cílový-adresář /Projekty/rsync-navod/zdrojový-adresář

Zde jsme nastavili šířku pásma na 100 KB/s během přenosu.

Závěrečná slova

Tím jsme se dostali na konec našeho průvodce příkazy Rsync. Naučili jsme se efektivně používat Rsync a pokryli jsme mnoho užitečných příkazů.

Nicméně, Rsync toho umí mnohem víc, než co jsme zde probrali. Doporučujeme si prostudovat manuálovou stránku Rsync, kde najdete kompletní informace.

Dále se můžete podívat na cheaty pro příkazovou řádku ve Windows, Linux a macOS.