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ă.