Cum să optimizați sincronizarea datelor cu rsync
rsync este un instrument versatil care simplifică transferul de fișiere prin conexiuni de rețea și accelerează sincronizarea directoarelor locale. Flexibilitatea ridicată face ca acest instrument de sincronizare să fie o opțiune excelentă pentru o varietate de operațiuni la nivel de fișiere.
Ce este rsync?
rsync, prescurtarea de la „remote synchronization” (sincronizare la distanță), este un instrument de sincronizare flexibil și compatibil cu rețeaua în Linux. Programul open-source poate fi utilizat pentru sincronizarea fișierelor și directoarelor între sisteme locale sau între rețele. Instrumentul utilizează o tehnică de transfer diferențial de date, prin care sunt transferate numai secțiunile de date care au fost efectiv modificate. Acest lucru minimizează cantitatea de date schimbate și accelerează considerabil procesul de sincronizare. Datorită unei varietăți de opțiuni, rsync permite controlul precis al comportamentului de sincronizare. Sintaxa flexibilă face posibile atât copiile locale simple, cât și sincronizările complexe în rețea.
Care este sintaxa pentru rsync?
Sintaxa comenzii rsync are o structură simplă și este similară cu cea a SSH, SCP și CP. Structura de bază este următoarea:
rsync [OPTION] source destinationbashCalea sursă de la care trebuie sincronizate datele este introdusă în source, iar calea destinație este specificată ca destination. rsync oferă o varietate de opțiuni pe care utilizatorii le pot folosi pentru a adapta procesul de sincronizare la cerințele lor. Cele mai frecvent utilizate opțiuni sunt:
-a(arhive): Păstrează permisiunile recursive ale fișierelor, marcajele temporale, grupurile, proprietarii și proprietățile speciale ale fișierelor-v(verbose): Afișează informații detaliate despre procesul de sincronizare-r(recursiv): Sincronizează recursiv directoarele și conținutul acestora-u(update): Transferă numai fișierele care sunt mai noi decât cele deja existente în directorul țintă-z(compress): Reduce traficul de date în rețea-n–itemize-changes: Afișează o listă cu modificările care urmează să fie efectuate--delete: Șterge fișierele din directorul țintă care nu mai există în sursă--exclude: Exclude anumite fișiere sau directoare din sincronizare--dry-run: Simulează procesul de sincronizare fără a transfera efectiv fișierele--progress: Afișează progresul transferului de fișiere--partial: Fișierele care au fost transferate parțial rămân în directorul țintă dacă transferul este întrerupt. Când transferul este reluat, fișierul este continuat din ultima sa stare
Exemple de sintaxă rsync
Următoarele exemple de sintaxă rsync ar trebui să faciliteze înțelegerea modului de utilizare a comenzii. Următorul exemplu de cod creează directorul dir1, care include 100 de fișiere de testare goale și un al doilea director gol dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashConținutul dir1 poate fi sincronizat pe același sistem cu dir2 utilizând opțiunea -r:
$ rsync -r dir1/ dir2bashAlternativ, se poate utiliza opțiunea -a, care sincronizează recursiv și conține legături simbolice, fișiere speciale ale dispozitivelor, ore de modificare, grupuri, proprietari și autorizații:
$ rsync -a dir1/ dir2bashNotă: Bareta (/) de la sfârșitul directorului sursă într-o comandă rsync este importantă deoarece indică faptul că trebuie sincronizat conținutul directorului, nu directorul în sine.
$ rsync -a dir1/ dir2bashIată un exemplu de rezultat:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashDacă directorul sursă nu are o bară oblică la sfârșit, directorul sursă va fi copiat în directorul țintă:
$ rsync -a dir1 dir2bashIată rezultatul:
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
. . .bashUtilizarea barei oblice la sfârșitul directorului sursă asigură că procesul de sincronizare se desfășoară conform așteptărilor și că conținutul directorului sursă ajunge în directorul țintă corect.
Cum se sincronizează rsync cu un sistem la distanță
Sincronizarea unui sistem la distanță cu rsync nu este de obicei dificilă, cu condiția să aveți acces SSH la computerul la distanță și să dispuneți de informațiile de autentificare necesare. Rsync utilizează adesea SSH (Secure Shell) pentru comunicarea securizată cu sistemele la distanță. Pentru a utiliza acest instrument, acesta trebuie să fie instalat pe ambele părți.
Dacă accesul SSH între cele două computere este verificat, folderul dir1 poate fi sincronizat pe un computer la distanță. În acest caz, trebuie transferat directorul propriu-zis, motiv pentru care slash-ul final a fost omis în următoarea comandă:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashDacă un director este mutat dintr-un sistem local într-un sistem la distanță, aceasta se numește operațiune push. În schimb, când un director la distanță este sincronizat cu un sistem local, aceasta se numește operațiune pull. Sintaxa pentru aceasta este următoarea:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashCe alte opțiuni există în rsync?
Comportamentul standard al rsync poate fi adaptat în continuare folosind opțiunile de mai jos.
Transferul fișierelor necomprimate cu rsync
Sarcina rețelei la transferul fișierelor necomprimate poate fi redusă utilizând opțiunea -z:
$ rsync -az source destinationbashAfișarea progresului și reluarea transmisiilor întrerupte
Cu -P puteți combina opțiunile --progress și --partial. Acest lucru vă oferă o imagine de ansamblu asupra progresului transmisiilor și vă permite, de asemenea, să reluați transmisiile întrerupte în același timp:
$ rsync -azP source destinationbashIată rezultatul:
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)
. . .bashExecutați din nou comanda pentru a obține un rezultat mai scurt. Acest lucru permite rsync să determine dacă au fost efectuate modificări pe baza orelor de modificare.
$ rsync -azP source destinationbashIată rezultatul:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashMențineți directoarele sincronizate cu rsync
Pentru a vă asigura că cele două directoare sunt sincronizate, este necesar să ștergeți din directorul țintă fișierele care au fost șterse din directorul sursă. Dar rsync nu șterge automat fișierele din directorul țintă. Acest lucru poate fi modificat cu opțiunea --delete. Cu toate acestea, este important să utilizați această opțiune cu precauție, deoarece șterge fișierele din directorul țintă care nu mai există în sursă.
Înainte de a utiliza această opțiune, ar trebui să utilizați opțiunea --dry-run. Aceasta vă va permite să efectuați o simulare a procesului de sincronizare fără a șterge fișiere reale. Astfel, vă puteți asigura că sunt efectuate numai modificările dorite, fără a pierde accidental date importante:
$ rsync -a --delete source destinationbashExcludeți fișiere și directoare din sincronizare
În rsync, puteți utiliza opțiunea --exclude pentru a exclude anumite fișiere și directoare din sincronizare. Acest lucru este util dacă, de exemplu, nu doriți să sincronizați fișiere temporare, fișiere jurnal sau alt conținut.
$ rsync -a --exclude=pattern_to_exclude source destinationbashDacă ați specificat un model pentru excluderea fișierelor, puteți utiliza opțiunea --include= pentru a suprascrie această excludere pentru anumite fișiere care corespund unui model diferit.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashSalvați copiile de rezervă cu rsync
Opțiunea --backup vă permite să salvați copii de rezervă ale fișierelor importante. Poate fi utilizată împreună cu opțiunea --backup-dir pentru a specifica directorul în care trebuie salvate fișierele de rezervă:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashPuteți găsi o prezentare detaliată a diverselor scenarii de backup în articolul nostru despre backup-urile serverelor cu rsync.