Documente Academic
Documente Profesional
Documente Cultură
http://www.vicente-navarro.com/blog/2008/01/13...
Lo hice y lo entend
El blog de Vicente Navarro
A nivel de un rbol de directorios con sus cheros, la idea es sencilla. rsync nos copiar
esos cheros y directorios tal y como estaban en el nuevo sitio pero sin copiar todo, sino
slo lo que ha cambiado en el origen respecto al destino. Hacer lo mismo copiando los
cheros y directorios, incluso en remoto usando una carpeta compartida, sera
equivalente si nos jamos nicamente en el resultado, pero tenemos que transferir
mucha ms informacin.
A nivel de cheros individuales, podemos imaginar un chero muy grande (p.e. de varios
GiB) de una base de datos. Si quisiramos hacer backup de l sin tener herramientas
como rsync, tendramos que copiarlo cada vez, cuando en realidad en muchos casos la
inmensa mayora de bloques del chero no habr cambiado. rsync, en cambio, analiza el
chero en origen y en destino y slo transmite (de forma comprimida, adems) las partes
que realmente hayan cambiado.
Debian, por ejemplo, pone a nuestra disposicin servidores de rsync para descargar sus
imgenes de CDs, aunque hay un debate sobre si el descenso en el uso de ancho de
banda de los servidores compensa el aumento en el uso de CPU y memoria a causa del
propio algoritmo de rsync (About integration of rsync and Debian). Y es que rsync consume
la CPU necesaria para su algoritmo y adems mantiene en memoria una lista con todos
los cheros a ser sincronizados (unos 100 bytes por cada uno), por lo que necesita
bastante memoria. Tambin se debate el problema de que el rsync no es muy eciente
con cheros comprimidos con gzip y con bzip2 porque un pequeo cambio en el contenido
modica en cadena todo el archivo creando una especie de efecto mariposa que causa
que dos archivos parecidos no guarden ninguna semejanza aprovechable por rsync tras la
compresin.
En cualquier caso, si las anteriores pequeas pegas no nos detienen, veremos que rsync
es, en denitiva, una excelente utilidad de lnea de comandos para hacer copias de
1 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
rsync
es:
Pero si el comando lo ejecutamos desde otro usuario (en el ejemplo root), vemos que no
se est manteniendo el usuario, aunque s los permisos, y que incluso la hora es
diferente:
# rsync fichero1 fichero3
# ll fichero?
-rw-r----- 1 vicente users 7625431 2008-01-13 11:40 fichero1
-rw-r----- 1 vicente users 7625431 2008-01-13 11:41 fichero2
-rw-r----- 1 root
root 7625431 2008-01-13 11:44 fichero3
rsync
Esta opcin combina el parmetro -r para que el recorra toda la estructura de directorios
que le indiquemos, el -l para que copie enlaces simblicos como enlaces simblicos, la -p
para que mantenga los permisos, la -t para que se mantenga la hora del chero, la -g
para que se mantenga el grupo, la -o para que se mantenga el propietario, la -D para que
se mantengan los cheros de dispositivo (slo para root). Ni se mantienen los hard links
2 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
-a
13081336.00 bytes/sec
Sin embargo, vemos que aunque el chero sea slo ligeramente distinto,
el chero completo cada vez:
rsync
copia todo
$ rm fichero2
$ rsync -av fichero1 fichero2
fichero1
sent 7626462 bytes received 42 bytes 15253008.00 bytes/sec
total size is 7625445 speedup is 1.00
$ echo prueba >> fichero1
$ rsync -av fichero1 fichero2
fichero1
sent 7626469 bytes received 42 bytes 15253022.00 bytes/sec
total size is 7625452 speedup is 1.00
No es que haya ningn defecto en su algoritmo, es que para un uso en local, rsync usa la
opcin -W por defecto, ya que considera que el esfuerzo en calcular la diferencia entre los
cheros es mayor que copiar directamente todo el chero:
-W, --whole-file
Si contrarrestamos la -W con --no-whole-file veremos que que ahora s que slo copia el
bloque donde ha encontrado el cambio:
3 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
-z,
dirB)
para que
$ rm -rf dirB
4 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
4
4
2
2
1
1
vicente
vicente
vicente
vicente
vicente
vicente
13081352.00 bytes/sec
11:48
14:00
11:48
11:59
13:59
11:39
./
../
dirA1/
dirA2/
fichero1*
fichero2
dirA
dentro de
dirB,
$ rm -rf dirB
$ rsync -av dirA dirB
building file list ... done
created directory dirB
dirA/
dirA/fichero1
dirA/fichero2
dirA/dirA1/
dirA/dirA1/fichero3
dirA/dirA2/
dirA/dirA2/fichero4
sent 6540549 bytes received 126 bytes
total size is 6539356 speedup is 1.00
13081350.00 bytes/sec
$ ll dirB
total 12
drwxr-xr-x 3 vicente users 4096 2008-01-13 13:35 ./
drwxr-xr-x 4 vicente users 4096 2008-01-13 13:35 ../
drwxr-xr-x 4 vicente users 4096 2008-01-13 11:48 dirA/
La diferencia entre poner la barra al nal y no ponerla es una de las cosas que tenemos
que tener en todo momento ms claras a la hora de pensar en qu parmetros le vamos
a pasar al comando para hacer un backup con rsync con xito.
Eliminando cheros del destino de backups anteriores
En muchos casos, es posible que hayamos borrados cheros de origen que ya no
queremos que aparezcan en el destino, pero por defecto rsync no los elimina. Para que lo
haga, debemos usar la opcin --delete:
5 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
$ rm -rf dirB/
$ rsync -a dirA/ dirB/
$ touch dirB/ficheroextrao
$ rsync -av dirA/ dirB/
building file list ... done
./
sent 199 bytes received 26 bytes 450.00 bytes/sec
total size is 6539363 speedup is 29063.84
$ rsync -av --delete dirA/ dirB/
building file list ... done
deleting ficheroextrao
./
sent 199 bytes received 26 bytes 450.00 bytes/sec
total size is 6539363 speedup is 29063.84
Cuando se hagan pruebas con el --delete hay que llevar mucho cuidado, porque si
elegimos errneamente el directorio de destino podemos borrar en cascada muchsimos
cheros que no queramos borrar. Es por eso que se aconseja que se use en las pruebas
la opcin -n/--dry-run para que el comando no haga nada en realidad y as podamos
depurar el comando antes de ponerlo en funcionamiento denitivamente.
Otra opcin que puede ser interesante en algunos entorno es la -u, para que no se
sobreescriban los cheros del destino que son ms recientes que los del origen. Esta
opcin es til si es posible que en un momento dado se trabaje sobre los cheros del
backup, de modo que en ningn caso reemplacemos los archivos que se puedan haber
modicado en destino:
$ touch dirB/fichero1
$ rsync -av --delete dirA/ dirB/
building file list ... done
fichero1
sent 65885 bytes received 42 bytes 131854.00 bytes/sec
total size is 6539363 speedup is 99.19
$ touch dirB/fichero1
$ rsync -av --delete -u dirA/ dirB/
building file list ... done
sent 193 bytes received 20 bytes 426.00 bytes/sec
total size is 6539363 speedup is 30701.23
rsync
rsync
rsync
rsync
-av
-av
-av
-av
--delete
--delete
--delete
--delete
directorioorigen/ directoriodestino/
directorioorigen directoriodestino
-u directorioorigen/ directoriodestino/
-u directorioorigen directoriodestino
Backups incrementales
Si queremos tener un archivo con los cheros que vamos modicando, un backup
6 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
--backup-dir=DIR
dirB
(y tambin
--suffix=SUF)
son de
perfectamente sincronizados y
Y vemos que ya tenemos un directorio de backup que slo contiene los chero que han
sido reemplazados esta vez:
$ ll
total 20
drwxr-xr-x 5 vicente users 4096
drwxr-x--- 56 vicente users 4096
drwxr-xr-x 2 vicente users 4096
drwxr-xr-x 4 vicente users 4096
drwxr-xr-x 5 vicente users 4096
2008-01-13
2008-01-13
2008-01-13
2008-01-13
2008-01-13
19:18
18:43
19:17
11:48
11:48
./
../
backup_0801131917/
dirA/
dirB/
$ ll backup_0801131917/
total 80
drwxr-xr-x 2 vicente users 4096 2008-01-13 19:17 ./
drwxr-xr-x 5 vicente users 4096 2008-01-13 19:18 ../
-rwxr-xr-x 1 vicente users 65701 2008-01-13 19:17 fichero1*
7 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
2008-01-13
2008-01-13
2008-01-13
2008-01-13
19:17
19:21
11:48
11:48
backup_0801131917/
backup_0801131921/
dirA/
dirB/
2008-01-13 19:21 ./
2008-01-13 19:21 ../
2008-01-13 19:20 fichero2/
--copy-dest
8 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
Los patrones que usa rsync no son muy intuitivos, as que lo mejor es leer detenidamente
la seccin que los explica (INCLUDE/EXCLUDE PATTERN RULES) en la pgina de man de rsync, pero
podemos ver un ejemplo que nos aclarar un poco este tema.
Imaginemos que queremos hacer un backup de los directorios /var/log/ y /var/www/.
Podramos usar un comando como:
rsync -av --delete --prune-empty-dirs --include-from=lista_dirs_backup.txt / /mnt/disco/Backup/
en el que el chero
+
+
+
-
lista_dirs_backup.txt
contiene:
*/
/var/www/**
/var/log/**
*
--prune-empty-dirs
/var/
/var/www/
/var/log/
/var/www/**
/var/log/**
*
Pero es evidente que en el caso de tener muchos directorios y con mucha profundidad,
esta forma se puede complicar mucho y es claramente ms sencilla la anterior (aunque
tambin es ms lenta por tener que recorrer todos los directorios del origen).
En versiones de rsync >=2.6.7 tambin existe la posibilidad de poner tres asteriscos ( ***)
para especicar que el propio directorio especicado tambin pasa el ltro,
facilitndonos nuestra labor en el caso de que queramos hacerlo sin + */ y sin --pruneempty-dirs:
+
+
+
-
9 of 12
/var/
/var/www/***
/var/log/***
*
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
2007-10-31
2007-12-09
2008-01-13
2007-06-27
21:10
18:19
18:43
20:19
./
../
log/
www/
/var/:
lista_dirs_backup.txt
www
log
www/**
log/**
*
4096
4096
4096
4096
2007-10-31
2008-01-13
2008-01-13
2007-06-27
21:10
20:07
18:43
20:19
/var/:
./
../
log/
www/
Pero como regla fcil que siempre funciona, tenemos lo primero que hemos comentado.
Un comando como este:
rsync -av --delete --prune-empty-dirs --include-from=lista_dirs_backup.txt / /mnt/disco/Backup/
con un
+
+
+
+
-
lista_dirs_backup.txt
como este:
*/
/directorio1/**
/directorio2/directorio2A/**
/directorio2/directorio2B/**
*
rsync remoto
Hasta ahora hemos hecho todos los ejemplos en local. Sin embargo, la mxima utilidad
de rsync llega cuando se usa para hacer backups en una mquina remota, de forma que
el backup cumpla mejor su funcin al estar fsicamente en otro sistema.
En la mquina destino es posible usar el propio proceso rsync funcionando como demonio
y escuchando por defecto en el puerto 873 para recibir estas conexiones, pero es mucho
10 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
ms cmodo y fcil hacerlo por SSH, algo para lo que rsync ya est preparado por
defecto.
Para esto es conveniente congurar el cliente y el servidor de SSH involucrados para
entrar de forma transparente usando autenticacin por clave pblica (Autenticacin
trasparente por clave pblica/privada con OpenSSH) para evitar tener que introducir la
contrasea cada vez, aunque no es estrictamente necesario. Una vez que lo tengamos
as (o si optamos por introducir la contrasea manualmente) y veriquemos que
podemos entrar en la otra mquina sin introducir usuario ni contrasea, podemos usar
rsync exactamente igual que si trabajramos con la mquina local, solo que tenemos que
especicar el prejo usuario@maquina: en el origen o en el destino (no en ambos):
$ rsync -av --delete dirA vicente@remoto:/backup/
building file list ... done
dirA/
dirA/fichero1
dirA/fichero2
dirA/dirA1/
dirA/dirA1/fichero3
dirA/dirA2/
dirA/dirA2/fichero4
sent 6540658 bytes received 126 bytes
total size is 6539461 speedup is 1.00
2616313.60 bytes/sec
2616316.40 bytes/sec
Enlaces
rsync FAQ
rsync examples
Ivn Lpez: Rsync vs BackupPc vs Link-Backup
Rsync software for Co-operative Incremental and full Mirroring
rsync synchronizing two le trees
rsync Manual SGML
Easy Automated Snapshot-Style Backups with Linux and Rsync
:wq
Entradas relacionadas
11 of 12
06/10/14 20:06
http://www.vicente-navarro.com/blog/2008/01/13...
rdidir: Sincronizando directorios entre sistemas distintos sin usar la red (4)
Hosting casero HOWTO (4)
El paso a UTF-8 con Ubuntu Hardy Heron: rsync entre sistemas con distinto juego de
caracteres (4)
Piensas en si un da te roban el porttil? (4)
VPN con OpenSSH (3)
Usando ntfsclone y dd para clonado por red con netcat (3)
Esta entrada fue publicada bajo una licencia CC el 13 enero 2008 a las 22:53 y pertenece
a la categora GNU/Linux, UNIX. Etiquetas: backup, Cygwin, GNU/Linux, OpenSSH, rsync,
Windows. Puedes seguir las respuestas a travs de RSS. No puedes dejar comentarios ni
hacer trackback.
12 of 12
06/10/14 20:06