If-Koubou

Ghidul non-începător pentru sincronizarea datelor cu Rsync

Ghidul non-începător pentru sincronizarea datelor cu Rsync (Cum să)

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.

Avertisment: numai geeks avansate

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 precedent despre cum să utilizați rsync pentru backupul datelor pe Linux, o introducere în 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

Mai întâi, hai să cititorii Windows pe aceeași pagină cu guru-ul nostru Linux. Deși rsync este construit pentru a funcționa pe sisteme de tip Unix, nu există nici un motiv să nu î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 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 un pic diferit atunci când veți merge să le selectaț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 se află pe aceeași pagină, să aruncăm o privire la o comandă simplă rsync și să arătăm cum poate fi rapidă utilizarea unor comutatoare avansate complexe.

Să presupunem că aveți o grămadă de fișiere care au nevoie de asistență - cine nu face aceste zile? Conectați unitatea hard disk portabilă pentru a vă putea salva fișierele de pe computer și lansaț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ă glisaț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șierele mari și, în special, transferul de fișiere pe internet, este o afacere mare.

Copierea de rezervă a fișierelor pe o unitate de 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ă 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șirea numelor de fișiere transferate, astfel încât să aveți o idee despre ce se întâmplă și să roncalizați rsync prin SSH pe portul 12345.

-a -v -e - îndepărtează întrerupătoarele 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 alte switch-uri care sunt uneori ignorate, dar utile:

--progress - Acest comutator ne permite să vedem progresul de transfer al fiecărui fișier. Este deosebit de util atunci când transferați fișiere mari pe Internet, dar poate transmite o cantitate nelimitată de informații atunci când transferați doar fișiere mici într-o rețea rapidă.

O comandă rsync cu --progress switch-ul ca o copie de siguranță este în curs de desfășurare:

--parțial - Acesta este un alt switch care este deosebit de util atunci când se transferă 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 gigaocteți), nu este nimic mai rău decât o întrerupere a internetului, un ecran albastru sau o eroare umană, care să treacă prin transferul de fișiere și să trebuiască să înceapă din nou.

-P - acest comutator combină --progress și --parțial, deci folosiți-o în schimb și aceasta va face comanda rsync puțin mai curată.

-z sau --comprima - Acest switch va face rsync să comprimă fișierele de date în timp ce acestea sunt 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 beneficiezi de transferuri între conexiunile lente și nu face nimic pentru următoarele tipuri de fișiere: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h sau --human poate fi citit - Dacă utilizați --progress 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 --dry-run - Acest switch este esențial pentru a afla când scrii pentru prima oară scriptul rsync și îl testezi. Ea efectuează o încercare de funcționare, dar nu efectuează nici o schimbare - modificările aduse sunt încă afișate ca normal, 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 --relative - Acest switch 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 timbre în numele dosarelor.

--exclude-din - Acest switch este folosit pentru a face legătura cu o listă de excludere 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.

--includeți-din - Similar cu --exclude-din, dar se leagă de un fișier care conține directoare și căi de fișiere de date pe care doriți să le copiați.

--stats - 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ă, doar pentru a putea monitoriza cantitatea de trafic trimisă prin rețeaua dvs. și altele asemenea.

--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 copii de rezervă când 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-de la '/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 dintre cauzele principale ale pierderii de date: eroarea umană.

Întreținerea instantaneelor

Dacă ștergeți accidental un fișier, un virus corupe oricare dintre fișierele dvs. sau altceva se întâmplă prin 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 --backup și --backup-dir astfel încât utilizatorii ar putea rula copii de rezervă diferențiate. Primul exemplu de pe site-ul rsync prezintă 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. În plus, majoritatea geeks rulează backup-urile de mai multe ori pe zi, astfel încât 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 și căutarea prin datele dvs. de rezervă poate fi extrem de consumatoare de timp - ar trebui să știți ultima dată când un fișier a fost modificat pentru a găsi cea mai recentă copie de rezervă. Mai presus de toate, este ineficient să rulați backupuri incrementale săptămânal (sau chiar mai puțin frecvent în unele cazuri).

Rezoluții instantanee pentru salvare! Întreținerea instantaneelor ​​nu reprezintă decât backupuri incrementale, dar ele 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 rezervă care rulează în mod automat, care susține datele noastre la fiecare două ore. Ori de câte ori rsync face acest lucru, el numește fiecare copie de rezervă î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 a fost în acel moment. Cu toate acestea, nu vor exista duplicate în nici un fel de două directoare. rsync realizează acest lucru cu ajutorul hardlinkului prin --link-dest = DIR argument.

Desigur, pentru a avea aceste nume de directoare frumos și curate, vom fi nevoiți 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

ecou "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 să-l puneți 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 scenariu 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ă dorim 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 - Numai 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 către el.

Folosirea comenzilor de dată și pisică

Vom trece peste fiecare utilizare a comenzilor de dată și pisă în comanda rsync, în ordinea în care acestea apar. Notă: suntem conștienți de faptul că există și alte modalități de a realiza această funcție, în special cu utilizarea 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 log datat anterior și să-l scrie.

Fișierul destinație a link-ului 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 ora 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, deci --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

Folosim o copie securizată pe portul 12345 pentru a lua jurnalul rsync și a-l 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 intermediul comenzii cat. Dacă vă întrebați de ce am hotărât să folosim comanda time.txt în loc să folosim doar comanda de date, aceasta se datorează faptului că s-ar fi putut petrece o mulțime de timp în timp ce comanda rsync rulează, 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ă fiți atent este să vă asigurați că ați terminat 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 fișierele 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 tunelat întregul trafic rsync prin SSH, ceea ce înseamnă că toate fișierele noastre sunt criptate în timp ce sunt î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 lui rsync este aceea că transferă numai modificările din fiecare fișier. Dacă aveți toate fișierele criptate și efectuați o modificare minoră, întregul fișier va trebui să fie retransmis ca urmare a criptării, complet randomizând toate datele după orice modificare.

Din acest motiv, este mai bine / mai ușor să utilizați un tip de criptare pe disc, cum ar fi BitLocker pentru Windows sau dm-crypt pentru 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 pun în aplicare 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 siguranță instantanee într-o locație din afara locației și ați criptat hard disk-urile sursă și de destinație, asigurați-vă un pat pe spate pentru mastering rsync și implementarea soluției de copiere de rezervă a datelor cea mai fiabilă posibilă.