Rsync

De Guifi.net - Wiki Català

25px Aquesta wiki forma part dels materials d'un curs
Curs: DissenyXarxesLinux, LinuxAdministracioAvancada
Fitxers: GestioRemota.pdf
Repositori SVN: http://anonymous@svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%c3%a7ada
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas


Rsync és una millora de la comanda scp, amb més opcions, més flexibilitat i més rapidesa. La principal millora respecte a scp és que rsync permet copiar fitxers de forma incremental, copiant només les diferències. Altres avantatges són la capacitat de comprimir la informació abans d'enviar-la per la xarxa. Veiem un exemple:

rsync -e ssh -cavz fitxer_origen usuari_desti@maquina_desti:path_desti


Scripts per sincronitzar dos ordinadors

Rsync per fer còpies de seguretat unidireccionals cap problema. Però per sincronitzar fitxers en les dos direccions entre 2 ordinadors és una mica més complicat, perquè si en l'ordinador A hi ha el fitxer hola.txt i en l'ordinador B no hi és, pot ser que:

  • El fitxer no estava enlloc i s'ha creat en l'ordinador A: llavors caldria copiar-lo a B.
  • El fitxer estava als dos ordinadors i s'ha eliminat de l'ordinador B: llavors caldria eliminar-lo a A.

Una possible solució és utilitzar 2 scripts separats a l'ordinador secundari B. Un per fer baixar els fitxers de A a B i un altre per pujar-los de B a A. És qüestió de ser ordenat:

  1. baixar els fitxers de A a B (script FesVenirFitxers)
  2. Treballar amb l'ordinador B
  3. pujar-los de B a A (script FesMarxarFitxers)

Els scripts per l'usuari usuari que només estan a l'ordinador B són els següents:

$ more /home/usuari/Desktop/FesVenirFitxers
#! /bin/sh
rsync -e ssh -avuz --delete --exclude '.*' --exclude 'Fes*Fitxers' c@192.168.0.10:/home/usuari /home
$ more /home/usuari/Desktop/FesMarxarFitxers
#! /bin/sh
rsync -e ssh -avuz --exclude '.*' --exclude 'Fes*Fitxers' /home/usuari usuari@192.168.0.10:/home

Faig sincronització per dates perquè així els fitxers modificats ambdós costats es sincronitzen correctament (guanya el fitxer més actual). No em fa por perquè els 2 portàtils sincronitzen la data+hora per internet a l'arrancar.

L'script FesVenirFitxers té l'opció --delete perquè ordinador secundari B sigui un còpia fidel a A.

Però l'script FesMarxarFitxers no té l'opció --delete per no provocar desgràcies involuntàriament (si executes FesMarxarFitxers sense primer haver executat FesVenirFitxers). Això té com a conseqüència que els fitxers eliminats a B no s'eliminin a A, però no es greu si la feina grossa es fa a A (crear/modificar/eliminar fitxers) i a B només crear/modificar fitxers.


Còpies incrementals amb rsync

Podem utilitzar rsync per fer còpies incrementals sense malgastar espai en disc de la següent manera:

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/

o

rm -rf backup.3
mv backup.2 backup.3
mv backup.1 backup.2
mv backup.3 backup.tmp
mv backup.0 backup.1
rsync -a --delete --link-dest=../backup.1 source_directory/  backup.0/

Si aquest script s'executa diàriament (per exemple amb crontab) tindrem còpies incrementals del últims 3 dies.

Teniu en compte l'opció ---link-dest. Per més informació sobre HardLinks es pot consultar l'apartat corresponent de l'entrada Shells

Còpies remotes amb Rsync

Vegeu l'article Còpies remotes amb Rsync.

Exclude

Atenció amb els excludes i els patchs absoluts. El següent no funciona:

rsync -a /var/lib/* --exclude="/var/lib/moodle" /tftpboot/node_root/var/lib/

en canvi:

rsync -a /var/lib/* --exclude="moodle/" /tftpboot/node_root/var/lib/

Si que exclou correctament la carpeta moodle.

Filtres

El següent exemple exclou totes els moodle.mediawiki o mysql ja siguin fitxers o carpetes

rsync -a /var/lib/* --exclude=moodle --exclude=mediawiki --exclude=mysql /tftpboot/node_root/var/lib/

Per a indicar només carpetes cal fer:

rsync -a /var/lib/* --exclude=moodle/ --exclude=mediawiki/ --exclude=mysql/ /tftpboot/node_root/var/lib/

Exemples

Copiar només carpetes

Es pot fer combinant includes i excludes de la següent manera:

$ sudo rsync -a -u --include=*/ --exclude=* /var /tftpboot/node_root

Limitar l'ample de banda

Podem utilitzar el paràmetre bwlimit

$ rsync -e ssh -cavvvz --progress --bwlimit=10 FOTOS usuari@elmeudomini.org:/linux2

L'exemple limita la velocitat a 10 KBPS.


rsync en un port SSH diferent

Si voleu utilitzar un port de SSH diferent al estàndard:

$ rsync --progress -vrae 'ssh -p 8022' fitxer_origen fitxer_destinacio

Clonar disc

Instal·lar un servidor rsync

Teniu un exemple a la documentació:

/usr/share/doc/rsync/examples/rsyncd.conf       

NOTA: 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




Troubleshooting. Resolució de problemes

chgrp failed: Operation not permitted a FAT 32

Sies esteu fent una còpia de seguretat amb rsync sobre un dispositiu FAT32 i obteniu errors similars a:

rsync: chgrp "/media/disk/Torrents/tor0/cache/Ep 6 - 11am - 12pm.avi" failed: Operation not permitted (1)

És per què rsync no suporta operacions de grup. Podeu utilitzar el paràmetre --no-group.

# rsync -avv --no-group  --modify-window=1  --progress /linux2/linux2/FOTOS /media/disk

Vegeu també

Recursos

Eines de l'usuari