Ghidul non-începător pentru sincronizarea datelor cu Rsync
Protocolul rsync poate fi destul de simplu de utilizat pentru lucrările obișnuite de backup / sincronizare, dar unele dintre caracteristicile sale mai avansate vă pot surprinde. În acest articol, vom arăta că chiar și cei mai mari ascultători de date și entuziaști de rezervă pot folosi rsync ca o singură soluție pentru toate nevoile lor de redundanță a datelor.
Atenție: Doar avansați geeks
Dacă stați acolo gândindu-vă "Ce naiba este rsync?" Sau "Eu folosesc rsync doar pentru sarcini foarte simple", poate doriți să verificați articolul nostru anterior despre cum să utilizați rsync pentru a vă salva datele pe Linux, o introducere la rsync, vă ghidează prin instalare și vă prezintă funcțiile mai de bază. Odată ce aveți o înțelegere fermă cu privire la modul de utilizare a rsync (sincer, nu este atât de complex) și sunteți confortabil cu un terminal Linux, sunteți gata să treceți la acest ghid avansat.
Executarea rsync pe Windows
În primul rând, să luăm cititorii Windows pe aceeași pagină cu guru-ul nostru Linux. Deși rsync este construit pentru a funcționa pe sisteme asemănătoare Unix, nu există niciun motiv că nu ar trebui să îl puteți utiliza la fel de ușor pe Windows. Cygwin produce un minunat API Linux pe care îl putem folosi pentru a rula rsync, deci mergeți pe site-ul lor și descărcați versiunea pe 32 de biți sau pe 64 de biți, în funcție de computer.
Instalarea este simplă; puteți păstra toate opțiunile la valorile lor implicite până când ajungeți la ecranul "Selectați pachetele".
Acum trebuie să faceți aceleași pași pentru Vim și SSH, dar pachetele vor arăta puțin diferite atunci când le alegeți, deci iată câteva screenshot-uri:
Instalarea Vim:
Instalarea SSH:
După ce ați selectat cele trei pachete, continuați să faceți clic pe Următorul până când finalizați instalarea. Apoi puteți deschide Cygwin făcând clic pe pictograma instalată de instalator pe desktop.
Comenzi rsync: Simplu la Avansat
Acum că utilizatorii de Windows sunt pe aceeași pagină, să aruncăm o privire la o comandă rsync simplă și să arătăm cum utilizarea unor comutatoare avansate poate face rapid complexitatea.
Să presupunem că aveți o grămadă de fișiere care au nevoie de asistență - cine nu face aceste zile? Conectați hard diskul portabil astfel încât să vă puteți copia fișierele de computere și să emiteți următoarea comandă:
rsync -a / home / geek / fișiere / / mnt / usb / fișiere /
Sau, modul în care ar arăta pe un computer Windows cu Cygwin:
rsync -a / cygdrive / c / fișiere / / cygdrive / e / fișiere /
Destul de simplu, și în acest moment nu este cu adevărat nevoie să utilizați rsync, deoarece puteți să trageți și să aruncați fișierele. Cu toate acestea, dacă celălalt hard disk are deja unele dintre fișiere și are nevoie doar de versiunile actualizate plus fișierele create de la ultima sincronizare, această comandă este utilă, deoarece trimite doar datele noi pe hard disk. Cu fișiere mari și, mai ales, transferul de fișiere pe internet, este un lucru important.
Copierea de rezervă a fișierelor pe un hard disk extern și apoi păstrarea unității hard disk în aceeași locație ca și calculatorul dvs. este o idee foarte proastă, așa că haideți să aruncăm o privire la ceea ce ar fi nevoie pentru a începe să trimiteți fișierele pe internet pe alt computer ( unul pe care l-ați închiriat, un membru al familiei etc.).
rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 /
Comanda de mai sus va trimite fișierele dvs. unui alt computer cu o adresă IP de 10.1.1.1. S-ar șterge fișierele străine de la destinația care nu mai există în directorul sursă, ieșind numele de fișiere transferate astfel încât să aveți o idee despre ce se întâmplă și să roncalizați tunelul prin SSH pe portul 12345.
-a -v -e - îndepărtează
comutatoarele sunt unele dintre cele mai de bază și utilizate în mod obișnuit; ar trebui să știți deja o afacere bună despre ele dacă citiți acest tutorial. Să trecem peste niște switch-uri care sunt uneori ignorate, dar utile:
--progres
- Acest comutator ne permite să vedem progresul transferului fiecărui fișier. Este deosebit de util atunci când se transferă fișiere mari pe Internet, dar poate genera o cantitate nelimitată de informații atunci când transferă doar fișiere mici printr-o rețea rapidă.
O comandă rsync cu --progres
comutați ca o copie de siguranță este în curs de desfășurare:
--parțial
- Acesta este un alt switch care este util în special atunci când transferați fișiere mari pe Internet. Dacă rsync este întrerupt, din orice motiv, în mijlocul unui transfer de fișiere, fișierul parțial transferat este păstrat în directorul de destinație și transferul este reluat unde acesta a rămas după ce comanda rsync este executată din nou. Atunci când transferați fișiere mari pe Internet (de exemplu, câteva gigabyte), nu este nimic mai rău decât o întrerupere de câteva secunde pe Internet, un ecran albastru sau o eroare umană care să treacă prin transferul de fișiere și să treacă din nou peste tot.
-P
- acest comutator combină --progres
și --parțial
, astfel încât să-l utilizați în schimb și aceasta va face rsync comanda dvs. un pic mai curat.
-z
sau --comprima
- Acest comutator va face rsync comprimarea datelor fișierelor ca fiind transferate, reducând cantitatea de date care trebuie trimise la destinație. Este de fapt un comutator destul de comun, dar este departe de a fi esențial, doar într-adevăr te-a beneficiat de transferuri între conexiunile lente și nu face nimic pentru următoarele tipuri de fișiere: 7z, avi, bz2, deb, g, z iso, jpeg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h
sau --uman poate fi citit
- Dacă utilizați --progres
switch, veți dori cu siguranță să utilizați și aceasta. Aceasta este, dacă nu doriți să convertiți octeți în megaocteți în zbor. -h
comutatorul convertește toate numerele afișate în format uman, astfel încât să puteți înțelege cantitatea de date transferate.
-n
sau --uscat-run
- Acest comutator este esențial pentru a ști când scrieți pentru prima dată scriptul rsync și îl testați. Ea efectuează o încercare de funcționare, dar nu efectuează nici o schimbare - modificările care ar putea fi emise sunt în continuare normale, astfel încât să puteți citi totul și să vă asigurați că arată bine înainte de a vă lansa scenariul în producție.
-R
sau --rudă
- Acest comutator trebuie utilizat dacă directorul destinație nu există deja. Vom folosi această opțiune mai târziu în acest ghid, astfel încât să putem face directoare pe mașina țintă cu timestamps în numele dosarelor.
--exclude de la-
- Acest comutator este utilizat pentru a face legătura cu o listă de excluderi care conține căi de directoare pe care nu doriți să le copiați. Este nevoie doar de un fișier text simplu, cu un director sau o cale de fișier pe fiecare linie.
--includ de la
- Similar cu --exclude de la-
, dar se leagă de un fișier care conține directoare și căi de fișiere ale datelor pe care doriți să le copiați.
--statistici
- Nu este într-adevăr un comutator important, dar dacă sunteți un sysadmin, poate fi util să cunoașteți statisticile detaliate ale fiecărei copii de rezervă, astfel încât să puteți monitoriza cantitatea de trafic trimisă în rețeaua dvs. și astfel.
--fișier jurnal
- Aceasta vă permite să trimiteți ieșirea rsync la un fișier jurnal. Vă recomandăm cu siguranță acest lucru pentru backup-urile automate în care nu sunteți acolo pentru a citi singur ieșirea. Acordați întotdeauna fișierelor de jurnal o dată în timpul liber pentru a vă asigura că totul funcționează corect. De asemenea, este un switch esențial pentru utilizarea unui sistem sysadmin, astfel încât să nu vă lăsați să vă întrebați cum s-au făcut backup-urile în timp ce ați părăsit responsabilul intern.
Să aruncăm o privire la comanda noastră rsync acum că avem mai multe comutatoare adăugate:
rsync -avzhP -delete -stats --log-file = / home / geek / rsynclogs / backup.log - exclude-din '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / fișiere /
Comanda este încă destul de simplă, dar încă nu am creat o soluție decentă de salvare. Chiar dacă fișierele noastre se află acum în două locații fizice diferite, această copie de siguranță nu face nimic pentru a ne proteja de una din principalele cauze ale pierderii de date: eroarea umană.
Soluții de rezervă instantanee
Dacă ștergeți accidental un fișier, un virus corupe oricare dintre fișierele dvs. sau se întâmplă altceva în care fișierele dvs. sunt modificate nedorite și apoi executați scriptul de backup rsync, datele dvs. de rezervă sunt suprascrise cu modificările nedorite. Când apare un astfel de lucru (nu dacă, dar când), soluția dvs. de rezervă nu a făcut nimic pentru a vă proteja de pierderea de date.
Creatorul rsync a realizat acest lucru și a adăugat --copie de rezervă
și --de backup-dir
astfel încât utilizatorii ar putea rula copii de rezervă diferențiale. Primul exemplu de pe site-ul rsync arată un script în care se execută o copie de rezervă completă la fiecare șapte zile, iar apoi modificările la acele fișiere sunt realizate zilnic în directoare separate. Problema cu această metodă este că pentru a recupera fișierele dvs., trebuie să le recuperați efectiv șapte ori diferite. Mai mult decât atât, cei mai mulți geeks rulează backup-urile de mai multe ori pe zi, astfel încât să puteți avea cu ușurință 20 sau mai multe directoare de rezervă diferite la un moment dat. Nu numai că recuperarea fișierelor dvs. este acum o durere, dar chiar dacă vă uitați prin datele dvs. de rezervă poate fi extrem de consumatoare de timp - trebuie să știți ultima dată când un fișier a fost modificat pentru a găsi cea mai recentă copie de rezervă. Pe lângă toate acestea, este ineficient să rulați backupuri incrementale săptămânal (sau chiar mai puțin deseori în unele cazuri).
Rezervele instantanee pentru salvare! Rezoluțiile instantanee nu reprezintă decât backupuri incrementale, dar utilizează hardlink-uri pentru a păstra structura de fișiere a sursei originale. Ar putea fi dificil să vă înfășurați capul la început, deci să aruncăm o privire la un exemplu.
Pretindeți că avem un script de salvare de rezervă care rulează automat datele noastre la fiecare două ore. Ori de câte ori rsync face acest lucru, el numește fiecare copie de siguranță în formatul: Backup-month-day-year-time.
Deci, la sfârșitul unei zile obișnuite, vom avea o listă de directoare în directorul nostru de destinație, astfel:
Când traversați oricare dintre aceste directoare, ați vedea fiecare fișier din directorul sursă exact așa cum era la acel moment. Cu toate acestea, nu ar exista duplicate în nici un fel de două directoare. rsync realizează acest lucru cu ajutorul hardlinking prin --link-dest = DIR
argument.
Bineînțeles, pentru a avea aceste nume de directoare cu nume frumos și frumos, va trebui să transformăm puțin scriptul nostru rsync. Să aruncăm o privire asupra a ceea ce ar fi nevoie pentru a realiza o soluție de rezervă ca aceasta, și apoi vom explica scenariul în detaliu:
#! / Bin / bash
#copy old time.txt la time2.txt
da | cp ~ / backup / time.txt ~ / backup / time2.txt
#overwrite fișierul time.txt vechi cu noul timp
echo "data +"% F-% I% p "'> ~ / backup / time.txt
#make fișierul jurnal
echo ""> ~ / backup / rsync-getate "% F-% I% p" '
#rsync comanda
rsync -avzhPR -chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = p "" log -exclude-de la '~ / exclude.txt' - link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / fișiere / 'data +'% F-% I% p '
# nu uitați să scrap fișierul jurnal și pune-l cu copia de rezervă
scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / fișiere / 'cat ~ / backup / time.txt' / rsync -cat ~ / backup / time.txt'.log
Acesta ar fi un script tipic snapshot rsync. În cazul în care v-am pierdut undeva, să-l disecăm cu bucățică:
Prima linie a scriptului nostru copiază conținutul time.txt în time2.txt. Conducta da este pentru a confirma că vrem să suprascriem fișierul. Apoi, luăm timpul curent și îl punem în timp.txt. Aceste fișiere vor fi utile mai târziu.
Următoarea linie face fișierul jurnal rsync, numindu-l rsync-date.log (unde data este data și ora efectivă).
Acum, comanda complexă rsync la care v-am avertizat:
-avzhPR, -e, --delete, --stats, --log-file, --exclude -de, --link-dest
- Doar switch-urile despre care am vorbit mai devreme; derulați în sus dacă aveți nevoie de o reîmprospătare.
--chmod = Du = rwx, Dgo = rx, Fu = rw, FGÖ = r
- Acestea sunt permisiunile pentru directorul de destinație. Deoarece facem acest director în mijlocul scriptului nostru rsync, trebuie să specificăm permisiunile astfel încât utilizatorul să poată scrie fișiere în el.
Folosirea comenzilor de dată și pisică
Vom trece peste fiecare utilizare a comenzilor de dată și pisică în interiorul comenzii rsync, în ordinea în care acestea apar. Notă: suntem conștienți de faptul că există alte modalități de a realiza această funcționalitate, mai ales în cazul utilizării variabilelor de declarare, dar pentru scopul acestui ghid am decis să folosim această metodă.
Fișierul jurnal este specificat ca:
~ / backup / rsync-getate + "% F-% I% p" '
Alternativ, am putea fi specificat ca:
~ / backup / rsync-'cat ~ / backup / time.txt'.log
În orice caz, --fișier jurnal
comanda ar trebui să poată găsi fișierul de jurnal datat anterior și să-l scrie.
Fișierul destinație a unui link este specificat ca:
--link-dest = / home / geek2 / fișiere / 'cat ~ / backup / time2.txt'
Aceasta înseamnă că --link-dest
comanda este dată directorului copiei de rezervă anterioare. Dacă executați copii de rezervă la fiecare două ore și este ora 16:00 în momentul în care am rulat acest script, atunci --link-dest
comanda caută directorul creat la 2:00 PM și transferă numai datele care s-au schimbat de atunci (dacă există).
Pentru a reitera, acesta este motivul pentru care time.txt este copiat la time2.txt la începutul scriptului, astfel încât --link-dest
comanda se poate referi la acel moment mai târziu.
Directorul destinație este specificat ca:
[email protected]: / home / geek2 / fișiere / 'data +'% F-% I% p ''
Această comandă pune pur și simplu fișierele sursă într-un director care are un titlu de dată și oră curente.
În cele din urmă, ne asigurăm că o copie a fișierului de jurnal este plasată în interiorul copiei de rezervă.
scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / fișiere / 'cat ~ / backup / time.txt' / rsync -cat ~ / backup / time.txt'.log
Utilizăm copia securizată pe portul 12345 pentru a prelua jurnalul rsync și a le plasa în directorul corespunzător. Pentru a selecta fișierul jurnal corect și pentru a vă asigura că acesta se termină la locul potrivit, fișierul time.txt trebuie să fie referit prin comanda cat. Dacă vă întrebați de ce am decis să pisoi time.txt în loc să folosim doar comanda de date, este pentru că o mulțime de timp ar fi putut să apară în timp ce comanda rsync se execută, așa că pentru a ne asigura că avem timpul potrivit, documentul text pe care l-am creat mai devreme.
Automatizare
Utilizați Cron pe Linux sau Task Scheduler pe Windows pentru a vă automatiza scriptul rsync. Un lucru de care trebuie să fii atentă este să te asiguri că vei termina toate procesele rsync care rulează în prezent, înainte de a continua unul nou. Task Scheduler pare să închidă automat toate instanțele care rulează automat, dar pentru Linux va trebui să fii puțin mai creativ.
Cele mai multe distribuții Linux pot folosi comanda pkill, deci asigurați-vă că adăugați următoarele la începutul scriptului rsync:
pkill-9 rsync
Criptarea
Nu am terminat încă. În sfârșit, avem o soluție de salvgardare fantastică (și gratuită!), Dar toate dosarele noastre sunt încă susceptibile la furt. Sperăm că vă salvați fișierele la o distanță de sute de mile distanță. Indiferent cât de sigur este acest loc îndepărtat, furtul și hacking-ul pot fi întotdeauna probleme.
În exemplele noastre, am tunat întregul trafic rsync prin SSH, ceea ce înseamnă că toate fișierele noastre sunt criptate în timp ce se află în tranzit spre destinația lor. Cu toate acestea, trebuie să ne asigurăm că destinația este la fel de sigură. Rețineți că rsync criptează numai datele dvs. în timp ce acestea sunt transferate, dar fișierele sunt larg deschise odată ce ajung la destinație.
Una dintre cele mai bune caracteristici ale rsync este aceea că transferă numai modificările din fiecare fișier. Dacă aveți toate fișierele criptate și faceți o modificare minoră, întregul fișier va trebui să fie retransmis ca urmare a criptării complet randomizând toate datele după orice schimbare.
Din acest motiv, este mai bine / mai ușor să utilizați un tip de criptare pe disc, cum ar fi BitLocker for Windows sau dm-crypt for Linux. În acest fel, datele dvs. sunt protejate în caz de furt, dar fișierele pot fi transferate cu rsync, iar criptarea dvs. nu va împiedica performanța. Există și alte opțiuni disponibile care funcționează în mod similar cu rsync sau chiar implementează o anumită formă, cum ar fi Duplicitate, dar le lipsește unele dintre caracteristicile pe care rsync le poate oferi.
După ce ați configurat copiile de rezervă instantanee într-o locație din afara locației și ați criptat hard disk-urile sursă și de destinație, dați-vă un pat pe spate pentru a vă stăpâni rsync și pentru a implementa soluția de backup de date cea mai fiabilă posibil.