rsync je univerzálny nástroj, ktorý zjednodušuje prenos súborov cez sieťové pripojenia a urýchľuje synchronizáciu lokálnych adresárov. Vysoká flexibilita robí z tohto synchronizačného nástroja vynikajúcu voľbu pre rôzne operácie na úrovni súborov.

Čo je rsync?

rsync, skratka pre „remote synchronisation“ (diaľková synchronizácia), je flexibilný a sieťovo kompatibilný synchronizačný nástroj v systéme Linux. Tento open-source program sa dá použiť na synchronizáciu súborov a adresárov medzi lokálnymi systémami alebo cez siete. Nástroj používa techniku diferenciálneho prenosu dát, pri ktorej sa prenášajú len tie časti dát, ktoré sa skutočne zmenili. Tým sa minimalizuje množstvo vymieňaných dát a výrazne sa urýchli proces synchronizácie. Vďaka rôznym možnostiam umožňuje rsync presné ovládanie synchronizačného správania. Flexibilná syntax umožňuje jednoduché lokálne kopírovanie aj komplexnú sieťovú synchronizáciu.

Aká je syntax pre rsync?

Syntax príkazov rsync má jednoduchú štruktúru a je podobná syntaxe SSH, SCP a CP. Základná štruktúra je nasledovná:

rsync [OPTION] source destination
bash

Zdrojová cesta, z ktorej sa majú synchronizovať dáta, sa zadáva v source, zatiaľ čo cieľová cesta sa zadáva v destination. rsync ponúka celý rad možností, ktoré používatelia môžu využiť na prispôsobenie procesu synchronizácie svojim požiadavkám. Najčastejšie používané možnosti sú:

  • -a (archívy): Zachováva rekurzívne oprávnenia súborov, časové značky, skupiny, vlastníkov a špeciálne vlastnosti súborov
  • -v (verbose): Zobrazuje podrobné informácie o procese synchronizácie
  • -r (recursive): Synchronizuje adresáre a ich obsah rekurzívne
  • -u (update): Prenáša iba súbory, ktoré sú novšie ako súbory už nachádzajúce sa v cieľovom adresári
  • -z (compress): Znižuje dátový tok v sieti
  • -n –itemize-changes: Zobrazí zoznam zmien, ktoré sa majú vykonať
  • --delete: Odstráni súbory v cieľovom adresári, ktoré už neexistujú v zdrojovom adresári
  • --exclude: Vylúči určité súbory alebo adresáre zo synchronizácie
  • --dry-run: Simuluje proces synchronizácie bez skutočného prenosu súborov
  • --progress: Zobrazuje priebeh prenosu súborov
  • --partial: Súbory, ktoré boli čiastočne prenesené, zostávajú v cieľovom adresári, ak je prenos prerušený. Keď je prenos obnovený, súbor pokračuje od posledného stavu

Príklady syntaxe rsync

Nasledujúce príklady syntaxe rsync by mali uľahčiť pochopenie toho, ako sa tento príkaz používa. Nasledujúci príklad kódu vytvorí adresár dir1 obsahujúci 100 prázdnych testovacích súborov a druhý prázdny adresár dir2:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Obsah dir1 možno synchronizovať v tom istom systéme s dir2 pomocou možnosti -r:

$ rsync -r dir1/ dir2
bash

Alternatívne je možné použiť voľbu -a, ktorá synchronizuje rekurzívne a obsahuje symbolické odkazy, špeciálne súbory zariadení, časy úprav, skupiny, vlastníkov a oprávnenia:

$ rsync -a dir1/ dir2
bash

Poznámka: Lomená čiarka (/) na konci zdrojového adresára v príkaze rsync je dôležitá , pretože označuje , že synchronizovaný má byť obsah adresára, nie samotný adresár.

$ rsync -a dir1/ dir2
bash

Tu je príklad výstupu:

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Ak zdrojový adresár nemá na konci lomítko, zdrojový adresár sa skopíruje do cieľového adresára:

$ rsync -a dir1 dir2
bash

Tu je výstup:

sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

Použitie lomítka na konci zdrojového adresára zaručuje, že proces synchronizácie prebehne podľa očakávania a že obsah zdrojového adresára sa dostane do správneho cieľového adresára.

Ako synchronizovať rsync so vzdialeným systémom

Synchronizácia vzdialeného systému pomocou rsync zvyčajne nie je náročná, pokiaľ máte prístup SSH k vzdialenému počítaču a potrebné autentifikačné údaje. Rsync často používa SSH (Secure Shell) na zabezpečenie komunikácie so vzdialenými systémami. Na používanie tohto nástroja je potrebné ho nainštalovať na oboch stranách.

Ak je overený prístup SSH medzi oboma počítačmi, priečinok dir1 je možné synchronizovať na vzdialenom počítači. V tomto prípade je potrebné preniesť skutočný adresár, preto bola v nasledujúcom príkaze vynechaná koncová lomítka:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Ak sa adresár presunie z lokálneho systému do vzdialeného systému, hovoríme o operácii push. Naopak, keď sa vzdialený adresár synchronizuje s lokálnym systémom, hovoríme o operácii pull. Syntax pre túto operáciu je nasledovná:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash

Aké ďalšie možnosti ponúka rsync?

Štandardné správanie rsync je možné ďalej prispôsobiť pomocou nižšie uvedených možností.

Prenos nekomprimovaných súborov pomocou rsync

Zaťaženie siete pri prenose nekomprimovaných súborov je možné znížiť pomocou možnosti -z:

$ rsync -az source destination
bash

Zobrazenie priebehu a obnovenie prerušených prenosov

S -P môžete kombinovať možnosti --progress a --partial. Tým získate prehľad o priebehu prenosov a zároveň môžete obnoviť prerušené prenosy:

$ rsync -azP source destination
bash

Tu je výstup:

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)
. . .
bash

Znovu vykonajte príkaz, aby ste získali kratší výstup. To umožňuje rsync určiť, či boli vykonané zmeny na základe času zmien.

$ rsync -azP source destination
bash

Tu je výstup:

sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Synchronizujte adresáre pomocou rsync

Aby sa zabezpečilo, že dva adresáre sú skutočne synchronizované, je potrebné odstrániť súbory, ktoré boli odstránené zo zdrojového adresára v cieľovom adresári. Ale rsync neodstraňuje súbory z cieľového adresára automaticky. Toto sa dá zmeniť pomocou možnosti --delete. Je však dôležité používať túto možnosť opatrne, pretože odstraňuje súbory v cieľovom adresári, ktoré už neexistujú v zdrojovom adresári.

Pred použitím tejto možnosti by ste mali použiť možnosť --dry-run. Týmto spôsobom môžete vykonať simuláciu synchronizačného procesu bez vymazania akýchkoľvek skutočných súborov. Takto sa môžete uistiť, že sa vykonajú len požadované zmeny bez náhodnej straty dôležitých údajov:

$ rsync -a --delete source destination
bash

Vylúčiť súbory a adresáre zo synchronizácie

V programe rsync môžete použiť možnosť --exclude na vylúčenie určitých súborov a adresárov zo synchronizácie. To je užitočné napríklad v prípade, že nechcete synchronizovať dočasné súbory, súbory protokolov alebo iný obsah.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Ak ste zadali vzor na vylúčenie súborov, môžete použiť možnosť --include= na prepísanie tohto vylúčenia pre určité súbory, ktoré zodpovedajú inému vzoru.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Uložte zálohy pomocou rsync

Možnosť --backup vám umožňuje ukladať zálohy dôležitých súborov. Môže sa použiť v kombinácii s možnosťou --backup-dir na určenie adresára, kde sa majú záložné súbory ukladať:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Podrobný prehľad rôznych scenárov zálohovania nájdete v našom článku o zálohovaní serverov pomocou rsync.

Prejsť na hlavné menu