Sincronitzant carpetes amb rsync

En aquesta publicació cobreixo el bàsic de rsync, en preparació per a una futura publicació que cobrirà els respatllers, i l’ús de rsync en conjunt amb cronjobs per automatitzar el procés de respatller. Des de la còpia i sincronització d’arxius i carpetes locals, al seu ús per transferir informació entre ordinadors. El seu ús com un servei quan SSH no es troba disponible va ser mogut a la seva pròpia secció.

Temes: Els principis bàsics de rsync a Copiant arxius i carpetes locals a Torejant amb els espais en blanc i altres caràcters rars a Actualitzar els continguts d’una carpeta a sincronitzant dues carpetes amb rsync a Comprimint els arxius abans de transferir-los a Transferint arxius entre dos sistemes remots a Excloent arxius i directoris a utilitzant rsync com un servei (mogut a la seva pròpia secció) a Alguns paràmetres addicionals de rsync a Notes a peu

Els principis bàsics de rsync

rsync és una eina de copiat molt versàtil que ve inclosa en gairebé totes les versions de Linux. Pot ser utilitzada com una eina avançada de copiat, permetent copiar arxius localment o remotament. A més pot ser utilitzada com una eina per respatllers, suporta la creació de respatllers incrementals.

rsync compta amb un famós famós algoritme delta-transfer que ens permet transferir arxius nous, així com els canvis recents a arxius existents, mentre ignora arxius que no han estat modificats. Addicionalment a això, el comportament de rsync pot ser personalitzat, ajudant-nos a automatitzar els respatllers, així mateix pot ser utilitzat com un servei per convertir l’ordinador en un servidor i permetre que altres clients de rsync es connectin a ella.

a més de la còpia d’arxius i carpetes locals, rsync ens permet copiar utilitzant com mitjà SSH (Secure Shell), RSH (Remote Shell) i pot executar-se com a servei en un ordinador i permetre a altres ordinadors connectar-se, quan rsync és usat com a servei escolta el port 873.

quan utilitzem rsync com a servei o quan fem servir RSH, les dades enviades entre ordinadors no viatja xifrat, per tant, si estàs transferint arxius entre dos ordinadors a la mateixa xarxa local, això és útil, però això no ha de ser utilitzat per a transferir arxius en xarxes insegures, com ho és Internet. Per a aquest propòsit SSH és el millor a utilitzar.

Està és la principal raó per la qual jo afavoreixo l’ús de SSH per als meus transferències, a més, gràcies al fet que és segur, molts servidors tenen el servei de SSH disponible. Però l’ús de rsync com a servei per a transferències en connexions ràpides, com és usualment el cas en xarxes locals, és útil. No tinc el servei de RSH funcionant en els meus ordinadors de manera que podries trobar que afavoreixo SSH en els exemples. Els exemples utilitzen SSH com el mitjà de transport per a les transferències entre ordinadors remotes, però en una publicació separada cobreixo l’ús de rsync com a servei.

Copiant arxius i carpetes locals

Per copiar els continguts d’una carpeta a una altra, reemplaçant els arxius de la carpeta de destinació, podem utilitzar:

rsync -rtv carpeta_origen/ carpeta_destino/

Nota que a la carpeta_origen vaig agregar una diagonal a al final, fer prevenir, que una nova carpeta sigui creada, si no afegim la diagonal, llavors una nova carpeta anomenada carpeta_origen serà creada el carpeta_destino. Per tant, si vols copiar els continguts d’una carpeta anomenada Imatges dins d’una carpeta anomenada Imatges que ja existeix, necessites afegir la diagonal a la fin, d’una altra manera, una carpeta anomenada Imatges serà creada dins de la carpeta anomenada Imatges que especifiquem com a destinació .

rsync -rtv origen/ destino/ a Representació gràfica de l'resultat després d'utilitzar rsync amb una diagonal a la fi de la carpeta d'origen.

rsync -rtv origen destino/ a Representació gràfica de l'resultat després d'utilitzar rsync sense una diagonal a la fi de la carpeta d'origen.

el paràmetre -r vol dir que farà la còpia recursiu de carpetes, és a dir, crearà tota l’estructura de les carpetes que hi ha dins carpeta_origen a carpeta_destino, i copiarà tots els fitxers que és trobin dins d’aquestes.

El paràmetre -t fa que rsync preservi els temps de modificació dels arxius que còpia de la carpeta origen.

El paràmetre -v significa que la informació impresa durant l’execució de el programa serà molt més detallada, podem utilitzar això per veure el progrés de la comanda.

aquests són els paràmetres que utilitzo freqüentment, ja que usualment estic recolzant arxius personals i aquests no contenen coses com vincles simbòlics, però un altre paràmetre molt útil que es pot utilitzar amb rsync és el paràmetre -a.

rsync -av origen/ destino/

el paràmetre -a també fa la còpia recursiva i preserva els temps de modificació, però addicionalment copia els vincles simbòlics que troba com vincles simbòlics, preserva els permisos, preserva la informació de l’amo i el grup de l’arxiu, i preserva els arxius de dispositiu i els arxius especials. Això és útil si s’està copiant complet directori personal d’un usuari, o si s’estan copiant carpetes de sistema a un altre lloc.

Torejant amb els espais en blanc i altres caràcters rars

Podem escapar espais i caràcters rars a l’igual que en Bash, utilitzant \ abans de qualsevol espai en blanc i caràcter rar. Addicionalment, podem utilitzar cometes senzilles per tancar la cadena de text:

rsync -rtv or\{ig\ en/ des\ ti\{no/
rsync -rtv 'or{ig en/' 'des ti{no/'

Actualitzar els continguts d’una carpeta

Per estalviar ample de banda i temps, podem evitar copiar arxius que ja tenim a la carpeta de destinació que no has estat modificats en la carpeta d’origen. Per fer això afegim el paràmetre -u a rsync, això actualitzarà els continguts de la carpeta destinació en la base de la carpeta d’origen, aquí és on l’algoritme delta-transfer entra. Per actualitzar els continguts d’una carpeta basats en els continguts d’una altra utilitzem:

rsync -rtvu carpeta_origen/ carpeta_destino/

Per default, rsync pren la data de l’última modificació de l’arxiu i la mida d’aquest per decidir que arxius necessiten ser transferits i que arxius poden ser ignorats, però podem utilitzar en lloc d’aquest mètode un hash per decidir si l’arxiu és diferent o no.

Per fer això necessitem usar el paràmetre -c, que realitzarà un checksum en els arxius a ser transferits. Això ignorarà qualsevol arxiu on el checksum coincideix.

rsync -rvuc carpeta_origen/ carpeta_destino/

sincronitzant dues carpetes amb rsync

Per mantenir dues carpetes en sincronia, no només necessitem afegir els nous arxius a la carpeta d’origen a la carpeta de destinació, també necessitem remoure els arxius que van ser esborrats de la carpeta origen a la carpeta destinació. rsync ens permet fer això amb el paràmetre –delete, això usat en conjunt amb el paràmetre previ -o que actualitza els arxius modificats ens permet mantenir dues carpetes en sincronia estalviant ample de banda.

rsync -rtvu --delete carpeta_origen/ carpeta_destino/

El procés d’esborrat es pot portar abans, durant i després de la transferència, podem controlar en quin moment passa utilitzant algun dels paràmetres següents:

  • rsync pot buscar els arxius que falten i esborrar-los abans de de el procés de transferència, aquest és el comportament per default i pot ser ajustat amb --delete-before
  • rsync pot buscar els arxius que falten i esborrar-los després que la transferència s’ha completat, amb el paràmetre --delete-after
  • rsync pot esborrar els arxius durant la transferència, quan es troba un arxiu que falta, s’esborraen aquest moment, activem aquest comportament amb --delete-during
  • rsync pot fer la transferència i trobar els arxius que falten durant aquest procés, esperar fins que ha acabat i esborrar els arxius que va trobar després, això es pot aconseguir amb --delete-delay

Per exemple:

rsync -rtvu --delete-delay carpeta_origen/ carpeta_destino/

Comprimint els arxius abans de transferir-

Per estalviar alguns d’ample de banda, i usualment estalviar una mica de temps també, podem comprimir la informació que està sent transferida, podem afegir el paràmetre -z a rsync per aconseguir això.

rsync -rvz carpeta_origen/ carpeta_destino/

Si estem transferint una gran quantitat d’arxius sobre una connexió ràpida, rsync pot ser més lent amb el paràmetre -z que sense el, ja que prendrà més temps comprimir cada arxiu que el temps que es prendria simplement fer la transferència dels arxius a l’carpeta_destino. Fes servir aquest paràmetre si tens una connexió amb velocitat limitada entre dos ordinadors, o si necessites estalviar ample de banda.

Transferint arxius entre dos sistemes remots

rsync pot copiar arxius i sincronitzar una carpeta local amb una carpeta remota en un sistema que compti amb accés via SSH, via RSH, o que estigui executant rsync com un servei. Els exemples aquí utilitzen SSH per a la transferència d’arxius, però els mateixos principis s’apliquen si vols fer això amb rsync funcionant com a servei a l’ordinador remota, llegeix Executant rsync com a servei quan SSH no està disponible més baix per a més informació sobre això.

per transferir fitxers entre l’ordinador local i un ordinador remota, necessitem especificar l’adreça de l’ordinador remota, pot ser un nom de domini, una adreça IP, o el nom d’un servidor que hàgim guardat prèviament en el nostre fitxer de configuració de SSH (informació sobre com fer això es pot veure a Definint servidors SSH), seguit de dos punts, i la carpeta que volem fer servir per a la transferència. Nota que rsync no pot transferir arxius entre dos sistemes remots, només una carpeta local o una carpeta remota poden ser utilitzades en conjunt amb una carpeta local. Per fer això fem servir:

Carpeta local a carpeta remota, utilitzant un domini, una adreça IP o un servidor definit en el fitxer de configuració de SSH: a rsync -rtvz carpeta_origen/ [email protected]:/ruta/a/carpeta_destino/ a rsync -rtvz carpeta_origen / [email protected]/ruta/a/carpeta_destino/ a rsync -rtvz carpeta_origen / nom_servidor: / ruta / a / carpeta_destino /

carpeta remota a carpeta local, utilitzant un domini, una adreça IP o un servidor definit en el fitxer de configuració de SSH: a rsync -rtvz [email protected]:/ruta/a/carpeta_origen/ carpeta_destino/ a rsync -rtvz usuari @ xxx.xxx.xxx.xxx:/ruta/a/carpeta_origen/ carpeta_destino / a rsync -rtvz nom_servidor: / ruta / a / carpeta_origen / carpeta_destino /

Excloent arxius i directoris

Hi ha molts casos en què necessitem excloure certs arxius i directoris de rsync, un cas comú és quan sincronitzem un projecte local amb un repositori remot o fins i tot amb un lloc viu, en aquest cas podríem voler excloure alguns directoris de desenvolupament i alguns arxius ocults de ser transferits a el lloc viu. Excloure arxius pot ser fet amb --exclude seguit de directori o l’arxiu que volem excloure. La carpeta d’origen o la carpeta de destinació poden ser un directori local o un directori remot com es va explicar en la secció prèvia.

rsync -rtv --exclude 'directorio' carpeta_origen/ carpeta_destino/
rsync -rtv --exclude 'archivo.txt' carpeta_origen/ carpeta_destino/
rsync -rtv --exclude 'direccion/a/directorio' carpeta_origen/ carpeta_destino/
rsync -rtv --exclude 'direccion/a/archivo.txt' carpeta_origen/ carpeta_destino/

Les rutes són relatives a la carpeta des de la qual estem trucant rsync, llevat que comenci amb una diagonal, en aquest cas la ruta seria absoluta.

una altra manera de fer això és crear un arxiu amb la llista d’arxius i directoris a excloure rsync, així com patrons (tots els arxius que caiguin dins el patró donat serien exclosos, * .txt exclouria qualsevol arxiu amb aquesta extensió), un per línia, i cridar aquest fitxer amb --exclude-from seguit de l’arxiu que volem utilitzar per a l’exclusió dels arxius. Primer vam crear i editar aquest arxiu en el nostre editor de text favorit, en aquest exemple utilitzo gedit, però pots utilitzar kate, Vim, nano, o qualsevol altre editor de text:

touch excluidos.txt
gedit excluidos.txt

En aquesta imatge podem afegir el següent:

directorio
direccion/relativa/a/directorio
archivo.txt
direccion/relativa/a/archivo.txt
/home/juan/directorio
/home/juan/archivo.txt
*.swp

I després cridem a rsync:

rsync -rvz --exclude-from 'excluidos.txt' carpeta_origen/ carpeta_destino/

a més a esborrar arxius que han estat eliminats de la carpeta de origen, com es va explicar en sincronitzant dues carpetes amb rsync, rsync pot esborrar de la destinació arxius que estan exclosos de la transferència, podem fer a través del paràmetre --delete-excluded, per exemple:

rsync -rtv --exclude-from 'excluidos.txt' --delete-excluded carpeta_origen/ carpeta_destino/

Aquesta comanda farà a rsync recursiu, preservarà els temps de modificació de la carpeta d’origen, incrementar la verbositat, excloure tots els arxius que caiguin dins dels patrons a l’arxiu ex cluidos.txt, i esborrar tots els arxius exclosos si hi ha a la carpeta de destinació.

Utilitzant rsync com un servei quan SSH no està disponible

Això va ser mogut a la seva pròpia secció, utilitzant rsync com a servei

Alguns paràmetres addicionals de rsync

-t Preserva els temps de modificació dels arxius que estan sent transferits.
-q Suprimeix tots els missatges que no siguin d’error, aquest paràmetre és contrari a l’paràmetre -v que mostra molta més informació de la transferència.
-d Copia els arxius d’un directori sense utilitzar recursivitat per copiar els directoris interns, en dir, només els arxius són transferits.
-l Copia els symlinks symlinks a -L Copia els arxiu als quals un symlink està apuntant quan trobi un symlink.
-W còpia arxius sencers, ja que quan fem servir l’algoritme de delta-transfer només es copia la part d’un arxiu que va ser actualitzada, algunes vegades això no és desitjat.
--progress Mostra el progrés dels arxius que estan sent transferits.
-h Mostra la informació que proveeix rsync en un format més llegible , les quantitats són donades en K s, M s, G s, i així successivament.

Notes a peu

La quantitat d’opcions que rsync ens brinda és immensa, podem definir exactament que arxius volem transferir, que arxius en específic volem comprimir, que arxius volem esborrar a la carpeta de destinació si aquests arxius existeixen, i podem lluitar amb arxius de sistema també, per a més informació podem usar man rsync i man rsyncd.conf

Deixeu la informació que fa a respatllers fora d’aquesta publicació, ja que això serà cobert, juntament amb l’automatització de l’procés de respatllers, en una publicació futura .

És possible utilitzar rsync en Windows per mitjà d’l’ús de cygwin, però no compto amb un ordinador amb Windows disponible de moment (o planatge tenir-la en el futur proper), així que encara que he fet això no puc publicar a l’respecte. No obstant això, si utilitzes rsync com un servei a Windows, necessites afegir la línia “scrict mode = false” en rsyncd.conf en el mòduls, això farà que rsync no revisi els permisos a l’arxiu de secrets ja que si ho fes fallaria per que no estaria apropiadament configurats (ja que no funcionen igual que a Linux).

Aquesta publicació podria ser actualitzada si hi ha alguna cosa que corregir o afegeixo més informació si ho veig necessari.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *