17Aug
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: numai Geeks
Dacă stați acolo gândindu-mă "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 backupdatele dvs. pe Linux, care oferă o prezentare a sistemului rsync, vă ghidează prin instalare și vă prezintă funcțiile sale 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.
Running rsync pe Windows
Mai întâi, hai să cititorii Windows pe aceeași pagină ca și guru-ul nostru Linux. Deși rsync este construit pentru a funcționa pe sisteme de tip Unix, nu există niciun 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 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 părea puțin diferite atunci când le alegeți, așa că sunt câteva screenshot-uri:
Instalarea Vim:
Instalarea SSH:
După ce ațiselectați 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ă rsync simplă și să arătăm cum utilizarea rapidă a unor comutatoare avansate poate fi complexă.
Să presupunem că aveți o grămadă de fișiere care necesită susținere - cine nu face aceste zile? Conectați hard diskul portabil astfel încât să vă puteți copia fișierele calculatorului și să emiteți următoarea comandă:
rsync -a /home/geek/files/ /mnt/usb/files/
Sau cum ar arăta pe un computer Windows cu Cygwin:
rsync -a /cygdrive/c/files/ /cygdrive/e/files/
Destul de simplu și laacest punct nu este cu adevărat necesar 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 computerul dvs. este o idee foarte proastă, așa că haideți să aruncăm o privire la ceea ce ar fi necesar 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 -a -delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/
Comanda de mai sus va trimite fișierele pe un 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 ceea ce se întâmplă și tunel rsync prin SSH pe portul 12345.
-a -v -e -- comutatoarele de desprindere 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 transferului 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 comutatorul --progress ca rezervă 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 gigaocteți), nu este nimic mai rău decât a avea 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 -partial, deci folosiți-l în schimb și va face comanda rsync puțin mai curată.
-z sau -compress - Acest comutator va face rsync să comprimă fișierele de date pe măsură 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 - citit de om - Dacă utilizați comutatorul - progress, veți dori cu siguranță să utilizați și acest lucru. Aceasta este, dacă nu doriți să convertiți octeți în megaocteți în zbor. Comutatorul -h 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 ș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 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 --relativ - 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 timbre în numele dosarelor.
- exclude - din - Acest comutator este utilizat pentru a face trimitere la 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.
- include-from - Similar cu -exclude-de, dar face legătura cu 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 prin orice mijloace, 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 traficul transmis prin rețeaua dvs..
--log-file - 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ă întrebați cum s-au făcut backup-uri î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-de la "/home/geek/ exclude.txt"-e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/
Comanda este încă destul de simplă, dar încă nu am creat o soluție de backup decentă.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ă.
Backup instantaneu
Dacă ștergeți accidental un fișier, un virus corupe oricare dintre fișierele dvs. sau altceva se întâmplă prin modificarea nedorită a fișierelor dvs. ș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 argumentele --backup și --backup-dir, astfel încât utilizatorii să poată 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.Î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).
Backup instantaneu 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 copiere de rezervă care rulează automat datele noastre de rezervă 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, după cum urmează:
Când traversați oricare dintre aceste directoare, ați vedea fiecare fișier din directorul sursă exact așa cum a fost atunci. Cu toate acestea, nu vor exista duplicate în nici un fel de două directoare.rsync realizează acest lucru cu ajutorul hardlinkului prin argumentul -link-dest = DIR.
Bineînțeles, pentru a avea aceste nume de directoare frumos și frumos datate, va trebui să îmbunătățim 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 vechi time.txt la time2.txt
da |cp ~ /backup/ time.txt ~ /backup/ time2.txt
#overwrite fișierul time.txt vechi cu noul timp
echo `date +"% F-% I% p "` & gt;~ /backup/ time.txt
#make fișierul jurnal
echo "" & gt;~ /backup/ rsync -date + "% F-% I% p" `.log
#rsync comanda
rsync -avzhPR-chmod = Du = rwx, Dgo = rx, Fu = rw,-stat -log-file = ~ /backup/ rsync -date + "% F-% I% 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/files/ `data + '% F-% I% p'` /
# nu uitați să scrap fișierul jurnal și să-l puneți cubackup
scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
ar fi un script tipic snapshot rsync.În cazul în care v-am pierdut undeva, să-l disecăm cu bucăți:
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 despre:
-avzhPR, -e, --delete, --stats, --log-file, -exclude-from, -link-destcomutatoarele 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, Fgo = 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.
Utilizarea 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-`date + '% F-% I% p "`. log
Alternativ, ar fi putut fi specificat ca:
~ /backup/ rsync -catcat /backup/ time.txt`.log
În orice caz, comanda -log-fișier 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/files/ `cat ~ /backup/ time2.txt`
Aceasta înseamnă că comanda --link-dest 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 comanda --link-dest 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 comanda --link-dest poate face referire la acel moment mai târziu.
Directorul de destinație este specificat ca:
[email protected]: /home/geek2/files/ `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 -catcat /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
Folosimcopiați 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 comanda 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ă 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 dvs. rsync:
pkill -9 rsync
Criptare
Nu, 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 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 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 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 celor mai fiabile date.