Kako optimizirati sinhronizacijo podatkov z rsync
rsync je vsestransko orodje, ki poenostavlja prenos datotek prek omrežnih povezav in pospeši sinhronizacijo lokalnih map. Zaradi visoke prilagodljivosti je to sinhronizacijsko orodje odlična izbira za najrazličnejše operacije na ravni datotek.
Kaj je rsync?
rsync, kratica za »remote synchronisation« (daljinska sinhronizacija), je prilagodljivo in omrežno združljivo orodje za sinhronizacijo v sistemu Linux. Ta odprtokodni program se lahko uporablja za sinhronizacijo datotek in map med lokalnimi sistemi ali prek omrežij. Orodje uporablja tehniko diferencialnega prenosa podatkov, pri kateri se prenesejo le tisti deli podatkov, ki so se dejansko spremenili. To zmanjša količino izmenjanih podatkov in znatno pospeši proces sinhronizacije. Zahvaljujoč številnim možnostim rsync omogoča natančno nadzorovanje sinhronizacijskega delovanja. Prilagodljiva sintaksa omogoča tako preprosto lokalno kopiranje kot tudi kompleksne omrežne sinhronizacije.
Kakšna je sintaksa za rsync?
Sintaksa ukazov programa rsync ima preprosto strukturo in je podobna sintaksi ukazov SSH, SCP in CP. Osnovna struktura je naslednja:
rsync [OPTION] source destinationbashPot vira, iz katerega naj se podatki sinhronizirajo, se vnese v source, ciljna pot pa se določi v destination. Program rsync ponuja vrsto možnosti, s katerimi lahko uporabniki prilagodijo postopek sinhronizacije svojim potrebam. Najpogosteje uporabljane možnosti so:
-a(arhivi): ohrani rekurzivne pravice do datotek, časovne oznake, skupine, lastnike in posebne lastnosti datotek-v(podrobno): Prikaže podrobne informacije o procesu sinhronizacije-r(recursive): Sinhronizira imenike in njihovo vsebino rekurzivno-u(posodobitev): prenese samo datoteke, ki so novejše od tistih, ki so že v ciljnem imeniku-z(compress): Zmanjša promet podatkov prek omrežja-n–itemize-changes: Prikaže seznam sprememb, ki bodo izvedene--delete: Iz ciljnega imenika izbriše datoteke, ki v izvorni mapi ne obstajajo več--exclude: Izključi določene datoteke ali imenike iz sinhronizacije--dry-run: Simulira proces sinhronizacije, ne da bi dejansko prenesel datoteke--progress: Prikaže napredek prenosa datotek--partial: Datoteke, ki so bile delno prenesene, ostanejo v ciljnem imeniku, če se prenos prekine. Ko se prenos nadaljuje, se datoteka nadaljuje od zadnjega stanja
Primeri sintakse rsync
Naslednji primeri sintakse ukaza rsync naj bi olajšali razumevanje njegove uporabe. V naslednjem primeru kode se ustvari imenik dir1, ki vsebuje 100 praznih testnih datotek, ter drugi prazen imenik dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashVsebino dir1 je mogoče na istem sistemu sinhronizirati s dir2 z uporabo možnosti -r:
$ rsync -r dir1/ dir2bashDruga možnost je uporaba opcije -a, ki sinhronizira rekurzivno in vključuje simbolične povezave, datoteke posebnih naprav, čase sprememb, skupine, lastnike in pooblastila:
$ rsync -a dir1/ dir2bashOpomba: Poševnica (/) na koncu imena izvorne mape v ukazu rsync je pomembna, saj pomeni , da je treba sinhronizirati vsebino mape, ne pa same mape.
$ rsync -a dir1/ dir2bashTukaj je primer izpisa:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashČe imenik vira nima končnega poševnika, se bo imenik vira kopiral v ciljni imenik:
$ rsync -a dir1 dir2bashTukaj je izpis:
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
. . .bashUporaba poševnice na koncu imena izvorne mape zagotavlja, da sinhronizacija poteka po načrtu in da se vsebina izvorne mape prenese v pravo ciljno mapo.
Kako sinhronizirati rsync z oddaljenim sistemom
Sinhronizacija oddaljenega sistema z rsync-om običajno ni težka, če imate SSH-dostop do oddaljenega računalnika in potrebne podatke za avtentifikacijo. Rsync pogosto uporablja SSH (Secure Shell) za varno komunikacijo z oddaljenimi sistemi. Da bi lahko uporabljali to orodje, mora biti nameščeno na obeh straneh.
Če je dostop prek SSH med obema računalnikoma potrjen, je mogoče mapo dir1 sinhronizirati na oddaljenem računalniku. V tem primeru je treba prenesti dejansko mapo, zato je v naslednjem ukazu izpuščena končna poševnica:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashČe se imenik prenese z lokalnega sistema na oddaljeni sistem, to imenujemo operacija »push«. Nasprotno pa, če se oddaljeni imenik sinhronizira z lokalnim sistemom, to imenujemo operacija »pull«. Sintaksa za to je naslednja:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashKatere druge možnosti ponuja rsync?
Standardno delovanje programa rsync je mogoče dodatno prilagoditi s pomočjo spodaj navedenih možnosti.
Prenos nestisnjenih datotek z rsync
Obremenitev omrežja pri prenosu nestisnjenih datotek je mogoče zmanjšati z uporabo možnosti -z:
$ rsync -az source destinationbashPrikaz napredka in nadaljevanje prekinjenih prenosov
Z -P lahko združite možnosti --progress in --partial. S tem dobite pregled nad potekom prenosov in hkrati lahko nadaljujete prekinjene prenose:
$ rsync -azP source destinationbashTukaj je izpis:
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)
. . .bashPonovno izvedite ukaz, da dobite krajši izpis. Tako lahko rsync na podlagi časa sprememb ugotovi, ali so bile izvedene spremembe.
$ rsync -azP source destinationbashTukaj je izpis:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashSinhronizirajte imenike z rsync
Da bi zagotovili dejansko sinhronizacijo obeh map, je treba v ciljni mapi izbrisati datoteke, ki so bile odstranjene iz izvorne mape. Vendar pa rsync datotek iz ciljne mape ne odstrani samodejno. To je mogoče spremeniti z uporabo opcije --delete. Vendar je pomembno, da to opcijo uporabljate previdno, saj izbriše datoteke v ciljni mapi, ki v izvorni mapi ne obstajajo več.
Preden uporabite to možnost, najprej uporabite možnost --dry-run. To vam bo omogočilo, da izvedete simulacijo sinhronizacijskega postopka, ne da bi pri tem izbrisali kakršne koli dejanske datoteke. Na ta način lahko zagotovite, da se izvedejo le želene spremembe, ne da bi po nesreči izgubili pomembne podatke:
$ rsync -a --delete source destinationbashIzključi datoteke in mape iz sinhronizacije
V programu rsync lahko z uporabo opcije --exclude izključite določene datoteke in mape iz sinhronizacije. To je koristno, če na primer ne želite sinhronizirati začasnih datotek, dnevniških datotek ali druge vsebine.
$ rsync -a --exclude=pattern_to_exclude source destinationbashČe ste določili vzorec za izključitev datotek, lahko z uporabo opcije --include= to izključitev prepisate za določene datoteke, ki ustrezajo drugemu vzorcu.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashShranjevanje varnostnih kopij z rsync
Možnost --backup omogoča shranjevanje varnostnih kopij pomembnih datotek. Uporabite jo lahko skupaj z možnostjo --backup-dir, da določite imenik, v katerega naj se shranijo varnostne kopije:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashPodroben pregled različnih scenarijev varnostnega kopiranja najdete v našem članku o varnostnem kopiranju strežnikov z rsync.