Ghid Rysnc și 11 exemple de utilizare eficientă

Introducere în Rsync: Sincronizarea fișierelor eficientă

Rsync reprezintă un instrument de linie de comandă gratuit, conceput pentru a facilita sincronizarea fișierelor, atât la nivel local, cât și la distanță. Acesta permite transferul rapid și eficient de fișiere și directoare.

Datorită capacităților sale, Rsync este extrem de util pentru migrarea datelor, crearea de copii de rezervă și procesul de oglindire a datelor, fiind un instrument preferat de webmasteri și administratori pentru sarcinile periodice de transfer de date.

În acest articol, vom analiza modul de funcționare al Rsync, oferind în același timp exemple practice pentru o înțelegere mai profundă.

Cum funcționează Rsync?

Rsync este un utilitar de sincronizare la distanță, destinat sistemelor bazate pe Unix, care oferă utilizatorilor posibilitatea de a transfera și sincroniza fișiere între diverse mașini sau gazde, eliminând complexitatea procesului.

În esența sa, Rsync utilizează algoritmul de transfer delta, care constă în copierea diferențelor dintre fișierele existente pe gazda sursă și cea de destinație. Aceasta din urmă poate fi locală sau la distanță. Comanda rsync poate realiza transferul de date în două moduri principale:

  • Prin utilizarea protocoalelor ssh sau rsh pentru a sincroniza între două gazde.
  • Prin intermediul demonului TCP rsync pentru copiere sau sincronizare.

Datorită compatibilității cu sistemele Unix, Rsync funcționează optim și în mediul Linux.

Pașii de funcționare ai Rsync sunt următorii:

  • Rsync utilizează SSH pentru a stabili o conexiune securizată cu gazda de la distanță, solicitând parola de acces.
  • După autentificare, rsync-ul de pe gazda la distanță comunică cu sursa.
  • Cele două programe identifică fișierele și directoarele care necesită sincronizare. Pentru aceasta, folosesc un algoritm de transfer delta, comparând fișierele pentru a identifica diferențele.

Dacă rsync detectează un fișier prezent pe gazda locală, dar absent pe cea de la distanță, acesta va fi copiat și transferat către sistemul de destinație. Pentru fișierele care există pe ambele sisteme, Rsync va copia doar modificările. În final, fișierele neschimbate pe ambele sisteme vor fi ignorate.

Rsync realizează actualizări incrementale prin stocarea modificărilor într-un fișier temporar, înainte de a le transfera la destinație.

Înainte de a începe:

  • Este necesar să aveți privilegii de root sau sudo.
  • Asigurați-vă că aveți acces la terminal sau linia de comandă.
  • Este esențial un acces SSH pentru a utiliza comenzile rsync în mod securizat.
  • Pentru a folosi Rsync, sunt necesare două mașini diferite.

În acest tutorial, vom utiliza Linux Mint 21.1 Vera, dar ghidul poate fi adaptat și pentru alte distribuții Linux.

De ce să preferăm Rsync în locul Scp?

Scp (copiere securizată) este un protocol popular de linie de comandă pentru copierea fișierelor. Abordarea sa este una liniară, copiind pur și simplu fișierele de la sursă la destinație prin intermediul SSH pentru securitate.

Sintaxa comenzii scp este următoarea:

scp opțiune SURSĂ DESTINAȚIE

Cu toate acestea, de ce am alege rsync în locul scp?

Rsync oferă o serie de avantaje, printre care:

  • Viteză de execuție superioară: Rsync este mai rapid datorită utilizării unui protocol de actualizare la distanță, transferând doar diferențele dintre fișiere, nu întregul fișier. Astfel, după prima copie completă, următoarele sincronizări vor include doar părțile modificate.
  • Consum redus de lățime de bandă: Prin faptul că nu transferă întregul fișier, Rsync reduce consumul de lățime de bandă. De asemenea, folosește algoritmi de compresie pentru a minimiza dimensiunea fișierelor în timpul transferului.
  • Mai multe opțiuni de linie de comandă: Rsync oferă o gamă mai largă de opțiuni de linie de comandă, permițând o configurare mai flexibilă decât scp.

În concluzie, Rsync este un instrument eficient pentru sincronizarea incrementală. Scp, pe de altă parte, este util pentru transferul securizat de fișiere. Într-un context zilnic, scp este ideal pentru sarcini simple, în timp ce rsync este preferat pentru operații recurente.

Sintaxa comenzii Rsync

Comanda rsync se prezintă astfel:

rsync OPȚIUNE SURSĂ DESTINAȚIE

Termenii sunt definiți după cum urmează:

  • OPȚIUNE: Opțiunile rsync.
  • SURSĂ: Directorul sursă.
  • DEST: Directorul de destinație.
  • UTILIZATOR: Numele de utilizator la distanță.
  • HOST: Numele de gazdă sau adresa IP de la distanță.

Opțiunile sunt parametrii care adaugă funcționalități suplimentare comenzii. De exemplu, opțiunea „-r” permite sincronizarea recursivă a datelor. Cu toate acestea, această opțiune nu sincronizează proprietatea pentru grupuri și utilizatori, marcajele de timp, permisiunile sau legăturile simbolice. Pentru o sincronizare completă, se utilizează opțiunea „-a”, care activează modul arhivare, păstrând proprietatea, permisiunile și legăturile simbolice ale fișierelor.

Alte opțiuni de sincronizare includ:

  • -z: Compresia datelor pentru economisirea spațiului.
  • -h: Afișarea rezultatelor într-un format lizibil.
  • -b: Realizarea de backup în timpul sincronizării datelor.
  • -e: Utilizarea protocolului SSH pentru transferurile de date la distanță.
  • -progress: Afișarea progresului sincronizării datelor.
  • -v: Afișarea detaliată a rezultatelor rsync.
  • –n: Simularea sincronizării pentru a testa setările fără a efectua modificări reale.
  • -q: Eliminarea mesajelor de ieșire și opțiunile comenzii rsync.

Instalarea Rsync

Majoritatea sistemelor Unix și Linux au Rsync preinstalat. Dacă sistemul dvs. nu îl are, îl puteți instala folosind comenzile de mai jos:

Pentru Debian/Ubuntu și Mint:

sudo apt-get install rsync

Pentru Arch Linux:

pacman -S rsync

Pe Gentoo:

emerge sys-apps/rsync

Pe CentOS/Fedora/REHL:

sudo yum install rsync

Pe openSUSE:

sudo zypper install rsync

În cazul nostru, Rsync este preinstalat în Linux Mint. Pentru a verifica dacă este instalat, tastați „rsync” în terminal. Dacă este instalat, vor fi afișate informații despre capacitățile, opțiunile și alte informații relevante.

nitt ~
$ rsync
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.
    

Vom demonstra acum utilizarea Rsync prin exemple practice, creând două directoare pentru tutorial:

  • sursă-director
  • dest-director

Pentru crearea directoarelor, utilizați comenzile de mai jos:

mkdir source-directory
mkdir dest-directory
    

De asemenea, vom crea fișiere de test în directorul sursă, utilizând comanda următoare:

touch source-directory/file{1..100}

Această comandă va genera 100 de fișiere goale în directorul sursă. Puteți verifica acest lucru cu comanda „ls source-directory”.

nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ touch source-directory/file{1..100}
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
    

Observați că directorul destinație este inițial gol.

Copierea directoriilor local în mod recursiv

Deși Rsync este utilizat frecvent pentru transferul de fișiere între servere locale și cele la distanță, el poate fi folosit eficient și pentru copierea locală a fișierelor.

În acest context, vom utiliza următoarea sintaxă Rsync:

opțiunea rsync SURSĂ DESTINAȚIE

Pentru a copia fișierele din directorul sursă în directorul de destinație, rulați următoarea comandă:

rsync -r source-directory/ dest-directory

Aceasta va copia recursiv toate fișierele din directorul sursă în cel de destinație.

nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ ls dest-directory
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
nitt rsync-tutorial
$ rsync -r source-directory/ dest-directory
nitt rsync-tutorial
$ ls dest-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
    

Astfel, toate fișierele din directorul sursă sunt copiate în cel de destinație.

Copierea unui singur fișier local

Vom învăța cum să copiem un singur fișier, editând fișierul file1 din directorul sursă și apoi sincronizându-l cu același fișier din directorul destinație.

Pentru a edita fișierul, utilizați comanda următoare:

nano source-directory/file1

În editorul nano, copiați și lipiți următorul text:

We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.
    

Acum, închideți și salvați fișierul.

Pentru a copia fișierul utilizând rsync, tastați următoarea comandă:

sudo rsync -v --existing source-directory/file1 /dest-directory
#Ieșire
nitt rsync-tutorial
$ sudo rsync -v --existing source-directory/file1 dest-directory
file1

sent 557 bytes  received 35 bytes  1,184.00 bytes/sec
total size is 474  speedup is 0.80

nitt rsync-tutorial
$
    

Am utilizat opțiunea „–existing”, care actualizează fișierele existente. Fără această opțiune, fișierul nu va fi actualizat, chiar dacă comanda este executată cu succes.

Dacă fișierul pe care îl copiați nu există în folderul de destinație, utilizați următoarea comandă:

rsync -v source-directory/newfile dest-directory
#Ieșire
nitt rsync-tutorial
$ rsync -v source-directory/newfile dest-directory
newfile

sent 82 bytes  received 35 bytes  234.00 bytes/sec
total size is 0  speedup is 0.00
    

Copierea mai multor fișiere

Pentru a copia mai multe fișiere, este necesar să specificați căile sursă ale fiecărui fișier, urmate de directorul țintă.

Vom crea două fișiere noi, newfile2 și newfile3, în directorul sursă, utilizând comanda:

touch source-directory/newfile{2..3}

Pentru sincronizarea mai multor fișiere, utilizați următoarea comandă:

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Ieșire
nitt rsync-tutorial
$ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
newfile2
newfile3

sent 135 bytes  received 54 bytes  378.00 bytes/sec
total size is 0  speedup is 0.00
nitt rsync-tutorial
$
    

Copierea unui fișier sau director de la local la distanță

Sintaxa rsync pentru transferul de la local la distanță este următoarea:

rsync opțiune SURSĂ [email protected]:DEST

Este necesar să cunoașteți adresa IP a mașinii de la distanță, adăugând-o după fișierul sursă.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Înainte de transfer, va fi solicitată parola. Dacă utilizatorul este diferit pe mașina de la distanță, adăugați-l înainte de adresă IP, urmat de „@”.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Pentru a copia mai multe fișiere sau directoare, enumerați căile acestora, conform sintaxei de mai jos:

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Protocoale specifice transferului de la distanță

Rsync permite specificarea protocoalelor de transfer de fișiere prin opțiunea „-e”, urmată de protocol. De exemplu, pentru protocolul ssh, utilizați:

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Copierea unui fișier sau director de la distanță în local

Sintaxa rsync pentru transferul de la distanță la local este:

sync opțiune [email protected]:SRC DEST

Aceasta acționează ca o cerere de „pull”. Pentru a obține fișierele sau directoarele necesare de pe un server la distanță pe mașina locală, utilizați comanda:

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Această comandă va trage fișierele din directorul destinație al mașinii de la distanță în directorul sursă al mașinii locale. Pentru un fișier anume, specificați calea completă:

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Pentru a copia mai multe fișiere sau directoare, includeți calea între paranteze, separate prin virgule, după adresa IP a serverului.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Puteți specifica, de asemenea, fișiere în același mod.

Afișarea progresului live în timpul transferului

Pentru a monitoriza progresul în timp real al transferurilor de date mari, utilizați indicatorul „–progress”. Acesta afișează viteza de transfer, timpul rămas și cantitatea de date transferate.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Ștergerea fișierelor sursă după finalizarea transferului

Pentru a șterge fișierele sursă după transfer, utilizați indicatorul „–remove-source-files”. Acest lucru este util pentru scenarii în care securitatea sau eliberarea spațiului sunt importante.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Rsync – Modul de Funcționare Uscată

Rsync oferă posibilitatea de a evalua o rulare înainte de executarea efectivă, cu ajutorul modului de funcționare uscată. Acest mod permite verificarea setărilor și configurației înainte de a face modificări reale.

Pentru a activa modul uscat, utilizați opțiunea „–dry-run” în comandă.

sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial
$ sudo rsync -v --dry-run source-directory/file1 dest-directory
file1

sent 43 bytes  received 19 bytes  124.00 bytes/sec
total size is 474  speedup is 7.65 (DRY RUN)
nitt rsync-tutorial
    

Rezultatul este similar cu cel al unei rulări normale, dar include mențiunea „(DRY RUN)” la final.

Setarea dimensiunii minime și maxime a fișierului

Rsync permite setarea dimensiunii minime și maxime a fișierelor în timpul transferului.

Pentru a transfera doar fișiere cu o dimensiune minimă de 15KB, utilizați „–min-size=15k”.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

În mod similar, pentru dimensiunea maximă, utilizați „–max-size”:

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Setarea limitei lățimii de bandă

Pentru a limita lățimea de bandă utilizată de rsync, folosiți „–bwlimit=KB/s”.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

În acest exemplu, lățimea de bandă este limitată la 100KB/s.

Concluzie

Acest ghid vă oferă o imagine de ansamblu asupra comenzilor Rsync, acoperind cele mai relevante aspecte ale utilizării sale.

Pentru o înțelegere aprofundată, este recomandat să consultați pagina de manual a Rsync, care detaliază fiecare aspect al instrumentului.

De asemenea, consultați fișele de ajutor pentru linia de comandă pentru Windows, Linux și macOS pentru o referință rapidă.