Úvod
Rsync, což je zkratka pro „remote sync“, je nástroj pro synchronizaci vzdálených a místních souborů. Používá algoritmus, který minimalizuje množství kopírovaných dat tím, že přesouvá pouze ty části souborů, které se změnily.
V této příručce se budeme zabývat základním použitím tohoto výkonného nástroje.
Co je Rsync?
Rsync je velmi flexibilní synchronizační nástroj využívající síť. Vzhledem k jeho všudypřítomnosti v systémech Linux a systémech podobných Unixu a jeho popularitě jako nástroje pro systémové skripty je standardně obsažen ve většině distribucí Linuxu.
Základní syntaxe
Základní syntaxe rsync
je velmi jednoduchá a funguje podobně jako ssh, scp a cp.
Vytvoříme dva testovací adresáře a několik testovacích souborů pomocí následujících příkazů:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Máme nyní adresář s názvem dir1
a v něm 100 prázdných souborů.
- ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Máme také prázdný adresář s názvem dir2
.
Chceme-li synchronizovat obsah adresáře dir1
s adresářem dir2
ve stejném systému, zadáme:
- rsync -r dir1/ dir2
Příkaz -r
znamená rekurzivní, což je pro synchronizaci adresářů nezbytné.
Mohli bychom také místo toho použít příznak -a
:
- rsync -a dir1/ dir2
Příznak -a
je kombinovaný příznak. Znamená „archiv“ a synchronizuje rekurzivně a zachovává symbolické odkazy, speciální soubory a soubory zařízení, časy modifikací, skupinu, vlastníka a oprávnění. Používá se častěji než -r
a obvykle ji chcete použít.
Důležitá poznámka
Možná jste si všimli, že na konci prvního argumentu ve výše uvedených příkazech je koncové lomítko (/
):
- rsync -a dir1/ dir2
To je nutné, aby znamenalo „obsah dir1
„. Alternativa bez koncového lomítka by umístila dir1
včetně adresáře do dir2
. Tím by vznikla hierarchie, která by vypadala takto:
- ~/dir2/dir1/
Před spuštěním příkazu rsync vždy překontrolujte argumenty. Rsync poskytuje metodu, jak to provést předáním volby -n
nebo --dry-run
. Příznak -v
(pro verbose) je také nutný pro získání odpovídajícího výstupu:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Porovnejte tento výstup s výstupem, který dostaneme, když odstraníme koncové lomítko:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Vidíte zde, že se přenáší samotný adresář.
Jak použít Rsync k synchronizaci se vzdáleným systémem
Synchronizace se vzdáleným systémem je triviální, pokud máte přístup SSH ke vzdálenému počítači a rsync
nainstalovaný na obou stranách. Jakmile máte ověřený přístup SSH mezi oběma počítači, můžete synchronizovat složku dir1
z dřívějška do vzdáleného počítače pomocí této syntaxe (všimněte si, že v tomto případě chceme přenést skutečný adresář, takže vynecháme koncové lomítko):
- rsync -a ~/dir1 username@remote_host:destination_directory
Tato operace se nazývá „push“, protože přesouvá adresář z místního systému do vzdáleného systému. Opačnou operací je „pull“. Používá se k synchronizaci vzdáleného adresáře do místního systému. Pokud by se dir1
nacházel ve vzdáleném systému místo v našem místním systému, syntaxe by byla:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Stejně jako u cp
a podobných nástrojů je zdroj vždy prvním argumentem a cíl je vždy druhým.
Užitečné volby pro Rsync
Rsync poskytuje mnoho voleb pro změnu výchozího chování nástroje. Některé potřebnější příznaky jsme již probrali.
Přenášíte-li soubory, které ještě nebyly komprimovány, například textové soubory, můžete zkrátit síťový přenos přidáním komprese pomocí volby -z
:
- rsync -az source destination
Velmi užitečný je příznak -P
. Kombinuje příznaky --progress
a --partial
. První z nich poskytuje ukazatel průběhu přenosů a druhý umožňuje obnovit přerušené přenosy:
- rsync -azP source destination
Outputsending 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). . .
Pokud spustíme příkaz znovu, dostaneme kratší výstup, protože nebyly provedeny žádné změny. To ilustruje schopnost příkazu rsync používat časy modifikace k určení, zda byly provedeny změny.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
Můžeme aktualizovat čas modifikace u některých souborů a vidíme, že rsync inteligentně znovu kopíruje pouze změněné soubory:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending incremental file listfile1 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)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .
Aby byly dva adresáře skutečně synchronizovány, je nutné odstranit soubory z cílového adresáře, pokud byly odstraněny ze zdrojového. Ve výchozím nastavení rsync z cílového adresáře nic neodstraňuje.
Toto chování můžeme změnit pomocí volby --delete
. Před použitím této volby použijte volbu --dry-run
a proveďte testování, aby nedošlo ke ztrátě dat:
- rsync -a --delete source destination
Pokud chcete vyloučit určité soubory nebo adresáře umístěné uvnitř synchronizovaného adresáře, můžete tak učinit jejich zadáním do seznamu odděleného čárkou za volbou --exclude=
:
- rsync -a --exclude=pattern_to_exclude source destination
Pokud jsme zadali vzor pro vyloučení, můžeme toto vyloučení zrušit pro soubory, které odpovídají jinému vzoru, pomocí volby --include=
.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Nakonec lze volbu --backup
rsync použít k ukládání záloh důležitých souborů. Používá se ve spojení s volbou --backup-dir
, která určuje adresář, do kterého mají být záložní soubory uloženy.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Závěr
Rsync může zjednodušit přenos souborů přes síťová připojení a přidat robustnost synchronizaci místních adresářů. Díky své flexibilitě je rsync vhodnou volbou pro mnoho různých operací na úrovni souborů.
Zvládnutí rsync umožňuje navrhovat složité operace zálohování a získat jemnou kontrolu nad tím, co a jak se přenáší.