If-Koubou

Vodič za nepristupnik za sinkronizaciju podataka s Rsyncom

Vodič za nepristupnik za sinkronizaciju podataka s Rsyncom (Kako da)

Rsync protokol može biti prilično jednostavan za korištenje za obične backup / sinkronizacijske poslove, no neke od njegovih naprednijih značajki mogu vas iznenaditi. U ovom ćemo članku pokazati kako čak i najveći korisnici podataka i rezervni entuzijasti mogu koristiti rsync kao jedno rješenje za sve svoje potrebe za redundantnim podacima.

Upozorenje: Napredni Geeks samo

Ako sjedite tamo razmišljajući "Što je pakao rsync?" Ili "Koristim samo rsync za vrlo jednostavne zadatke", preporučujemo da pogledate naš prethodni članak o tome kako koristiti rsync za sigurnosno kopiranje podataka na Linuxu, što daje uvod u rsync, vodi vas kroz instalaciju i prikazuje svoje osnovne funkcije. Nakon što čvrsto shvatite kako koristiti rsync (iskreno, to nije tako složeno) i udobni su s Linux terminalom, spremni ste se prebaciti na ovaj napredni vodič.

Pokretanje rsynca u sustavu Windows

Prvo, neka je naš čitač sustava Windows na istoj stranici kao i naš Linux gurui. Iako je rsync izgrađen za rad na Unix-sličnim sustavima, nema razloga da ga ne biste trebali koristiti jednako lako na Windowsu. Cygwin proizvodi divan Linux API koji možemo koristiti za pokretanje rsync-a, pa prijeđite na njihovu web stranicu i preuzmite 32-bitnu ili 64-bitnu verziju, ovisno o računalu.

Instalacija je jednostavna; sve opcije možete zadržati prema zadanim vrijednostima sve dok ne dođete do zaslona "Odabir paketa".

Sada morate učiniti iste korake za Vim i SSH, ali paketi će izgledati malo drugačije kada idete da ih odaberete, pa evo nekoliko snimaka zaslona:

Instaliranje Vima:

Instaliranje SSH:

Nakon što odaberete ta tri paketa, nastavite klikom dok ne dovršite instalaciju. Zatim možete otvoriti Cygwin klikom na ikonu koju instalacijski program stavlja na radnu površinu.

naredbe rsync: Jednostavno do napredno

Sada kada se korisnici sustava Windows nalaze na istoj stranici, pogledajmo jednostavnu naredbu rsync i pokažimo kako upotreba nekih naprednih preklopnika može brzo učiniti složenijom.

Recimo da imate hrpu datoteka koje treba poduprijeti - tko ne ovih dana? Priključite prijenosni tvrdi disk tako da možete sigurnosno kopirati datoteke računala i izdati sljedeću naredbu:

rsync -a / home / geek / files / / mnt / usb / files /

Ili, način na koji će izgledati na Windows računalu s Cygwinom:

rsync -a / cygdrive / c / files / / cygdrive / e / datoteke /

Prilično jednostavna, pa u tom trenutku stvarno nema potrebe za korištenjem rsync, jer biste jednostavno mogli povući i ispustiti datoteke. Međutim, ako vaš drugi tvrdi disk već ima neke datoteke i samo treba ažurirane verzije i datoteke stvorene od zadnje sinkronizacije, ta naredba je praktična jer samo šalje nove podatke na tvrdi disk. S velikim datotekama, a posebno prijenosom datoteka preko interneta, to je velika stvar.

Stvaranje sigurnosnih kopija datoteka na vanjski tvrdi disk, a zatim čuvanje tvrdog diska na istom mjestu na kojem je računalo vrlo loša ideja, pa pogledajmo što bi bilo potrebno da počne slati svoje datoteke preko interneta na drugo računalo ( jedan koji ste unajmili, član obitelji, itd.).

rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

Gornja naredba poslati će vaše datoteke na drugo računalo s IP adresom od 10.1.1.1. Izbrisat će izvanredne datoteke s odredišta koje više ne postoje u izvornom direktoriju, izlazne datoteke prenesene tako da imate ideju o tome što se događa i tunel rsync preko SSH na luka 12345.

-a -v-e -delete sklopke su neke od najosnovnijih i najčešće korištene; već biste trebali znati mnogo o njima ako čitate ovaj vodič. Idemo preko nekih drugih prekidača koji se ponekad zanemaruju, ali nevjerojatno korisni:

--napredak - Ova prekidač nam omogućuje da vidimo napredak prijenosa svake datoteke. To je osobito korisno prilikom prijenosa velikih datoteka preko interneta, ali može proizvesti besmislenu količinu informacija kada prenosi male datoteke na brzu mrežu.

Rsync naredba s --napredak prebaci se kao sigurnosna kopija u tijeku:

--partial - Ovo je još jedan prekidač koji je osobito koristan prilikom prijenosa velikih datoteka preko interneta. Ako se rsync zbog bilo kojeg razloga prekine u sredini prijenosa datoteka, djelomično prenesena datoteka čuva se u odredišnom direktoriju i prijenos se nastavlja na mjestu gdje je prestala nakon ponovnog izvršavanja naredbe rsync. Pri prijenosu velikih datoteka preko interneta (recimo, nekoliko gigabajta), nema ničeg lošije od nekoliko sekundi prekida interneta, plavog zaslona ili ljudske pogreške prilikom prijenosa datoteka i ponovnog pokretanja.

-P - ova sklopka se kombinira --napredak i --partial, pa ga umjesto toga koristite i učinit će vašu naredbu rsync malo neater.

-z ili --oblog - Ovaj prekidač će podatke rsync komprimirati tijekom prijenosa, čime se smanjuje količina podataka koja se mora poslati destinaciji. To je zapravo prilično uobičajeni prekidač, ali je daleko od bitne, samo vam doista korisno za prijenose između sporih veza i ne radi ništa za sljedeće vrste datoteka: 7z, avi, bz2, deb, g, z, iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h ili --human čitljiv - Ako upotrebljavate --napredak prebaciti, svakako ćete htjeti upotrijebiti i ovaj. To jest, osim ako ne želite pretvoriti bajta do megabajta u letu. -h prekidač pretvara sve isporučene brojeve u format koji je čitljiv za ljude, tako da možete imati značenje količine podataka koji se prenose.

-n ili --testno pokretanje - Ovaj prekidač je neophodan da biste znali kada prvi put pišete svoju rsync skriptu i isprobate ga. Provodi probnu vožnju, ali zapravo ne izvršava nikakve promjene - svejedno će se izmjene i dalje izdavati kao i obično, tako da možete čitati sve i uvjerite se da izgleda dobro prije nego što pomičete skriptu u produkciju.

-R ili --relative - Ova se sklopka mora koristiti ako odredišni direktorij već ne postoji. Kasnije ćemo koristiti ovu opciju u ovom vodiču kako bismo napravili direktorije na ciljnom stroju s vremenskim oznakama u nazivima mapa.

--exclude-iz - Ovaj se prekidač koristi za povezivanje s popisom isključivanja koji sadrži putove direktorija koji ne želite podupirati sigurnosnu kopiju. Samo treba običnu tekstualnu datoteku s direktorijem ili datotekom datoteke na svakoj liniji.

--dodajte-iz - Slično --exclude-iz, no povezuje se s datotekom koja sadrži direktorije i datoteke staze podataka koje želite sigurnosno kopirati.

--stats - Nije stvarno važan prekidač na bilo koji način, ali ako ste sysadmin, može biti korisno znati detaljne statistike svake sigurnosne kopije, samo tako da možete pratiti količinu prometa koji se šalje preko vaše mreže i takvih.

--log-datoteka - To vam omogućuje slanje rsync izlaza u datoteku zapisnika. To definitivno preporučujemo za automatizirane sigurnosne kopije u kojima niste tamo sami pročitati izlaz. Datoteke dnevnika uvijek dajte jednom u slobodno vrijeme kako biste bili sigurni da sve radi ispravno. Također, to je ključni prekidač za korištenje sysadmin, tako da se ne ostavljajte pitajući se kako vaše sigurnosne kopije nisu uspjele dok ste napustili pripravnika.

Pogledajmo sada našu naredbu rsync da imamo još nekoliko preklopnika:

rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-iz '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

Naredba je još uvijek prilično jednostavna, ali još uvijek nismo stvorili pristojno rješenje za backup. Iako su naši dosjei sada na dva različita fizička mjesta, ova sigurnosna kopija ništa ne štiti od jednog od glavnih uzroka gubitka podataka: ljudska pogreška.

Snimanje sigurnosnih kopija

Ako slučajno izbrišete datoteku, virus oštećuje bilo koju od vaših datoteka ili se dogodi nešto drugo što znači da su vaše datoteke nepoželjno izmijenjene, a zatim pokrenete skriptu rsync za sigurnosno kopiranje, sigurnosni kopirani podaci prebrisani su s neželjenim promjenama. Kada se takva stvar dogodi (a ne ako, ali kada), vaše sigurnosno rješenje nije učinilo ništa kako bi vas zaštitilo od gubitka podataka.

Stvoritelj rsynca je to shvatio i dodao --backup i --backup-dir argumente kako bi korisnici mogli izvoditi diferencijalne sigurnosne kopije. Prvi primjer na web-mjestu rsync pokazuje skriptu u kojoj se svakih sedam dana provodi potpuna sigurnosna kopija, a zatim se izmjene tih datoteka svakodnevno sigurnosno kopiraju u zasebne direktorije. Problem s ovom metodom je taj da oporavite svoje datoteke, morate ih učinkovito oporaviti sedam različitih vremena. Štoviše, većina geekova izvršava svoje sigurnosne kopije nekoliko puta dnevno, tako da u bilo kojem trenutku možete lako imati 20 + različitih rezervnih direktorija. Ne samo da vam je obnova datoteka sada bol, već čak i gledanje podataka iz sigurnosnih kopija može biti izuzetno dugotrajno - trebali biste znati da je posljednji put izmijenjena datoteka kako bi pronašla najnoviju sigurnosnu kopiju. Povrh svega toga, neučinkovito se pokreće samo tjedno (ili čak rjeđe u nekim slučajevima) inkrementalne sigurnosne kopije.

Snimka sigurnosnih kopija u spašavanje! Snapshot sigurnosne kopije nisu ništa više od inkrementalnih sigurnosnih kopija, ali koriste hardlinks kako bi zadržali strukturu datoteka izvornog izvora. To može biti teško zamotati glavu uokolo, pa pogledajte primjer.

Pretpostavimo da imamo sigurnosnu kopiju skripti koja automatski podržava naše podatke svaka dva sata. Kad god to radi, naziva se svaka kopija u obliku: Backup-month-day-year-time.

Dakle, na koncu tipičan dan, imali bi popis mapa u našem odredišnom imeniku ovako:

Prelaskom bilo kojeg od tih direktorija vidjet ćete svaku datoteku iz izvornog direktorija točno onako kako je bila u to vrijeme. Ipak, ne bi bilo duplikata u bilo kojem od dva direktorija. rsync to postiže uz pomoć hardlinkinga preko --link-dest = DIR argument.

Naravno, da bismo imali lijepo i uredno imenovane imenike, morat ćemo malo podići našu rsync skriptu. Pogledajmo što bi trebalo za postizanje takvog rješenja kao što je ovo, a zatim ćemo detaljnije objasniti skriptu:

#! / Bin / bash

#copy stari time.txt na time2.txt

da | cp ~ / backup / time.txt ~ / backup / time2.txt

#overwrite staru datoteku time.txt s novim vremenom

echo 'date + "% F-% I% p" "> ~ / backup / time.txt

#i datoteku zapisnika

echo ""> ~ / backup / rsync-madeate + "% F-% I% p"

#rsync naredba

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - izbrisati --stats --log-file = ~ / backup / rsync -ouldate + "% F-% I% p ''. log --exclude-iz '~ / exclude.txt' - link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files / 'datum + "% F-% I% p"' /

# nemojte zaboraviti snimiti datoteku zapisnika i staviti ga u sigurnosnu kopiju

scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'kat ~ / backup / time.txt' / rsync-'cat ~ / kopija / time.txt'.log

To bi bila tipična rsync skripta. U slučaju da te negdje izgubimo, neka je slagati po komadu:

Prva linija naše skripte kopira sadržaj time.txt na time2.txt. Da, cijev je potvrditi da želimo prebrisati datoteku. Zatim uzmemo trenutačno vrijeme i stavimo ga u time.txt. Te će datoteke kasnije biti korisne.

Sljedeći red čini datoteku rsync loga, nazvavši ga rsync-date.log (gdje je datum stvarni datum i vrijeme).

Sada, složena naredba rsync koju smo upozoravali:

-avzhPR, -e, --delete, --stats, --log-datoteka, --exclude-from, --link-dest - Samo prekidači o kojima smo ranije razgovarali; pomaknite gore ako vam je potrebna osvježivač.

--chmod = Du = rwx, Dgo = rx, Fu = RW, Fgo = r - To su dopuštenja za odredišni imenik. Budući da izrađujemo ovaj direktorij usred naše rsync skripte, moramo navesti dopuštenja kako bi naš korisnik mogao pisati datoteke.

Upotreba datuma i mačjih naredbi

Prošetat ćemo svaku uporabu naredbi za datum i mačku unutar naredbe rsync, redom kojim se pojavljuju. Napomena: Svjesni smo da postoje i drugi načini za ostvarivanje ove funkcije, osobito s upotrebom deklariranja varijabli, ali u svrhu ovog vodiča odlučili smo se koristiti ovom metodom.

Datoteka zapisnika navedena je kao:

~ / backup / rsync-madeate + "% F-% I% p"

Alternativno, mogli smo je navesti kao:

~ / backup / rsync-'cat ~ / backup / time.txt'.log

Bilo kako bilo, --log-datoteka naredba treba biti u stanju pronaći prethodno stvorenu datiranu datoteku dnevnika i pisati na njemu.

Datoteka odredišne ​​veze navedena je kao:

--link-dest = / home / geek2 / files / 'kat ~ / backup / time2.txt'

To znači da --link-dest naredba se daje direktoriju prethodne sigurnosne kopije. Ako izvodimo sigurnosne kopije svakih dva sata, i to je u 16 sati u vrijeme kada smo pokrenuli ovu skriptu, a zatim --link-dest naredba traži direktorij stvoren u 14:00 i prenosi podatke koji su se promijenili od tada (ako ih ima).

Da biste ponovili, to je razlog zašto time.txt se kopira na time2.txt na početku skripte, pa je --link-dest naredba može kasnije referirati.

Odredišni direktorij naveden je kao:

[email protected]: / home / geek2 / files / 'datum + "% F-% I% p"'

Ova naredba jednostavno stavlja izvorne datoteke u direktorij koji ima naslov trenutnog datuma i vremena.

Konačno, pobrinemo se da kopija dnevne datoteke bude postavljena unutar sigurnosne kopije.

scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'kat ~ / backup / time.txt' / rsync-'cat ~ / kopija / time.txt'.log

Koristimo sigurnosnu kopiju na priključku 12345 da bismo uzeli log dnevnika rsync i stavili ga u odgovarajući direktorij. Da biste odabrali ispravnu datoteku dnevnika i provjerite je li završio na pravom mjestu, datoteku time.txt mora se uputiti preko naredbe mačka. Ako vas se pitate zašto smo se odlučili na mačku time.txt umjesto da koristimo samo naredbu za datum, to je zbog toga što je vrijeme rsync moglo biti potkrijepljeno, tako da imamo pravi trenutak, samo mačka tekstualni dokument koji smo ranije stvorili.

Automatizacija

Upotrijebite Cron na Linuxu ili Task Scheduleru u sustavu Windows za automatizaciju rsync skripte. Jedna stvar koju morate paziti jest osigurati da završite s bilo kojim trenutno pokrenutim rsync procesima prije nastavljanja novog. Čini se da je Task Scheduler zatvorio sve već pokrenute instancije, ali za Linux morat ćete biti malo kreativniji.

Većina Linux distribucija može koristiti naredbu pkill, stoga svakako dodajte sljedeće na početak rsync skripte:

pkill-9 rsync

Šifriranje

Ne, još nismo učinili. Napokon imamo fantastično (i besplatno!) Sigurnosno rješenje, ali sve naše datoteke su još uvijek osjetljive na krađu. Nadam se da podupireš svoje datoteke na neko mjesto stotinama kilometara daleko. Bez obzira koliko je sigurno udaljeno mjesto, krađa i sjeckanje uvijek mogu biti problemi.

U našim primjerima tunelirali smo cijeli naš rsync promet putem SSH, što znači da su sve naše datoteke šifrirane dok su u tranzitu do njihova odredišta. Međutim, moramo osigurati da je odredište jednako sigurno. Imajte na umu da rsync samo šifrira vaše podatke tijekom prijenosa, no datoteke su širom otvorene nakon što dođu do odredišta.

Jedna od najboljih značajki rsynca je ta da samo prenosi promjene u svakoj datoteci. Ako ste sve vaše datoteke šifrirane i napravite jednu manju promjenu, cijela će datoteka morati biti ponovno poslana kao rezultat enkripcije potpuno randomiziranje svih podataka nakon svake promjene.

Zbog toga je najbolje / najlakše koristiti neku vrstu šifriranja diska, kao što su BitLocker za Windows ili dm-crypt za Linux. Na taj način vaši su podaci zaštićeni u slučaju krađe, ali se datoteke mogu prenijeti s rsyncom, a šifriranje neće ometati njegovu izvedbu. Dostupne su druge opcije koje rade slično rsyncu ili čak implementiraju neki njegov oblik, kao što je Duplicity, ali nedostaju neke značajke koje rsync može ponuditi.

Nakon što postavite sigurnosne kopije snimke na lokaciji izvan mjesta i šifrirate svoje izvorne i odredišne ​​tvrde diskove, popustite se na poleđini za svladavanje rsynca i implementaciju najsigurnijeg rješenja za sigurnosno kopiranje podataka.