Jak používat Rsync k synchronizaci místních a vzdálených adresářů

Ú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 rsyncje 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
Output
file1 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
Output
sending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .

Porovnejte tento výstup s výstupem, který dostaneme, když odstraníme koncové lomítko:

  • rsync -anv dir1 dir2
Output
sending 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
Output
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). . .

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
Output
sending 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
Output
sending 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áší.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.