Kaip optimizuoti duomenų sinchronizavimą naudojant „rsync“
„rsync“ yra universalus įrankis, kuris supaprastina failų perdavimą per tinklo ryšį ir pagreitina vietinių katalogų sinchronizavimą. Dėl didelio lankstumo šis sinchronizavimo įrankis yra puikus pasirinkimas įvairioms operacijoms su failais.
Kas yra rsync?
„rsync“ (trumpinys nuo „remote synchronisation“) – tai lanksti ir su tinklu suderinama sinchronizavimo priemonė, skirta „Linux“ aplinkai. Ši atvirojo kodo programa gali būti naudojama failams ir katalogams sinchronizuoti tarp vietinių sistemų arba per tinklą. Priemonė naudoja diferencinį duomenų perdavimo metodą, kai perduodamos tik tos duomenų dalys, kurios iš tikrųjų buvo pakeistos. Tai sumažina keičiamų duomenų kiekį ir žymiai pagreitina sinchronizavimo procesą. Dėl įvairių parinkčių „rsync“ leidžia tiksliai valdyti sinchronizavimo veikimą. Lanksti sintaksė leidžia atlikti tiek paprastas vietines kopijas, tiek sudėtingas tinklo sinchronizacijas.
Kokia yra „rsync“ sintaksė?
Komandos „rsync“ sintaksė yra paprasta ir panaši į SSH, SCP bei CP sintaksę. Pagrindinė struktūra yra tokia:
rsync [OPTION] source destinationbashŠaltinio kelias, iš kurio turi būti sinchronizuojami duomenys, įvedamas source pozicijoje, o paskirties kelias nurodomas destination pozicijoje. „rsync“ siūlo įvairias parinktis, kurias naudotojai gali pasitelkti, kad sinchronizavimo procesą pritaikytų savo poreikiams. Dažniausiai naudojamos parinktys yra:
-a(archyvai): Išsaugo rekursyvias failų teises, laiko žymes, grupes, savininkus ir specialias failų savybes-v(išsamus): Rodo išsamią informaciją apie sinchronizavimo procesą-r(recursive): sinchronizuoja katalogus ir jų turinį rekursyviai-u(atnaujinimas): Perkelia tik tuos failus, kurie yra naujesni už tuos, kurie jau yra tikslinėje kataloge-z(compress): Sumažina duomenų srautą tinkle-n–itemize-changes: rodo sąrašą pakeitimų, kurie bus atlikti--delete: Ištrina paskirties kataloge esančius failus, kurių šaltinyje jau nebėra--exclude: Iš sinchronizacijos pašalina tam tikrus failus ar katalogus--dry-run: Imituoja sinchronizavimo procesą, faktiškai neperduodant failų--progress: Rodo failų perkėlimo eigą--partial: Jei perkėlimas nutraukiamas, iš dalies perkelti failai lieka tikslinėje kataloge. Atnaujinus perkėlimą, failo perkėlimas tęsiamas nuo paskutinės būsenos
„rsync“ sintaksės pavyzdžiai
Šie „rsync“ sintaksės pavyzdžiai turėtų padėti geriau suprasti, kaip naudojama ši komanda. Šiame kodo pavyzdyje sukuriama katalogas dir1, kuriame yra 100 tuščių bandomųjų failų, ir antrasis tuščias katalogas dir2“:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashdir1 turinį galima sinchronizuoti toje pačioje sistemoje su dir2, naudojant -r parinktį:
$ rsync -r dir1/ dir2bashArba galima pasinaudoti -a parinktimi, kuri sinchronizuoja rekursyviai ir apima simbolines nuorodas, specialiųjų įrenginių failus, pakeitimo laiką, grupes, savininkus ir leidimus:
$ rsync -a dir1/ dir2bashPastaba: Kablelis (/) rsync komandos šaltinio katalogo pabaigoje yra svarbus, nes jis nurodo , kad turi būti sinchronizuotas katalogo turinys, o ne pats katalogas.
$ rsync -a dir1/ dir2bashŠtai pavyzdys, kaip atrodys rezultatas:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashJei šaltinio katalogo pavadinime nėra galinio kablelio, šaltinio katalogas bus nukopijuotas į paskirties katalogą:
$ rsync -a dir1 dir2bashŠtai rezultatas:
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
. . .bashNaudojant kablelį šaltinio katalogo pabaigoje užtikrinama, kad sinchronizavimo procesas vyktų kaip numatyta ir kad šaltinio katalogo turinys būtų perkeltas į tinkamą paskirties katalogą.
Kaip sinchronizuoti „rsync“ su nuotoline sistema
Nuotolinės sistemos sinchronizavimas naudojant „rsync“ paprastai nėra sudėtingas, jei turite SSH prieigą prie nuotolinio kompiuterio ir reikiamą autentifikavimo informaciją. „Rsync“ dažnai naudoja SSH (Secure Shell) saugiam ryšiui su nuotolinėmis sistemomis užtikrinti. Norint naudoti šią priemonę, ji turi būti įdiegta abiejose pusėse.
Jei patvirtinta, kad tarp dviejų kompiuterių veikia SSH ryšys, aplanką dir1 galima sinchronizuoti nuotolinio kompiuterio. Šiuo atveju reikia perkelti patį katalogą, todėl toliau pateiktoje komandoje pabaigos brūkšnys buvo praleistas:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashJei katalogas perkeltas iš vietinės sistemos į nuotolinę sistemą, tai vadinama „push“ operacija. Tuo tarpu, kai nuotolinis katalogas sinchronizuojamas su vietine sistema, tai vadinama „pull“ operacija. Sintaksė yra tokia:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashKokios dar galimybės yra „rsync“?
„rsync“ standartinį veikimą galima toliau pritaikyti naudojant toliau nurodytas parinktis.
Nesuspaustų failų perkėlimas naudojant „rsync“
Tinklo apkrovą perkeliant nesuspaustus failus galima sumažinti naudojant -z parinktį:
$ rsync -az source destinationbashEigos rodymas ir nutrauktų perdavimų tęsimas
Pasirinkus -P, galite sujungti --progress ir --partial parinktis. Tai suteikia galimybę stebėti perdavimo eigą ir tuo pačiu metu atnaujinti nutrauktus perdavimus:
$ rsync -azP source destinationbashŠtai rezultatas:
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)
. . .bashVykdykite komandą dar kartą, kad gautumėte trumpesnį išvesties tekstą. Tai leidžia „rsync“ nustatyti, ar buvo padaryti pakeitimai, remiantis pakeitimų laiku.
$ rsync -azP source destinationbashŠtai rezultatas:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashSinchronizuokite katalogus naudodami „rsync“
Norint užtikrinti, kad du katalogai būtų iš tikrųjų sinchronizuoti, būtina iš tikslinio katalogo pašalinti failus, kurie buvo ištrinti iš šaltinio katalogo. Tačiau „rsync“ automatiškai nepašalina failų iš tikslinio katalogo. Tai galima pakeisti naudojant --delete parinktį. Vis dėlto šią parinktį reikia naudoti atsargiai, nes ji pašalina failus iš tikslinio katalogo, kurių šaltinio kataloge jau nebėra.
Prieš naudodami šią parinktį, turėtumėte pasinaudoti --dry-run parinktimi. Tai leis jums atlikti sinchronizavimo proceso imitavimą neištrinant jokių tikrų failų. Tokiu būdu galėsite užtikrinti, kad bus atlikti tik norimi pakeitimai ir netyčia neprarastumėte svarbių duomenų:
$ rsync -a --delete source destinationbashIšskirti failus ir katalogus iš sinchronizavimo
Naudojant „rsync“, galite pasinaudoti --exclude parinktimi, kad tam tikri failai ir katalogai nebūtų sinchronizuojami. Tai praverčia, jei, pavyzdžiui, nenorite sinchronizuoti laikinių failų, žurnalo failų ar kito turinio.
$ rsync -a --exclude=pattern_to_exclude source destinationbashJei nurodėte failų išskyrimo šabloną, galite pasinaudoti --include= parinktimi, kad pakeistumėte šį išskyrimą tam tikriems failams, kurie atitinka kitą šabloną.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashAtsargines kopijas išsaugokite naudodami „rsync“
--backup parinktis leidžia išsaugoti svarbių failų atsargines kopijas. Ji gali būti naudojama kartu su --backup-dir parinktimi, kad būtų nurodytas katalogas, kuriame turi būti išsaugoti atsarginių kopijų failai:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashIšsamią įvairių atsarginių kopijų kūrimo scenarijų apžvalgą rasite mūsų straipsnyje apie serverių atsarginių kopijų kūrimą naudojant „rsync“.