Ako optimalizovať synchronizáciu dát pomocou rsync
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 destinationbashZdrojová 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}bashObsah dir1 možno synchronizovať v tom istom systéme s dir2 pomocou možnosti -r:
$ rsync -r dir1/ dir2bashAlternatí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/ dir2bashPozná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/ dir2bashTu je príklad výstupu:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashAk zdrojový adresár nemá na konci lomítko, zdrojový adresár sa skopíruje do cieľového adresára:
$ rsync -a dir1 dir2bashTu 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
. . .bashPouž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_directorybashAk 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_machinebashAké ď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 destinationbashZobrazenie 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 destinationbashTu 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)
. . .bashZnovu 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 destinationbashTu je výstup:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashSynchronizujte 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 destinationbashVylúč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 destinationbashAk 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 destinationbashUlož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 destinationbashPodrobný prehľad rôznych scenárov zálohovania nájdete v našom článku o zálohovaní serverov pomocou rsync.