You are on page 1of 6

01/10/2010 Manual de aptosid - RSYNC

Respaldando con rsync

rsync es una herramienta para respaldar y sincronizar archivos. (Puede ejecutarse en


muchas variedades de *nix).

Una limitación de rsync es que NO puede copiar de un sistema remoto a otro sistema
remoto. Si necesita hacer esto, tendrá que copiar uno de los remotos a un sistema local, y
entonces copiarlo del local al otro sistema remoto. Esto es una limitación del rsync.

Con aptosid puede seleccionar cómo iniciar el proceso: desde la línea de comandos, o a
través de un paquete deb en Debian sid:

Para el paquete deb:


apt-get install luckybackup

Página web de luckybackup. (http://luckybackup.sourceforge.net/)

Lo que sigue aquí es la versión de línea de órdenes


Lo siguiente le dará un conocimiento funcional de las capacidades de rsync, y algunos
ejemplos de código para usar en un script propio de respaldo.

rsync es un programa para hacer copias de seguridad muy fácil de utilizar, que puede
respaldar archivos y directorios rápidamente. Esto se logra a través de una rutina muy
inteligente para detectar cuándo los archivos han cambiado para que solamente estos
archivos sean seleccionados para copiar. El rsync también utiliza una utilidad de
compresión para agilizar el proceso de copiado (cuando es lanzado con la opción -z
especificada). Esto puede ser explicado muy sencillamente:

El programa rsync detecta archivos y carpetas que necesitan ser copiados porque uno o
más de sus atributos han cambiado (por ejemplo, la fecha/hora de la última modificación, o
el tamaño del archivo), en cualquier caso, algo ha cambiado desde el último respaldo. Este
proceso de selección es muy rápido.

cuando el rsync ha terminado de preparar la lista que va a utilizar, la copia de estos


archivos cambiados es realizada mucho más rápidamente a causa de una rutina de
compresión realizada durante el copiado. El rsync comprime antes de enviar y
descomprime en el destino, 'sobre la marcha'.

rsync puede copiar archivos desde:


* sistema local a otro sistema local,
* sistema local a un sistema remoto,
* sistema remoto a un sistema local.

Se utiliza el cliente, ssh (ssh-es.htm) de forma preseleccionada, o a través de un daemon


rsync que se ejecuta tanto en el sistema local como en el remoto. Las páginas man dicen
que si puede usar ssh en el sistema, entonces rsync también puede usar ssh.

Una limitación de rsync es que NO puede copiar de un sistema remoto a otro sistema
remoto. Si necesita hacer esto, tendrá que copiar uno de los remotos a un sistema local, y
entonces copiarlo del local al otro sistema remoto. Esto es una limitación del rsync.

Para darle un ejemplo, digamos que tenemos tres sistemas;

…sidux.com/es/sys-admin-rsync-es.htm 1/6
01/10/2010 Manual de aptosid - RSYNC
neo --el sistema local
morpheus --un sistema remoto
trinity --otro sistema remoto

Supongamos que desea utilizar rsync para copiar o sincronizar las carpetas
/home/[user]/data de todos los sistemas en los otros. Cada sistema tiene un dueño
específico, en otras palabras, un usuario distinto utiliza cada sistema específicamente, y por
eso es aquel sistema el que debe ser usado como 'fuente' para los otros dos sistemas.
Además, estará ejecutando el comando rsync en el sistema local solamente, que es el
'neo':

el usuario principal de neo es cuddles,


el usuario principal de morpheus es tartie, y
el usuario principal de trinity es taylar

Entonces, lo que necesita hacer es copias de seguridad o sincronización de los siguientes:

El área /home/cuddles/Data de neo copiado a morpheus y trinity,


el área /home/tartie/Data de morpheus a neo y trinity, y
el área /home/taylar/Data área de trinity a neo y morpheus.

El problema de rsync de no poder copiar de un sistema remoto a otro sistema remoto


surge cuando llegamos al punto de respaldar trinity a morpheus, o de morpheus a trinity
(los dos sistemas fuente y destino son remotos) por ejemplo:

neo --> morpheus --bien, es local a remoto


neo --> trinity --bien, es local a remoto
morpheus --> neo --bien, es remoto a local
trinity --> neo --bien, es remoto a local
morpheus --> trinity --remoto a remoto --no funciona
trinity --> morpheus --remoto a remoto --no funciona

Para resolver esta limitación, necesita cambiar un poco el esquema de rsync. Lo siguiente
haría esto;

morpheus --> trinity --será: morpheus --> neo & neo --> trinity
trinity --> morpheus --será: trinity --> neo & neo --> morpheus

Es un paso extra, obviamente, pero considerando que desea llevar los archivos también a
neo, es solamente un cambio del origen de la fuente y no cambiará el resultado final. Así
nuestro respaldo será bueno y no faltará nada.

Deberá tener en cuenta esta limitación de rsync cuando diseñe el proceso de respaldo.

Utilizando hostnames con hostnames con rsync.


Como hemos descrito arriba, usar neo, morpheus o trinity en lugar de sus direcciones IP
físicas es un método limpio y fácil para hacer las cosas más fáciles de leer y entender.
Poder utilizar la sintaxis nombre de máquina a nombre de máquina con rsync es fácil de
hacer.

Necesitará editar el archivo /etc/hosts y agregar los hostnames y las direcciones IP


correspondientes. Aquí está una pequeña porción de las primeras líneas del archivo
/etc/hosts, mostrando las traducciones:

192.168.1.15 neo
192.168.1.16 morpheus
192.168.1.17 trinity

La primera línea traduce la dirección IP 192.168.1.15 al nombre de 'neo', la segunda


traduce 192.168.1.16 al nombre 'morpheus', y la tercera traduce la dirección IP
192.168.1.17 al nombre 'trinity'. Después de agregar lo de arriba y guardar el /etc/hosts,

…sidux.com/es/sys-admin-rsync-es.htm 2/6
01/10/2010 Manual de aptosid - RSYNC
puede utilizar el nombre en vez de la dirección IP o puede seguir utilizando la dirección IP.
Lo que hace esto realmente brillante es cuando cambia la dirección IP. Para darle un
ejemplo, vamos a suponer que la dirección IP de neo ha cambiado de 192.168.1.15 a
192.168.1.25

Si tiene todos los scripts usando la dirección IP actual, tendrá que ubicarla en todos y
cambiarlos a la nueva dirección. Pero si, de otra manera, en todos los scripts usa el
'nombre', lo único que tendrá que hacer es cambiar el archivo /etc/hosts para reflejar este
cambio y todos los scripts seguirán funcionando. Esto puede ser muy útil cuando tiene
muchos scripts para conexiones remotas a otros sistemas, o viceversa. El método de
'nombres' también hace que los scripts sean más fáciles de leer y seguir porque está
usando un nombre reconocible asociado a la dirección IP en vez de una cadena de
números.

rsync, y los dos maneras de utilizarlo.


Una manera es 'push' (empujar) archivos a un destino y el otro es 'pull' (halar, tirar)
archivos desde la fuente o origen. Cada uno tiene sus ventajas y algunas desventajas.
Vamos a estudiar cada una (para esta explicación, asumimos que uno de los sistemas es
local y que el otro es un sistema remoto para mejor clarificar algo de la terminología.)

'push' (empujar) - el sistema local tiene los archivos y directorios de fuente u origen
(source) en él, y la localización destinaria es un sistema remoto. El comando rsync es
ejecutado en el sistema local, y 'empuja' sus archivos al sistema destinario (target).

Ventajas:
* Es posible tener más de un sistema respaldándose a un sistema destinario.
* El proceso de respaldo es distribuido sobre los sistemas de computación y no solamente
un sistema haciendo todo el trabajo.
* Si un sistema es más veloz que otro, puede terminar antes de los demás y seguir con
otras tareas.

Desventajas:
* Si esta usando un script y programándolos con el 'cron', necesitará actualización y el
cambio de múltiples 'crontabs' en cada sistema, además de actualizar las versiones
múltiples del script.
* El respaldo no puede verificar si el sistema remoto tiene la partición destinaria montada,
por lo que puede no estar respaldando nada.

'pull' (tirar, halar) -- el sistema remoto tiene los archivos y directorios fuente u origen y el
sistema destinario está en el sistema local. El comando rsync se ejecuta en el sistema local
y 'tira' (pulls) los archivos desde el sistema fuente u origen.

Ventajas:
* Un sistema es convertido en el servidor, controlando todos los respaldos para todos los
demás sistemas. Es un respaldo centralizado.
* Si está usando un script éste está contenido en un sólo sistema y es un solo script, lo que
facilita sus actualizaciones y modificaciones.
* El script puede verificar, y montar si es necesario, la partición destinaria.

La sintaxis de rsync, como está descrita en las páginas man: (SRC = Fuente)
rsync [OPCION]... SRC [SRC]... DEST

rsync [OPCION]... SRC [SRC]... [USER@]HOST:DEST


rsync [OPCION]... SRC [SRC]... [USER@]HOST::DEST

rsync [OPCION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

…sidux.com/es/sys-admin-rsync-es.htm 3/6
01/10/2010 Manual de aptosid - RSYNC
rsync [OPCION]... SRC

rsync [OPCION]... [USER@]HOST:SRC [DEST]


rsync [OPCION]... [USER@]HOST::SRC [DEST]

rsync [OPCION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

Ejemplo funcional de comandos rsync:


rsync -agEvz --delete-after --exclude='*~' morpheus:/home/tartie
/media/sda7/SysBackups/morpheus/home

Vamos a revisar algunas partes de este comando:

la ruta a la fuente (SRC) es: morpheus:/home/tartie


y la ruta al destinario (DEST) es: /media/sda7/SysBackups/morpheus/home

todo desde /home/tartie... será respaldado en /media/sda7/SysBackups/morpheus/home lo


que resulta algo así:

/media/sda7/SysBackups/morpheus/home/tartie...

Hay que notar que la única razón por la que /tartie es ubicado en /home es por su
designación como destinario y NO desde la fuente. La 'fuente' (SRC) solamente
selecciona de dónde vienen los archivos, no a donde van. El destinario es lo que dice a
rsync dónde debe poner los archivos que recibe de la fuente (SRC). Consideremos el
siguiente ejemplo:

rsync [...] /home/user/data/files /media/sda7/SysBackups/neo

En el comando de arriba solamente el directorio /files y sus subdirectorios estarán en el


directorio destinario, /neo --y no : /media/sda7/SysBackups/neo/home/user/data/files

Siempre tenga esto en consideración cuando esté creando los comandos de respaldo con el
rsync.

Explicación de las opciones:


-a es utilizado para el modo de archivo. Según la página man, se explica
esta opción 'en términos sencillos
como una manera de respaldar recursivamente y preservar 'casi' todo.
Pero se menciona que este formato
no guarda los 'enlaces duros' (hardlinks) debido a la complejidad del
proceso. La opción '-a' se describe
como la equivalente a lo siguiente: -rlptgoD lo que quiere decir:
-r = recursivo – procesa sub-directorios y archivos encontrados en la
ubicación de la fuente o SRC.
-l = links (enlaces) – cuando los enlaces simbólicos (symlinks) se
encuentran, los recrea en el sistema destinario.
-p = permisos – dice a rsync a fijar los permisos en el destinaría
igual que el fuente (SRC).
-t = times (veces) – dice a rsync que fije la hora de los archivos en
el destinario igual a la hora en la
fuente 'source' (SRC).
-q = quieto – ordena a rsync dar la mínima salida en la pantalla,
aunque podemos agregar un cierto nivel
de verbosidad al incluir la opción '-v' justo después del '-q'. Para
hacer el proceso completamente silencioso,
borre el “v” del comando de arriba.
-o = owner (dueño) – indica a rsync que si está ejecutando como
superusuario (root), que fije los archivos
destinatarios con el mismo dueño que tiene la fuente (source).
-D = es el equivalente de usar estos dos: --devices --specials
--devices = causa que rsync transfiera archivos de dispositivos de
carácter y bloque al sistema remoto para
recrear estos dispositivos. Desafortunadamente, si no incluye la opción
'--super' en el mismo comando,
esto no tiene efecto.
--specials = causa que rsync trasfiera archivos especiales tales como
'sockets' nombrados y fifos.
-g es utilizado para preservar el atributo “group” de los archivos
fuente en el destinario.
-E es utilizado para preservar el atributo “executable” del archivo
…sidux.com/es/sys-admin-rsync-es.htm 4/6
01/10/2010 Manual de aptosid - RSYNC
fuente en el archivo destinario.
-v es utilizado para aumentar el nivel de verbosidad desplegado.
Después, cuando estamos seguros de que está
respaldando lo que deseamos, puede quitar el 'v'. Sigue incluido en
este ejemplo porque el proceso
se está ejecutado desde una tarea 'cron', y prefiere 'ver' lo que hace.
Cada usuario tiene que decidir esto.
-z se utiliza para comprimir los datos que serán transferidos o
copiados, con el resultado de que el proceso
de copia se realice más rápidamente, porque los datos que son
transferidos son más pequeños que el tamaño verdadero.
--delete-after (borrar después) = borrar los archivos destinaros después
de la transferencia, no antes.
Este 'después' se utiliza en caso de problemas o una rotura, y el
'delete' (borrar) es utilizado para eliminar
archivos destinatarios que ya no existen en el sistema fuente.
--exclude = un patrón con el que se pueden excluir archivos o carpetas.
En el ejemplo, --exclude=“*~” excluirá
CUALQUIER archivo o carpeta que termine en el carácter “~” al ser
respaldado. Solamente un patrón
puede ser suministrado con la opción '--exclude', por lo que si
necesita más de uno, tiene que incluir
líneas adicionales en la línea de comando.

Adicionalmente, aquí hay otras opciones útiles para la línea de comando:

-c – agrega otro nivel de verificaciones de las fuentes que se comparan


con la destinaria después del proceso
de copiado, pero implica más tiempo para el proceso de copiado, y el
rsync ya hace sus propias
comparaciones de los archivos fuente y destinario, entonces esta opción
no fue incluída porque se retrasa
el proceso completo y es solamente una redundancia innecesaria.
--super – implica, como dice la página man, que el sistema destinario
intenta realizar funciones
del superusuario, 'root'.
--dry-run – hace un simulacro de lo que será transferido sin transferir
ningún archivo. Es similar al uso de la
opción -s con el apt-get install o el apt-get dist-upgrade.

El resto de nuestro comando es el archivo/directorio de la fuente (SRC) y después la


ubicación del destino.

Ejemplos de algunos comandos:


rsync -agEvz --delete-after --exclude='*~' morpheus:/home/tartie
/media/sda7/SysBackups/morpheus/home

Este comando respalda todos los archivos y todas las carpetas y sus contenidos por debajo
de /home/tartie en el sistema de nombre 'morpheus', y los coloca en el directorio
/media/sda7/SysBackups/morpheus/home – dejando fuera la estructura del árbol del
directorio /tartie.

rsync -agEvz --delete-after --exclude='*~' /home/tartie'


'neo:/media/sda7/SysBackups/morpheus/home

Este comando es el contrario del anterior, 'empuja' (push) el directorio /home/tartie y todo
su contenido y subdirectorios hacia el sistema nombrado neo en la mismo carpeta --tome
nota de que un sistema se considera remoto cuando tiene dos puntos ':' (colon) al frente de
la ruta.

rsync -agEvz --delete-after --exclude='*~' /home/cuddles


/media/sda7/SysBackups/neo/home

Este comando realiza un respaldo local hacia un sistema local; note que no existe ningún ':'
(colon) ni en la fuente ni en el destinario. Este comando respalda localmente el área
/home/cuddles hacia la misma área en el mismo sistema:
/media/sda7/SysBackups/neo/home.

Veamos cómo es un comando rsync con exclusiones múltiples:

…sidux.com/es/sys-admin-rsync-es.htm 5/6
01/10/2010 Manual de aptosid - RSYNC
rsync -agEvz --delete-after --exclude='*~' --exclude='*.c' --
exclude='*.o' '/*' /media/sda7/SysBackups/neo

Este comando respalda TODO desde la raíz del sistema local con todos sus
archivos/directorios y lo coloca en la ubicación destinaria: /media/sda7/SysBackups/neo –
pero ahora se excluye cualquier archivo o directorio que termine con '~', '.c' ó '.o'

A continuación viene un ejemplo de un comando rsync que debe dar error y debe ser
evitado en lo posible. Es un ejemplo de un comando ilegal para rsync al intentar respaldar
directo de un sistema remoto a otro sistema remoto:

rsync -agEvz --delete-after --exclude='*~' morpheus:/home/tartie'


'trinity:/home

Como hemos mencionado anteriormente, esto es una limitación de rsync.

En un último comando de ejemplo veremos cómo aparece un rsync de remoto a local si


reemplazamos los 'system names” (nombres de sistemas) con el número de la dirección IP
efectiva.

Este primer comando es con el método 'name' (nombre), y el segundo es el mismo


comando utilizando la Dirección IP

rsync -agEvz --delete-after --exclude='*~' morpheus:/home/tartie'


'/media/sda7/SysBackups/morpheus/home

rsync -agEvz --delete-after --exclude='*~' 192.168.1.16:/home/tartie


/media/sda7/SysBackups/morpheus/home

Como dijimos anteriormente, no tiene que usar necesariamente los nombres traducidos
pero, como puede ver en el primer ejemplo, es más claro leer y entender lo que la orden va
hacer que en el segundo.

Ahora ya debe ser capaz de diseñar un comando básico a partir de los ejemplos dados
aquí, o a través de una mezcla y combinación de las opciones con los comandos para
conseguir el efecto y la acción deseada.

Página modificado el 14/08/2010 0100 UTC

…sidux.com/es/sys-admin-rsync-es.htm 6/6

You might also like