Article original: How To Use Rsync to Sync Local and Remote Directories
Traduït per retiolus, útlima actualització: 2023-04-14
Introducció Link to heading
Rsync, que significa sincronització remota, és una eina de sincronització de fitxers remota i local. Utilitza un algorisme per minimitzar la quantitat de dades copiades movent només les parts dels fitxers que han canviat.
En aquest tutorial, definirem Rsync, revisarem la sintaxi al utilitzar rsync
, explicarem com utilitzar Rsync per sincronitzar amb un sistema remot i altres opcions disponibles.
Requisits previs Link to heading
Per practicar l’ús de `rsync per sincronitzar fitxers entre un sistema local i remot, necessites dues màquines que actuïn com a ordinador local i com a màquina remota, respectivament. Aquestes dues màquines podrien ser servidors privats virtuals, màquines virtuals, contenidors o ordinadors personals sempre que s’hagin configurat correctament.
Si tens previst seguir aquesta guia utilitzant servidors, seria prudent configurar-los amb usuaris administratius i configurar un tallafoc a cadascun d’ells. Per configurar aquests servidors, segueix la nostra Guia de configuració inicial del servidor.
Independentment dels tipus de màquines que utilitzis per seguir aquest tutorial, hauràs d’haver creat claus SSH en totes dues. A continuació, copia la clau pública de cada servidor al fitxer authorized_keys de l’altre servidor, tal com es descriu al segon pas d’aquesta guia.
Aquesta guia s’ha validat en màquines amb Ubuntu 20.04, tot i que, en general, hauria de funcionar amb qualsevol ordinador amb un sistema operatiu basat en Linux que tingui instal·lat rsync.
Definició de Rsync Link to heading
Rsync és una eina de sincronització de xarxa molt flexible. A causa de la seva ubiqüitat en sistemes Linux i similars a Unix i la seva popularitat com a eina per als scripts del sistema, s’inclou a la majoria de distribucions de Linux de manera predeterminada.
Entendre la sintaxi de Rsync Link to heading
La sintaxi per a rsync
és similar a altres eines, com ara ssh
, scp
i `cp.
Primer, canvia al teu directori d’inici executant l’ordre següent:
$
cd ~
A continuació, crea un directori de prova:
$
mkdir dir1
Crea un altre directori de prova:
$
mkdir dir2
Ara afegeix alguns fitxers de prova:
$
touch dir1/fitxer{1..100}
Ara existeix un directori anomenat `dir1 amb 100 fitxers buits. Confirma enumerant els fitxers:
$
ls dir1
Output
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
També tens un directori buit anomenat dir2
. Per sincronitzar el contingut de dir1
amb dir2
al mateix sistema, executaràs rsync
i utilitzaràs l’argument -r
, que significa “recursiu” i és necessari per a la sincronització de directoris:
$
rsync -r dir1/ dir2
Una altra opció és utilitzar l’argument -a
, que és un indicador de combinació i significa “arxiu”. Aquesta argument sincronitza de forma recursiva i conserva els enllaços simbòlics, els fitxers especials i de dispositius, els temps de modificació, els grups, els propietaris i els permisos. S’utilitza més habitualment que -r
i és l’argument recomenat a utilitzar. Executa la mateixa ordre que l’exemple anterior, aquesta vegada utilitzant el senyalador -a
:
$
rsync -a dir1/ dir2
Tingues en compte que hi ha una barra inclinada (/
) al final del primer argument a la sintaxi de les dues ordres anteriors i es destaquen aquí:
$
rsync -a dir1[/] dir2
Aquesta barra inclinada al final indica el contingut de dir1
. Sense la barra inclinada al final, dir1
, inclòs el directori, es col·locaria dins de `dir2. El resultat crearia una jerarquia com la següent:
~/dir2/dir1/[fitxers]
Un altre consell és revisar els teus arguments abans d’executar una ordre rsync
. Rsync proporciona un mètode per fer-ho passant les opcions -n
o --dry-run
. L’argument -v
, que significa “verbositat”, també és necessari per obtenir la sortida adequada. Combinaràs les marques a
, n
i v
a la següent comanda:
$
rsync -anv dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
Ara compara aquesta sortida amb la que rebs en eliminar la barra inclinada final, com es mostra a continuació:
$
rsync -anv dir1 dir2
Output
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
. . .
Aquesta sortida demostra ara que s’ha transferit el directori en si, en lloc de només els fitxers del directori.
Utilitzar Rsync per sincronitzar amb un sistema remot Link to heading
Per utilitzar rsync
per sincronitzar-se amb un sistema remot, només necessites l’accés SSH configurat entre les teves màquines locals i remotes, així com rsync
instal·lat als dos sistemes. Un cop hàgis verificat l’accés SSH entre les dues màquines, pots sincronitzar la carpeta dir1
de la secció anterior amb una màquina remota mitjançant la sintaxi següent. Tingues en compte, en aquest cas, que vols transferir el directori real, de manera que ometràs la barra inclinada final:
$
rsync -a ~/dir1 [usuari]@[amfitrió_remot]:[directori_destinació]
Aquest procés s’anomena operació push perquè “envia” un directori del sistema local a un sistema remot. L’operació oposada és pull, i s’utilitza per sincronitzar un directori remot amb el sistema local. Si el directori dir1
estigués al sistema remot en lloc del teu sistema local, la sintaxi seria la següent:
$
rsync -a [usuari]@[amfitrió_remot]:[/home/usuari/dir1] [lloc_per_sincronitzar_a_màquina_local]
Igual que cp
i eines similars, la font sempre és el primer argument i la destinació sempre és el segon.
Ús d’altres opcions de Rsync Link to heading
Rsync ofereix moltes opcions per alterar el comportament predeterminat de la utilitat, com ara els arguments has après a la secció anterior.
Si estàs transferint fitxers que encara no s’han comprimit, com ara fitxers de text, pots reduir la transferència de xarxa afegint compressió amb l’argument -z
:
$
rsync -az [origen] [destí]
L’argument -P
també és útil. Combina els arguments --progress
i --partial
. Aquest primer indicador proporciona una barra de progrés per a les transferències, i el segon indicador et permet reprendre les transferències interrompudes:
$
rsync -azP [origen] [destí]
Output
sending incremental file list
created directory destination
source/
source/file1
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101)
sourcefile10
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101)
source/file100
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101)
source/file11
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101)
source/file12
0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101)
. . .
Si tornes a executar l’ordre, rebràs una sortida escurçada ja que no s’han fet canvis. Això il·lustra la capacitat de Rsync d’utilitzar els temps de modificació per determinar si s’han fet canvis:
$
rsync -azP [origen] [destí]
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
Suposem que has d’actualitzar l’hora de modificació d’alguns dels fitxers amb una ordre com la següent:
$
touch dir1/fitxer{1..10}
Aleshores, si tornes a executar rsync
amb -azP
, notaràs a la sortida com Rsync torna a copiar de manera intel·ligent només els fitxers modificats:
$
rsync -azP [origen] [destí]
Output
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)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
Per mantenir dos directoris realment sincronitzats, cal esborrar fitxers del directori de destinació si s’eliminen de l’origen. Per defecte, rsync
no elimina res del directori de destinació.
Pots canviar aquest comportament amb l’opció --delete
. Abans d’utilitzar aquesta opció, pots utilitzar -n
, l’opció --dry-run
, per realitzar una prova per evitar la pèrdua de dades no desitjada:
$
rsync -an --delete [origen [destí]
Si prefereixes excloure determinats fitxers o directoris situats dins d’un directori que estàs sincronitzant, pots fer-ho especificant-los en una llista separada per comes seguint l’opció --exclude=
:
$
rsync -a --exclude=[patró_per_excloure] [origen] [destí]
Si tens un patró especificat per excloure, pots anul·lar aquesta exclusió per als fitxers que coincideixin amb un patró diferent mitjançant l’opció --include=
:
$
rsync -a --exclude=[patró_per_excloure] --include=[patró_per_incloure] [origen] [destí]
Finalment, l’opció --backup
de Rsync es pot utilitzar per emmagatzemar còpies de seguretat dels fitxers importants. S’utilitza juntament amb l’opció --backup-dir
, que especifica el directori on s’han d’emmagatzemar els fitxers de còpia de seguretat:
$
rsync -a --delete --backup --backup-dir=[/path/to/backups] [/path/to/source] [destí]
Conclusió Link to heading
Rsync pot agilitzar les transferències de fitxers a través de connexions de xarxa i afegir robustesa a la sincronització de directoris locals. La flexibilitat de Rsync el converteix en una bona opció per a moltes operacions diferents a nivell de fitxer.
Un domini de Rsync et permet dissenyar operacions de còpia de seguretat complexes i obtenir un control detallat sobre com i què es transfereix.