Rsync

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Rsync és una aplicació informàtica i un protocol de comunicació per sistemes estil Unix i Windows que sincronitza fitxers i directoris des de una ubicació cap a una altra minimitzant la transferència de dades. Rsync també permet fer còpia de fitxers i directoris fent servir compressió o recursivitat.

rsync -aP --delete [Carpeta orige] [Carpeta destí]
# Exemple de rsync per a fer cópies de seguretat incrementals

Mentre que l'algorisme rsync forma part del nucli de l'aplicació rsync i essencialment optimitza les transferències entre dues computadores sobre TCP/IP, l'aplicació rsync proveeix altres funcions que assisteixen en la transferència. Aquestes inclouen compressió i descompressió de les dades bloc per bloc, utilitzant zlib a enviar i rebre, i suport per a protocols de xifrat, tal com SSH, el que permet transmissió xifrada i eficientment diferenciada de dades comprimits utilitzant l'algorisme rsync.

Addicionalment pot utilitzar-se una aplicació de tunneling també per crear un túnel xifrat que asseguri les dades transmeses.

A més d'arxius, l'algorisme permet copiar directoris, tot recursivament, així com vincles, dispositius, grups i permisos. No requereix per defecte privilegis de root per al seu ús.

rsync va ser escrit com un reemplaçament de rcp i SCP. Una de les primeres aplicacions de rsync va ser el emmirallat (mirroring) o respatller de múltiples clients Unix dintre d'un servidor Unix central, utilitzant rsync / ssh i comptes estàndards d'Unix. Habitualment s'executa mitjançant eines de scheduling com cron, per automatitzar processos de sincronització entre múltiples ordinadors host i servidors centrals.

Copies de seguretat amb rsync

Una de les maneres més potents i bàsiques de fer copies de seguretat és rsync. Per exemple, imagina que tens un directori anomenat source/ i un altre destination/

rsync -a source/ destination/


Aquest comandament és equivalent a:

cp -a source/. destination/

En la diferència de que és molt més eficient.

Si el destí està en una màquina remota:

rsync -a -e ssh source/ username@remotemachine.com:/path/to/destination/

Es pot fer la transmissió per SSH

--delete

Les copies de seguretat poden ser absolutes o incrementals. Si són absolutes dona igual que s'utilitze cp que rsync. En el cas de les incrementals, el rsync sols envía les novetats de l'orige. D'aquesta manera la transmissió és molt més eficient.

Però hi ha un problema, si sols enviem els fitxers nous, els fitxers borrats no s'esborren del destí. Amb l'opció --delete, el destí serà exactament igual a l'orige.

$ rsync -a --delete source/ destination/

Cal utilitzar aquesta opció amb molta cura, ja que, si es fà la copia de seguretat després de borrar un fitxer important, es perdrà en els dos costats.

Es pot utilitzar cron:

$ crontab -e

Afegint:

20 4 * * * rsync -a --delete source/ destination/

Copies de seguretat incrementals

Observa aquest script:

rm -rf backup.3
mv backup.2 backup.3
mv backup.1 backup.2
cp -al backup.0 backup.1
rsync -a --delete source_directory/  backup.0/

Manté 4 copies de seguretat. La 1,2 i 3 són versions antigues de les copies de seguretat. La 0 es copia totalment a la 1 cada vegada. Però la 0 és actualitzada de manera incremental amb l'opció --delete. Si la copia 0 queda mal a causa del --delete, encara queda la 1,2 i 3 per poder recuperar coses perdudes.

Servidor rsync

Teniu un exemple a la documentació:

/usr/share/doc/rsync/examples/rsyncd.conf       
A Debian el fitxer és /usr/share/doc/rsync/sample-rsyncd.conf.gz

Primer cal però canviar el fitxer:

/etc/default/rsync

Només cal activar el servidor posant:

RSYNC_ENABLE=true

Però encara falta configurar-lo abans de poder-lo executar:

$ sudo /etc/init.d/rsync restart
 * Restarting rsync daemon  rsync                        
 * rsync daemon not running, attempting to start.
 * missing or empty config file /etc/rsyncd.conf

Podeu copiar l'exemple:

$ sudo cp /usr/share/doc/rsync/examples/rsyncd.conf  /etc

Ara cal dir que és el que compartim:

# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
#log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options= 

# MODULE OPTIONS

[ubuntu] 

        comment = Ubuntu Mirror
        path = /media/disk2/UbuntuMirror
        use chroot = yes
#       max connections=10
        lock file = /var/lock/rsyncd
# the default for read only is yes...
        read only = yes
        list = yes
        uid = sergi
        gid = sergi
#       exclude =
#       exclude from =
#       include =
#       include from =
#       auth users =
#       secrets file = /etc/rsyncd.secrets
        strict modes = yes
#       hosts allow =
#       hosts deny =
        ignore errors = no
        ignore nonreadable = yes
        transfer logging = no
#       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
        timeout = 600
        refuse options = checksum dry-run
        dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz 

El que està entre claudàtors és anomenat a anomenat mòdul (module) en la terminologia rsync i és el que s'indicar a la URL d'accés. Si no configurem el mòdul tindrem el següent error:

> rsync -a --progress --stats rsync://192.168.7.182/ubuntu .
@ERROR: Unknown module 'ubuntu'

Podeu comprovar que el port està obert amb:

$ sudo nmap -p 873 localhost

Starting Nmap 5.00 ( http://nmap.org ) at 2010-02-01 13:12 CET
Warning: Hostname localhost resolves to 2 IPs. Using 127.0.0.1.
Interesting ports on localhost (127.0.0.1):
PORT    STATE SERVICE
873/tcp open  rsync

rsync sobre SSH

Encara que rsync té el seu propi protocol de transferència. Pot ser recomanable utilitzar SSH. La manera és fer -e ssh. Rsync pot utilitzar el client SSH directament i podem utilitzar la mateixa sintaxi que amb el scp:

$ rsync -a -e ssh source/ username@remotemachine.com:/path/to/destination/
                      ^       ^         ^              ^
       Directori origen    Usuari @ URL o IP destí    : Directori destí

Opcions

Per a propòsits de backup, el rsync en la majoria dels casos s'utilitza amb l'opció-a:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Aquesta opció combina el paràmetre -r perquè el recorri tota l'estructura de directoris que li indiquem, el -l per que copiï enllaços simbòlics com enllaços simbòlics, la -p perquè mantingui els permisos, la -t perquè es mantingui l'hora del fitxer, la -g perquè es mantingui el grup, la -o perquè es mantingui el propietari, la -d perquè es mantinguin els fitxers de dispositiu (només per root). Ni es mantenen els hard links (-H) ni les ACLs (-A) per defecte. En definitiva, amb l'opció -a obtenim una còpia exacta d'una jerarquia de fitxers i directoris.

Altres opcions són:

  1. -v : --verbose Aumenta la verbositat del comandament. Mostra el fitxer que està copiant en aquest moment. El rendiment pot baixar, però si es vol fer el rsync vegent el que passa, és molt recomanable. Es pot utilitzar dues vegades per a mostrar encara més informació.
  2. -q : --quiet Decrementa la quantitat d'informació. És útil si es vol utilitzar amb cron.
  3. -W : --whole-file Una de les raons per les que rsync és eficient és que, sobre fitxers molt grans, pot copiar sols la part que ha canviat. Per a fer aixó, fà un checksum de troços del fitxer en l'origen i el destí. En copies locals, per defecte utilitza -W, ja que és més costós observar les diferències que copiar-ho tot.
  4. -z : --compress Comprimeix les dades abans d'enviar-les. En ocasions, és millor enviar-les sense comprimir, ja que la velocitat de la xarxa pot ser millor que la del processador intentant comprimir les dades.
  5. --size-only : Aquesta opció fà que el algoritme per trobar fitxers que han de ser transferits es simplifique tenin en compte sols els canvis en la mida del fitxer. Ja no mira si ha sigut també canviada la data de modificació. És molt útil si el destí no pot guardar bé la data de modificació. Per exemple, si el destí és un directori muntat amb Samba.
  6. --modify-window : Aquesta opció modifica la tolerància a variacions en la data de modificació. Per defecte està a 0, però pot ser necessari acceptar uns segons de error en determinats sistemes de destí com Windows.
  7. -c : --checksum : Esta modifica la manera en que rsync comprova que els fitxers han canviat. Per defecte s'utilitza l'anomenat "Quick check" que sols mira la mida i la data de modificació. En aquest cas es fa un checksum de 128 bits per als fitxers que tenen la mateixa mida. Aquest checksum pot fer molt més lenta la sincronització. Cal recordar que, de totes maneres, rsync sempre fa un checksum del fitxer destí després de la transferència que no té res a vorer amb aquest.
  8. -r : --recursive Per a copiar directoris recursivament. Aquesta opció està dins de -a.
  9. -R : --relative S'utilitza per a utilitzar rutes relatives. Aquesta opció envía tota la ruta al destí i no sols el nom dels fitxers.
  10. -b : --backup Amb aquesta opció, els fitxers preexistens en el destí son renombrats si el fitxer es transferit o esborrat.
    1. --backup-dir=DIR : Amb l'ús de l'opció -b, pots especificar a rsync on guardar totes les còpies de seguretat.
    2. --suffix=SUFFIX : Permet especificar el sufix per als fitxer sobre els que l'opció -b fa la còpia de seguretat.
  11. -u : --update Aquesta opció evita que un fitxer més nou en el destí siga modificar per un més vell en l'orige, encara que no tinguen la mateixa mida.
  12. --inplace : En compte de crear un nou fitxer i després borrar el vell, escriu damunt del vell. Els perills d'aquesta opció són la inconsistència i el fet d'actualitzar fitxers en ús. Sols s'ha d'utitzar si tenim que transferir fitxers molt grans que no caven en el destí.
  13. --append : Permet actualitzar un fitxer sols afegit les dades al final.
  14. -l : --links Manté els enllaços simbólics. Està dins de -a
  15. -L : --copy-links Copia els fitxers que són enllaçat simbólicament en l'orige.

Enllaços

http://rsync.samba.org/examples.html

http://es.wikipedia.org/wiki/Rsync

http://acacha.org/mediawiki/index.php/Rsync

http://www.mikerubel.org/computers/rsync_snapshots/

http://www.vicente-navarro.com/blog/2008/01/13/backups-con-rsync/