Explorarea Capacităților Instrumentului Rsync
Rsync reprezintă un utilitar de tip linie de comandă, oferit gratuit, care permite sincronizarea eficientă a fișierelor, atât local, cât și la distanță. Prin intermediul său, utilizatorii pot transfera cu ușurință fișiere și directoare între diferite locații.
Datorită versatilității sale, rsync se dovedește a fi extrem de valoros pentru diverse sarcini, cum ar fi migrarea datelor, realizarea de copii de siguranță (backup) și crearea de copii identice (mirroring). Acesta este un instrument esențial pentru webmasteri și administratori, facilitând sarcinile repetitive de transfer de informații.
În acest articol, vom analiza funcționalitățile rsync și vom prezenta câteva exemple practice pentru a ilustra cum poate fi utilizat în diverse situații.
Cum Funcționează Rsync?
Rsync este conceput ca un instrument de sincronizare de la distanță, ideal pentru sistemele bazate pe Unix. Acesta oferă posibilitatea de a muta și sincroniza date între două computere, fie că sunt în aceeași rețea sau la distanță, într-un mod simplu și eficient.
La bază, rsync folosește un algoritm de transfer delta. Această metodă presupune copierea numai a diferențelor dintre fișierele de pe sursă și cele de pe destinație. Atât sursa, cât și destinația pot fi locații locale sau la distanță. Comanda rsync poate îndeplini operații de copiere/sincronizare în două moduri principale:
- Utilizarea protocoalelor SSH sau RSH pentru a sincroniza date între două mașini.
- Utilizarea demonului TCP rsync pentru sincronizare.
Fiind proiectat să opereze în medii de tip Unix, rsync funcționează impecabil și în sistemele Linux.
Procesul de sincronizare realizat de rsync se desfășoară în următorii pași:
- Rsync folosește SSH pentru a se conecta la mașina de la distanță și, în mod normal, solicită o parolă.
- Odată conexiunea stabilită, rsync de pe mașina de la distanță comunică cu cea sursă.
- Cele două componente identifică fișierele și directoarele care necesită sincronizare, utilizând algoritmul de transfer delta pentru a detecta diferențele.
În situația în care comanda rsync nu găsește un fișier pe destinație, dar îl găsește pe sursă, acesta va fi copiat în destinație. Similar, dacă fișierul există atât pe sursă cât și pe destinație, rsync va copia doar modificările. Fișierele identice pe ambele sisteme vor fi ignorate.
Rsync realizează actualizări incrementale, stocând diferențele într-un fișier temporar înainte de a le aplica în destinație.
Înainte de a începe, este necesar să îndepliniți următoarele condiții:
- Să dețineți privilegii de tip root sau sudo.
- Să aveți acces la terminal/linie de comandă.
- Să aveți acces SSH pentru a executa comenzile rsync în mod sigur.
- Să dispuneți de două mașini pentru a testa rsync.
Pentru a demonstra, vom folosi Linux Mint 21.1 Vera. Ghidul poate fi urmat cu ușurință pe orice altă distribuție Linux, fără probleme.
De Ce să Optăm pentru Rsync în Defavoarea Scp?
Scp (secure copy) este un protocol de linie de comandă frecvent utilizat pentru copierea de fișiere. Acesta funcționează într-un mod simplu, transferând fișiere de la sursă la destinație. Securitatea transferului este asigurată prin utilizarea SSH.
Sintaxa comenzii scp este următoarea:
scp option SOURCE DESTINATION
Cu toate acestea, se ridică întrebarea: de ce să alegem rsync în locul scp?
Utilizarea rsync oferă multiple avantaje, printre care:
- Viteză de execuție superioară: Rsync este mai rapid decât scp, datorită protocolului de actualizare la distanță, care permite transferul doar a modificărilor, nu a întregului fișier. Astfel, după o primă copiere completă, următoarele sincronizări vor fi mult mai rapide, datorită algoritmului de transfer delta.
- Consum redus de lățime de bandă: Deoarece rsync nu mai trebuie să copieze integral fișierul, rezultă un consum semnificativ mai mic de lățime de bandă. În plus, utilizează algoritmi de compresie și decompresie, reducând dimensiunea fișierelor în timpul transferului.
- Mai multe opțiuni de linie de comandă: Rsync oferă un număr mai mare de opțiuni de configurare decât scp. Acest lucru oferă utilizatorilor un control mai mare asupra procesului de sincronizare.
În concluzie, rsync este un instrument foarte eficient pentru sincronizarea incrementală. Scp este, de asemenea, util pentru transferul de fișiere, oferind o abordare mai directă. În utilizarea de zi cu zi, scp este potrivit pentru sarcinile simple, în timp ce rsync este preferabil pentru operațiunile repetitive, datorită avantajelor sale.
Sintaxa Comenzii Rsync
Sintaxa comenzii rsync este:
rsync OPTIUNE SOURCE DEST
unde termenii sunt definiți după cum urmează:
- OPȚIUNE – Parametrii de configurare a rsync.
- SOURCE – Directorul sursă.
- DEST – Directorul de destinație.
Pentru transferurile la distanță, sintaxa este:
rsync OPTIUNE SOURCE [email protected]:DEST
- UTILIZATOR – Numele de utilizator de pe mașina de la distanță.
- HOST – Numele mașinii de la distanță sau adresa IP.
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 păstrează proprietatea grupului și a utilizatorului, timestamp-urile, permisiunile sau legăturile simbolice. Pentru a face acest lucru, se poate utiliza opțiunea `-a`, care rulează comanda în mod arhivă, asigurând copierea tuturor proprietăților și permisiunilor.
Alte opțiuni importante de sincronizare includ:
- -z: comprimarea datelor pentru a reduce dimensiunea transferului.
- -h: afișarea informațiilor într-un format ușor de citit.
- -b: realizarea unei copii de rezervă înainte de sincronizare.
- -e: utilizarea protocolului SSH pentru transferuri de date de la distanță.
- –progress: afișarea progresului sincronizării.
- -v: afișarea unei ieșiri detaliate.
- –n: efectuarea unei rulări de test, fără a face modificări reale.
- -q: suprimarea afișării de informații și opțiuni ale comenzii rsync.
Instalarea Rsync
Rsync este de obicei preinstalat pe majoritatea sistemelor Unix și Linux. Dacă nu este disponibil pe sistemul dumneavoastră, poate fi instalat folosind comenzile de mai jos.
Pentru Debian/Ubuntu și Mint:
sudo apt-get install rsync
Pentru Arch Linux:
pacman -S rsync
Pentru Gentoo:
emerge sys-apps/rsync
Pentru CentOS/Fedora/REHL:
sudo yum install rsync
Pentru openSUSE:
sudo zypper install rsync
Deoarece folosim Linux Mint, rsync este deja preinstalat. Pentru a verifica instalarea, se poate rula comanda rsync în terminal, care va afișa informații despre capacitățile și opțiunile disponibile.
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.
În continuare, vom demonstra utilizarea practică a rsync în diverse scenarii.
Pentru demonstrație, vom crea două directoare:
- sursă-director
- dest-director
Pentru a crea aceste directoare, utilizați următoarele comenzi:
mkdir source-directory mkdir dest-directory
Vom genera și câteva fișiere de test, utilizând comanda de mai jos:
touch source-directory/file{1..100}
Această comandă creează 100 de fișiere goale în directorul sursă. Putem verifica acest lucru cu ajutorul comenzii:
ls source-directory
Output:
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
Notă: Directorul dest este lăsat gol.
Copiere Recursivă a Directoarelor Local
Deși rsync este conceput în primul rând pentru a copia fișiere între un server local și unul de la distanță, poate fi folosit la fel de bine pentru a copia fișiere local.
În acest caz, vom folosi următoarea sintaxă rsync:
rsync opțiunea SOURCE DESTINATION
Pentru a copia toate fișierele din directorul sursă în directorul dest, rulăm următoarea comandă:
rsync -r source-directory/ dest-directory
Opțiunea „-r” permite copierea recursivă a tuturor fișierelor și subdirectoarelor.
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
În urma acestei comenzi, toate fișierele din directorul sursă sunt copiate în directorul dest.
Copierea unui Singur Fișier Local
Acum că am demonstrat cum să sincronizăm două directoare, vom învăța cum să copiem un singur fișier.
Pentru a face acest lucru, vom edita fișierul gol `file1` din directorul sursă și îl vom sincroniza cu același fișier din directorul dest.
Pentru a edita fișierul, folosim comanda:
nano source-directory/file1
În editorul nano, vom introduce 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.
După adăugarea conținutului, vom închide și salva fișierul.
Vom copia acum fișierul folosind rsync, cu următoarea comandă:
sudo rsync -v --existing source-directory/file1 dest-directory
#Output 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 permite actualizarea fișierelor existente. Dacă rulăm comanda fără această opțiune, fișierul nu se va actualiza, chiar dacă comanda rulează cu succes.
În cazul în care fișierul pe care îl dorim să îl copiem nu există în directorul de destinație, vom utiliza următoarea comandă:
rsync -v source-directory/newfile dest-directory
#Output 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, se specifică căile sursă ale fișierelor, urmate de directorul destinație.
În acest scop, vom crea două fișiere noi, `newfile2` și `newfile3`, în directorul sursă, folosind comanda:
touch source-directory/newfile{2..3}
Vom sincroniza cele două fișiere cu următoarea comandă:
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output 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 Fişierelor sau a Directoarelor de la Local la Distanţă
Sintaxa rsync pentru transferul de la local la distanță este următoarea:
rsync option SOURCE [email protected]:DEST
Pentru a realiza această operațiune, trebuie să cunoaștem adresa IP a mașinii de la distanță. Adresa IP se adaugă după fișierul sursă.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Înainte de transfer, se va cere parola utilizatorului. Dacă utilizatorul de pe mașina de la distanță este diferit, acesta trebuie specificat înainte de adresa IP, urmată de caracterul `@`.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Pentru a copia mai multe fișiere sau directoare, este necesară enumerarea acestora, separând căile.
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 pentru Transferul de la Distanță
Rsync permite specificarea anumitor protocoale pentru transferul fișierelor. Se utilizează opțiunea `-e`, urmată de protocolul dorit.
De exemplu, pentru a utiliza protocolul SSH:
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ță la Local
Sintaxa rsync pentru transferul de la distanță la local este următoarea:
rsync option [email protected]:SRC DEST
Această operațiune este echivalentă cu o comandă de tip `pull`. Pentru a transfera fișierele necesare de pe un server la distanță pe mașina locală, vom utiliza comanda de mai jos:
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Această comandă copiază fișierele din directorul `dest` al mașinii de la distanță în directorul `source` al mașinii locale.
În mod similar, un anumit fișier poate fi transferat specificând calea completă a acestuia:
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 de la distanță la local, se specifică calea între paranteze, separată prin virgulă, 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
În mod similar, se pot specifica și fișiere.
Afișarea Progresului Live în Timpul Transferului
Pentru operațiunile de transfer de date mai mari, este important să vedem progresul în timp real. Opțiunea `–progress` permite afișarea vitezei de transfer, a timpului rămas și a cantității 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
Opțiunea `–remove-source-files` permite ștergerea fișierelor sursă după finalizarea transferului, ceea ce poate fi util pentru securizarea fișierelor sau eliberarea spațiului.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Rsync – Funcționare de Test
Rsync oferă posibilitatea de a efectua o rulare de test, pentru a evalua modificările înainte de a le aplica. Această funcționalitate, cunoscută sub numele de `dry run`, permite verificarea corectitudinii operațiunilor.
Pentru a efectua o rulare de test, utilizăm opțiunea `–dry-run`, specificată în comandă, urmată de sursă și destinație.
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
Ieșirea este similară cu cea a unei operațiuni normale, dar include mențiunea `(DRY RUN)` la sfârșit.
Setarea Dimensiunii Minime și Maxime a Fișierului
Rsync permite setarea dimensiunilor minime și maxime ale fișierelor care vor fi transferate.
Pentru a transfera doar fișiere cu o dimensiune minimă de 15KB, utilizăm opțiunea `–min-size=15k`.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Comanda va copia numai fișierele care au o dimensiune minimă de 15KB, ignorând fișierele mai mici.
Pentru a seta dimensiunea maximă a fișierului, utilizăm opțiunea `–max-size`.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
În acest caz, rsync va ignora fișierele care depășesc dimensiunea de 450KB.
Setarea Limitei Lățimii de Bandă
Pentru a limita lățimea de bandă utilizată de rsync în timpul transferului, utilizăm opțiunea `–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 în timpul transferului.
Concluzie
Am ajuns la finalul acestui ghid despre comanda rsync. Am învățat cum să folosim rsync și am explorat o serie de comenzi utile.
Cu toate acestea, rsync oferă mult mai multe funcționalități. Pentru a explora toate detaliile, se recomandă consultarea manualului rsync, care acoperă fiecare aspect al acestui utilitar.
În plus, puteți consulta și diverse fișe de referință (cheat sheets) pentru linia de comandă în Windows, Linux și macOS.