Úvod do rsync a jeho praktické využití
rsync je bezplatný nástroj, který se spouští z příkazové řádky a slouží k synchronizaci souborů jak v rámci jednoho počítače, tak i mezi různými zařízeními. Umožňuje efektivní přenos souborů a celých adresářů.
Díky svým vlastnostem je rsync velmi oblíbený při migracích dat, zálohování a zrcadlení. Je neocenitelný pro webmastery a administrátory, kteří pravidelně provádějí přenosy dat.
V tomto článku si podrobně vysvětlíme, jak rsync funguje, a ukážeme si několik praktických příkladů jeho použití.
Jak rsync technicky funguje?
rsync je nástroj pro vzdálenou synchronizaci, který je určen pro operační systémy typu Unix. Umožňuje uživatelům snadno přenášet nebo synchronizovat soubory mezi různými počítači nebo servery.
V jádru rsync pracuje na základě algoritmu delta-transfer. Tento algoritmus spočívá v kopírování pouze rozdílů mezi dvěma soubory na zdrojovém a cílovém umístění. Zdroj i cíl mohou být umístěny lokálně, nebo na vzdálených serverech. Příkaz rsync je schopen provádět kopírování nebo synchronizaci dat dvěma různými způsoby:
- Přes protokoly ssh nebo rsh pro synchronizaci mezi dvěma hostiteli.
- Prostřednictvím rsync TCP démona.
Protože byl navržen pro Unixové systémy, skvěle funguje i na Linuxu.
Proces synchronizace v rsync probíhá následovně:
- Rsync se pomocí SSH připojí ke vzdálenému serveru, kde může být vyžadováno heslo.
- Po připojení rsync komunikuje se zdrojovým umístěním.
- Programy následně identifikují soubory a adresáře, které je třeba synchronizovat. Pro detekci rozdílů se využívá algoritmus delta transfer.
Pokud rsync nenajde na vzdáleném zařízení soubor, který je na hostitelském počítači, tak jej zkopíruje a přenese. V případě již existujících souborů zkopíruje pouze změněné části. Pokud soubor existuje v obou umístěních beze změn, tak jej ignoruje.
Příkaz rsync provádí inkrementální aktualizace tím, že ukládá rozdíly do dočasného souboru před odesláním do cíle.
Před zahájením práce s rsync je nutné:
- Mít práva roota nebo sudo.
- Mít přístup k terminálu nebo příkazové řádce.
- Mít SSH přístup pro bezpečné spouštění rsync příkazů.
- Disponovat dvěma počítači pro testování.
V tomto tutoriálu budeme používat Linux Mint 21.1 Vera. Nicméně, tento návod je aplikovatelný i pro další linuxové distribuce.
Proč preferovat rsync před scp?
scp (secure copy) je běžně používaný protokol pro kopírování souborů z příkazové řádky. Postupuje lineárně, což znamená, že prostě kopíruje soubory ze zdroje do cíle. Pro zabezpečení přenosu využívá SSH.
Základní syntaxe příkazu scp vypadá takto:
scp option SOURCE DESTINATION
Proč byste tedy měli používat rsync místo scp?
Používání rsync má řadu výhod, které zahrnují:
- Rychlejší přenos: rsync je obvykle rychlejší než scp, protože využívá protokol vzdálené aktualizace. Díky tomu přenáší pouze rozdíly, nikoliv celé soubory. To je zvláště výhodné při pravidelné synchronizaci, kdy se první kopie provede celá a následně se přenáší jen změny.
- Snížená spotřeba šířky pásma: Tím, že rsync nekopíruje znovu celé soubory, spotřebovává méně šířky pásma. Navíc používá kompresní algoritmy pro minimalizaci velikosti souborů během přenosu.
- Více možností: rsync nabízí více možností v příkazové řádce než scp, což umožňuje jemnější nastavení.
Závěrem, rsync je skvělý nástroj pro inkrementální synchronizaci. scp je užitečný pro bezpečný přenos souborů. Pro běžné úkoly, kde je vyžadován přímočarý přístup, je scp vhodný. Nicméně, pro opakující se úlohy byste měli používat rsync.
Základní syntaxe příkazu rsync
Základní struktura příkazu rsync je:
rsync OPTION SOURCE DEST
Pojďme si tyto pojmy definovat:
- OPTION – možnosti příkazu rsync.
- SOURCE – zdrojový adresář.
- DEST – cílový adresář.
- USER – uživatelské jméno vzdáleného uživatele.
- HOST – jméno vzdáleného hostitele nebo jeho IP adresa.
Možnosti (options) jsou parametry, které rozšiřují funkcionalitu příkazu. Například, můžete rekurzivně synchronizovat data pomocí volby `-r`. Nicméně, volba `-r` nesynchronizuje vlastnictví skupin a uživatelů, časové značky, oprávnění nebo symbolické odkazy. Proto je doporučeno používat volbu `-a`, která spustí rsync v archivním režimu a zachová všechna vlastnictví, oprávnění a symbolické odkazy souborů.
Mezi další užitečné volby rsync patří:
- `-z`: komprimuje data pro úsporu místa.
- `-h`: poskytuje výstup v lidsky čitelném formátu.
- `-b`: provede zálohu během synchronizace dat.
- `-e`: používá protokol SSH pro vzdálené přenosy dat.
- `–progress`: zobrazuje průběh synchronizace dat.
- `-v`: požaduje podrobný výstup.
- `-n`: provede testovací běh pro ověření nastavení synchronizace.
- `-q`: potlačí výstup a volby příkazu rsync.
Instalace rsync
Ve většině Unixových a Linuxových systémů je rsync již předinstalován. Pokud váš systém rsync nemá, můžete jej nainstalovat pomocí následujících příkazů.
Pro Debian, Ubuntu a Mint:
sudo apt-get install rsync
Pro Arch Linux:
pacman -S rsync
Pro Gentoo:
emerge sys-apps/rsync
Pro CentOS, Fedora a REHL:
sudo yum install rsync
Pro openSUSE:
sudo zypper install rsync
Protože používáme Linux Mint, rsync je již předinstalován. Můžete spustit příkaz `rsync` v terminálu, a pokud je nainstalovaný, zobrazí se jeho možnosti a další informace.
$ rsync 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ívejme na praktické využití rsync.
Pro tento tutoriál vytvoříme dva adresáře:
- zdrojový-adresář
- cílový-adresář
To provedete pomocí následujících příkazů:
mkdir zdrojový-adresář mkdir cílový-adresář
Pro otestování funkce rsync je potřeba vytvořit soubory. Použijte níže uvedený příkaz pro vytvoření testovacích souborů:
touch zdrojový-adresář/soubor{1..100}
Tím se ve zdrojovém adresáři vytvoří 100 prázdných souborů. Můžete si to ověřit pomocí příkazu níže:
ls zdrojový-adresář Výstup: cílový-adresář zdrojový-adresář $ touch zdrojový-adresář/soubor{1..100} $ 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
Poznámka: cílový adresář je prozatím prázdný.
Rekurzivní lokální kopírování adresářů
Přestože je rsync primárně určen pro kopírování mezi lokálním a vzdáleným serverem, je stejně efektivní pro lokální kopírování souborů.
V tomto případě použijeme syntaxi rsync:
rsync option ZDROJ CÍL
Pro zkopírování souborů ze zdrojového do cílového adresáře, spusťte tento příkaz:
rsync -r zdrojový-adresář/ cílový-adresář
Tento příkaz rekurzivně zkopíruje veškerý obsah zdrojového adresáře do cílového.
$ 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 způsobem se zkopíruje každý soubor ze zdrojového adresáře do cílového.
Kopírování jednoho souboru lokálně
Nyní, když víme, jak synchronizovat dva adresáře, se podíváme na kopírování jednoho souboru.
Pro tento účel upravíme prázdný soubor `soubor1` ve zdrojovém adresáři a následně jej synchronizujeme do cílového adresáře.
Pro editaci souboru, použijte následující příkaz:
nano zdrojový-adresář/soubor1
Nyní do nano editoru vložte následující text:
Aktualizujeme soubor1 ve zdrojovém-adresáři. Po aktualizaci přeneseme novou verzi do cílového-adresáře. rsync nepotřebuje znovu kopírovat celý soubor díky algoritmu delta-transfer. Tento algoritmus kontroluje rozdíly a aktualizuje cílové soubory. Pokud soubor1 uložíte ve zdrojovém adresáři a otevřete v cílovém, uvidíte, že je prázdný. Nicméně, pokud se podíváte po spuštění rsync, uvidíte, že soubor1 v cílovém adresáři je aktualizován.
Po přidání obsahu soubor uložte a zavřete.
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 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80
Jak jste si mohli všimnout, použili jsme možnost `–existing`. Tímto se aktualizují stávající soubory. Pokud příkaz spustíte bez `–existing`, soubor se neaktualizuje, i když příkaz proběhne bez chyby.
Pokud soubor, který chcete kopírovat, v cílovém adresáři neexistuje, musíte spustit následující příkaz:
rsync -v zdrojový-adresář/novýsoubor cílový-adresář
Výstup: $ rsync -v zdrojový-adresář/novýsoubor cílový-adresář novýsoubor sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
Kopírování více souborů
Pro kopírování více souborů musíte uvést zdrojové cesty obou souborů následované cílovým adresářem.
Pro tento účel vytvoříme dva nové soubory `novýsoubor2` a `novýsoubor3` v zdrojovém adresáři. To provedete pomocí následujícího příkazu:
touch zdrojový-adresář/novýsoubor{2..3}
Nyní použijte tento příkaz pro synchronizaci více souborů:
rsync -v zdrojový-adresář/novýsoubor2 zdrojový-adresář/novýsoubor3 cílový-adresář
Výstup: $ rsync -v zdrojový-adresář/novýsoubor2 zdrojový-adresář/novýsoubor3 cílový-adresář novýsoubor2 novýsoubor3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00
Kopírování souboru nebo adresáře z lokálního na vzdálený server
Syntaxe rsync pro přenos z lokálního na vzdálený server je následující:
rsync option ZDROJ [email protected]:CÍL
Pro tento příkaz budete potřebovat IP adresu vzdáleného počítače. Můžete také přidat IP adresu ke zdrojovému souboru.
rsync -av /Projekty/rsync-tutoriál/zdrojový-adresář 192.168.192.200: /Projekty/rsync-tutoriál/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 serveru jiný, musíte uvést jeho jméno před IP adresou oddělené znakem `@`.
rsync -av /Projekty/rsync-tutoriál/zdrojový-adresář [email protected]: /Projekty/rsync-tutoriál/cílový-adresář
Pro kopírování více souborů nebo adresářů je nutné uvést seznam cest k souborům či adresářům. Syntax je následující:
rsync -av /Projekty/rsync-tutoriál/zdrojový-adresář/novýsoubor1 /Projekty/rsync-tutoriál/zdrojový-adresář/novýsoubor2 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář
Specifické protokoly pro vzdálený přenos
rsync umožňuje nastavit specifické protokoly pro přenos souborů. Toho docílíte použitím volby `-e` a následně jména protokolu.
Pro využití protokolu ssh je nutné přidat do příkazu rsync `-e ssh`.
rsync -e ssh /Projekty/rsync-tutoriál/zdrojový-adresář 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář
Kopírování souboru nebo adresáře ze vzdáleného na lokální server
Syntaxe rsync pro přenos ze vzdáleného na lokální server vypadá takto:
rsync option [email protected]:ZDROJ CÍL
Funguje to jako požadavek pro stahování. Chcete-li stáhnout soubory nebo adresáře ze vzdáleného serveru na lokální počítač, musíte spustit následující příkaz:
rsync -av 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář /Projekty/rsync-tutoriál/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 na vašem počítači.
Stejně tak můžete stáhnout i konkrétní soubor, pokud určíte jeho celou cestu.
rsync -av 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář/novýsoubor4 /Projekty/rsync-tutoriál/zdrojový-adresář
Pro zkopírování více souborů nebo adresářů ze vzdáleného na lokální server, zadejte cesty ve složených závorkách, oddělené čárkou, za IP adresou serveru:
rsync -av 192.168.192.200: {/Projekty/rsync-tutoriál/cílový-adresář/, /home/hudba/2023-hudba} /Projekty/rsync-tutoriál/zdrojový-adresář
Podobně můžete uvést i soubory.
Zobrazení průběhu přenosu
Při přenosu větších dat je užitečné sledovat průběh. K tomu použijte parametr `–progress`. Přidejte jej do příkazu rsync, a uvidíte rychlost přenosu, zbývající čas a objem přenesených dat.
rsync -av --progress 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář /Projekty/rsync-tutoriál/zdrojový-adresář
Odstranění zdrojových souborů po dokončení přenosu
Pro odstranění zdrojových souborů po dokončení přenosu použijte volbu `–remove-source-files`. Může to být užitečné v různých situacích, například pokud chcete zabezpečit soubory bez zanechání stopy nebo uvolnit místo.
rsync -av --remove-source-files 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář /Projekty/rsync-tutoriál/zdrojový-adresář
Testovací běh rsync
Rsync umožňuje vyhodnocení příkazu před jeho spuštěním. Tato volba testovacího běhu (dry run) vám umožní zjistit, zda provádíte správné kroky, a zabrání nechtěným aktualizacím nebo smazání dat.
Pro spuštění testovacího běhu použijte volbu `–dry-run`. Přidejte ji do příkazu rsync následovanou zdrojem a cílem.
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 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN)
Výstup je podobný jako při normálním spuštění, avšak na konci výstupu je uvedeno `(DRY RUN)`.
Nastavení minimální a maximální velikosti souboru
Rsync umožňuje nastavit minimální nebo maximální velikost souboru pro přenos.
Pokud chcete přenášet soubory s minimální velikostí 15 KB, použijte `–min-size=15k`.
rsync -av --min-size=15k 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář /Projekty/rsync-tutoriál/zdrojový-adresář
Příkaz zkopíruje pouze soubory o velikosti minimálně 15 KB. Menší soubory budou ignorovány.
Stejně tak můžete použít volbu `–max-size` pro nastavení maximální velikosti souborů.
rsync -av --max-size=450k 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář /Projekty/rsync-tutoriál/zdrojový-adresář
V tomto případě rsync ignoruje soubory větší než 450 KB.
Nastavení omezení šířky pásma
Pokud provádíte jiné operace náročné na šířku pásma, můžete omezit šířku pásma pro přenos pomocí rsync. Pro tento účel použijte `–bwlimit=KB/s`.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projekty/rsync-tutoriál/cílový-adresář /Projekty/rsync-tutoriál/zdrojový-adresář
Zde jsme nastavili šířku pásma pro přenos na 100 KB/s.
Závěr
Tímto se dostáváme na konec tohoto průvodce pro příkazy rsync. Naučili jsme se efektivně používat rsync a pokryli jsme mnoho příkazů.
Nicméně, rsync nabízí ještě více funkcí. Doporučujeme vám prostudovat manuálovou stránku rsync, kde najdete podrobné informace.
Dále se podívejte na zkratky příkazové řádky pro Windows, Linux a macOS.