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.