Está en la página 1de 9

Rsync (Remote Sync, es decir sincronizacin remota) es una popular y poderosa herramienta utilizada

para copiar y sincronizar archivos y directorios entre sistemas Linux/Unix remotos o locales. Con la ayuda
de rsync, podemos fcilmente copiar/sincronizar datos entre directorios locales y remotos, a travs de
distintas unidades y redes, e incluso podemos respaldar archivos y hacer prcticamente cualquier cosa que
involucre el copiado de datos. Hoy vamos a comentarles algunos usos prcticos que le podemos dar a rsync.

Primero que nada, cules son las ventajas de usar rsync y no otras herramientas con los mismos propsitos?
Pues posee varias:

-Es eficiente cuando se trata de copiar y/o sincronizar archivos en forma local o remota.
-Permite copiar permisos, grupos y propietarios.
-Es ms rpido que otra conocida herramienta, scp, a la hora de hacer sincronizaciones, ya que necesita
copiar archivos enteros solo la primera vez. A partir de la segunda, solo copiar los datos que hayan
cambiado.
-Consume menos transferencia ya que comprime (y posteriormente descomprime en el destino) los datos.

La sintaxis bsica de rsync es la siguiente:

rsync opciones fuente destino

1 rsync opciones fuente destino

Las opciones utilidas ms comunmente son:

-v: modo verboso.


-r: copia datos en forma recursiva pero no mantiene permisos ni propietarios.
-a: modo de archivo. Copia datos en forma recursiva y mantiene propietarios y permisos.
-z: comprime los datos al copiar.
-h: muestra nmeros amigables para el usuario.

Su instalacin es muy sencilla:

yum install rsync (en sistemas b


apt-get install rsync (en sistema

1 yum install rsync (en sistemas basados en Red Hat)


2 apt-get install rsync (en sistemas basados en Debian)

Veamos algunos ejemplos de su uso a continuacin:

1) Copiar archivo a un directorio local:

En este caso, copiaremos el archivo test.tar ubicado en la carpeta /home hacia la carpeta /tmp/pruebas
rsync -zvh /home/test.tar /tmp/pruebas/

1 rsync -zvh /home/test.tar /tmp/pruebas/

2) Copiar un directorio local a otro:

h /home/directorio1/* /tmp/pruebas/

1 rsync -avzh /home/directorio1/* /tmp/pruebas/

Este comando copiar todos los archivos dentro de la carpeta /home/directorio1 hacia la carpeta
/tmp/pruebas

3) Copia de un archivo a un directorio de un servidor remoto:

rsync -zvh /home/test.tar root@

1 rsync -zvh /home/test.tar root@000.000.0.000:/root/

Con la sintaxis anterior estaremos copiando el archivo /home/test.tar al directorio /root del servidor
identificado con la IP 000.000.0.000.

4) Copia de un directorio a un servidor remoto:

A continuacin copiaremos el contenido del directorio /tmp/pruebas hacia el directorio /root del
servidor 000.000.0.000:

bas/* root@000.000.0.000:/root/

1 rsync -avz /tmp/pruebas/* root@000.000.0.000:/root/

5) Opcin dry-run

Esta es una opcin muy interesante y ms que nada muy til para quienes recin estn comenzando a usar
rsync. Qu hace esta opcin? Pues se trata de una especie de simulacro: bsicamente, nos muestra en
pantalla lo que copiara rsync, pero sin copiarlo. Veamos un ejemplo:

Creamos un directorio de prueba:


[root@servidor:~]mkdir /root/temp2

1 [root@servidor:~]mkdir /root/temp2

Realizamos la copia de un archivo usando dry-run:

[root@servidor:~]rsync --dry-run -zv


prueba.txt
sent 34 bytes received 15 bytes 98.0
total size is 0 speedup is 0.00 (DRY R

1 [root@servidor:~]rsync --dry-run -zvh prueba.txt /root/temp2/


2 prueba.txt
3 sent 34 bytes received 15 bytes 98.00 bytes/sec
4 total size is 0 speedup is 0.00 (DRY RUN)

Verificamos el contenido del directorio:

[root@servidor:~]ls -lah /root/te


total 8.0K
drw xr-xr-x 2 root root 4.0K Oct
dr-xr-x--- 9 root root 4.0K Oct 1

1 [root@servidor:~]ls -lah /root/temp2/


2 total 8.0K
3 drwxr-xr-x 2 root root 4.0K Oct 11 17:58 .
4 dr-xr-x--- 9 root root 4.0K Oct 11 17:58 ..

Gracias a dry-run hemos podido previsualizar lo que sucedera si ejecutamos el comando normalmente,
cosa que haremos a continuacin:

[root@servidor:~]rsync -zvh pr
prueba.txt
sent 67 bytes received 31 bytes
total size is 0 speedup is 0.00

1 [root@servidor:~]rsync -zvh prueba.txt /root/temp2/


2 prueba.txt
3 sent 67 bytes received 31 bytes 196.00 bytes/sec
4 total size is 0 speedup is 0.00
5 [root@servidor:~]ls -lah /root/temp2/
6 total 8.0K
7 drwxr-xr-x 2 root root 4.0K Oct 11 18:01 .
8 dr-xr-x--- 9 root root 4.0K Oct 11 17:58 ..
9 -rw-r--r-- 1 root root 0 Oct 11 18:01 prueba.txt

Las posibilidades de rsync son muchsimas, esto que han visto no es ms que el principio. La documentacin
de la herramienta y todo lo relacionado a ella pueden verlo en su pgina oficial.
Sincronizando carpetas con rsync
martes 02 noviembre 2010 | In English

En esta publicacin cubro lo bsico de rsync, en preparacin para una futura publicacin que cubrir los
respaldos, y el uso de rsync en conjunto con cronjobs para automatizar el proceso de respaldo. Desde la
copia y sincronizacin de archivos y carpetas locales, a su uso para transferir informacin entre
computadoras. Su uso como un servicio cuando SSH no se encuentra disponible fue movido a su propia
seccin.

Temas
Los principios bsicos de rsync
Copiando archivos y carpetas locales
Lidiando con los espacios en blanco y dems caracteres raros
Actualizar los contenidos de una carpeta
Sincronizando dos carpetas con rsync
Comprimiendo los archivos antes de transferirlos
Transfiriendo archivos entre dos sistemas remotos
Excluyendo archivos y directorios
Utilizando rsync como un servicio (movido a su propia seccin)
Algunos parmetros adicionales de rsync
Notas al pie

Los principios bsicos de rsync

rsync es una herramienta de copiado muy verstil que viene incluida en casi todas las versiones de Linux.
Puede ser utilizada como una herramienta avanzada de copiado, permitindonos copiar archivos localmente
o remotamente. Adems puede ser utilizada como una herramienta para respaldos, soporta la creacin de
respaldos incrementales.

rsync cuenta con un famoso famoso algoritmo delta-transfer que nos permite transferir archivos nuevos, as
como los cambios recientes a archivos existentes, mientras ignora archivos que no han sido modificados.
Adicionalmente a esto, el comportamiento de rsync puede ser personalizado, ayudndonos a automatizar
los respaldos, as mismo puede ser utilizado como un servicio para convertir la computadora en un servidor
y permitir que otros clientes de rsync se conecten a ella.

Adems del copiado de archivos y carpetas locales, rsync nos permite copiar utilizando como medio SSH
(Secure Shell), RSH (Remote Shell) y puede ejecutarse como servicio en una computadora y permitir a otras
computadoras conectarse, cuando rsync es usado como servicio escucha el puerto 873.

Cuando utilizamos rsync como servicio o cuando utilizamos RSH, los datos enviados entre computadoras
no viaja cifrado, por consiguiente, si ests transfiriendo archivos entre dos computadoras en la misma red
local, esto es til, pero esto no debe ser utilizado para transferir archivos en redes inseguras, como lo es
Internet. Para este propsito SSH es lo mejor a usar.

Est es la principal razn por la que yo favorezco el uso de SSH para mis transferencias, adems, gracias a
que es seguro, muchos servidores tienen el servicio de SSH disponible. Pero el uso de rsync como servicio
para transferencias en conexiones rpidas, como es usualmente el caso en redes locales, es til. No tengo el
servicio de RSH funcionando en mis computadoras por lo que podras encontrar que favorezco SSH en los
ejemplos. Los ejemplos utilizan SSH como el medio de transporte para las transferencias entre
computadoras remotas, pero en una publicacin separada cubro el uso de rsync como servicio.

Copiando archivos y carpetas locales

Para copiar los contenidos de una carpeta en otra, reemplazando los archivos de la carpeta de destino,
podemos utilizar:

rsync -rtv carpeta_origen/ carpeta_destino/

Nota que en la carpeta_origen agregu una diagonal al final, hacer esto previene que una nueva carpeta sea
creada, si no agregamos la diagonal, entonces una nueva carpeta llamada carpeta_origen ser creada en
carpeta_destino. Por consiguiente, si deseas copiar los contenidos de una carpeta llamada Imgenes dentro
de una carpeta llamada Imgenes que ya existe, necesitas agregar la diagonal al final, de otra manera, una
carpeta llamada Imgenes ser creada dentro de la carpeta llamada Imgenes que especificamos como
destino.

rsync -rtv origen/ destino/

rsync -rtv origen destino/

El parmetro -r significa que har el copiado recursivo de carpetas, es decir, crear toda la estructura de las
carpetas que hay dentro de carpeta_origen en carpeta_destino, y copiar todos los archivos que es
encuentren dentro de estas.

El parmetro -t hace que rsync preserve los tiempos de modificacin de los archivos que copia desde la
carpeta origen.
El parmetro -v significa que la informacin imprimida durante la ejecucin del programa ser mucho ms
detallada, podemos utilizar esto para ver el progreso del comando.

Estos son los parmetros que utilizo frecuentemente, ya que usualmente estoy respaldando archivos
personales y estos no contienen cosas como vnculos simblicos, pero otro parmetro muy til que se puede
utilizar con rsync es el parmetro -a.

rsync -av origen/ destino/

El parmetro -a tambin hace la copia recursiva y preserva los tiempos de modificacin, pero
adicionalmente copia los vnculos simblicos que encuentra como vnculos simblicos, preserva los
permisos, preserva la informacin de el dueo y el grupo del archivo, y preserva los archivos de dispositivo
y los archivos especiales. Esto es til si se est copiando completo el directorio personal de un usuario, o si
se estn copiando carpetas del sistema a otro lugar.

Lidiando con los espacios en blanco y dems caracteres raros

Podemos escapar espacios y caracteres raros al igual que en Bash, utilizando \ antes de cualquier espacio en
blanco y carcter raro. Adicionalmente, podemos utilizar comillas sencillas para encerrar la cadena de texto:

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


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

Actualizar los contenidos de una carpeta

Para ahorrar ancho de banda y tiempo, podemos evitar copiar archivos que ya tenemos en la carpeta de
destino que no has sido modificados en la carpeta de origen. Para hacer esto agregamos el parmetro -u a
rsync, esto actualizar los contenidos de la carpeta destino en base a la carpeta de origen, aqu es donde el
algoritmo delta-transfer entra. Para actualizar los contenidos de una carpeta basados en los contenidos de
otra utilizamos:

rsync -rtvu carpeta_origen/ carpeta_destino/

Por default, rsync toma la fecha de la ltima modificacin del archivo y el tamao de este para decidir que
archivos necesitan ser transferidos y que archivos pueden ser ignorados, pero podemos utilizar en lugar de
este mtodo un hash para decidir si el archivo es diferente o no.

Para hacer esto necesitamos usar el parmetro -c, que realizar un checksum en los archivos a ser
transferidos. Esto ignorar cualquier archivo donde el checksum coincide.

rsync -rvuc carpeta_origen/ carpeta_destino/

Sincronizando dos carpetas con rsync

Para mantener dos carpetas en sincrona, no solo necesitamos agregar los nuevos archivos en la carpeta de
origen a la carpeta de destino, tambin necesitamos remover los archivos que fueron borrados de la carpeta
origen en la carpeta destino. rsync nos permite hacer esto con el parmetro --delete, esto usado en conjunto
con el parmetro previo -u que actualiza los archivos modificados nos permite mantener dos carpetas en
sincrona ahorrando ancho de banda.

rsync -rtvu --delete carpeta_origen/ carpeta_destino/

El proceso de borrado se puede llevar antes, durante y despus de la transferencia, podemos controlar en que
momento ocurre utilizando alguno de los parmetros siguientes:
rsync puede buscar los archivos faltantes y borrarlos antes de de el proceso de transferencia, este es
el comportamiento por default y puede ser ajustado con --delete-before

rsync puede buscar los archivos faltantes y borrarlos despus que la transferencia se ha completado,
con el parmetro --delete-after

rsync puede borrar los archivos durante la transferencia, cuando se encuentra un archivo faltante, se
borra en ese momento, activamos este comportamiento con --delete-during

rsync puede hacer la transferencia y encontrar los archivos faltantes durante este proceso, esperar
hasta que ha terminado y borrar los archivos que encontr despus, esto puede lograrse con
--delete-delay

Por ejemplo:

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

Comprimiendo los archivos antes de transferirlos

Para ahorrar algo de ancho de banda, y usualmente ahorrar algo de tiempo tambin, podemos comprimir la
informacin que est siendo transferida, podemos agregar el parmetro -z a rsync para lograr esto.

rsync -rvz carpeta_origen/ carpeta_destino/

Si estamos transfiriendo una gran cantidad de archivos sobre una conexin rpida, rsync puede ser ms
lento con el parmetro -z que sin el, ya que tomar ms tiempo comprimir cada archivo que el tiempo que
se tomara simplemente hacer la transferencia de los archivos a la carpeta_destino. Usa este parmetro si
tienes una conexin con velocidad limitada entre dos computadoras, o si necesitas ahorrar ancho de banda.

Transfiriendo archivos entre dos sistemas remotos

rsync puede copiar archivos y sincronizar una carpeta local con una carpeta remota en un sistema que
cuente con acceso va SSH, va RSH, o que est ejecutando rsync como un servicio. Los ejemplos aqu
utilizan SSH para la transferencia de archivos, pero los mismos principios aplican si quieres hacer esto con
rsync funcionando como servicio en la computadora remota, lee Ejecutando rsync como servicio cuando
SSH no est disponible ms abajo para mayor informacin sobre esto.

Para transferir archivos entre la computadora local y una computadora remota, necesitamos especificar la
direccin de la computadora remota, puede ser un nombre de dominio, una direccin IP, o el nombre de un
servidor que hayamos guardado previamente en nuestro archivo de configuracin de SSH (informacin
sobre como hacer esto puede verse en Definiendo servidores de SSH), seguido de dos puntos, y la carpeta
que queremos usar para la transferencia. Nota que rsync no puede transferir archivos entre dos sistemas
remotos, solo una carpeta local o una carpeta remota pueden ser utilizadas en conjunto con una carpeta local.
Para hacer esto utilizamos:

Carpeta local a carpeta remota, utilizando un dominio, una direccin de IP o un servidor definido en el
archivo de configuracin de SSH:
rsync -rtvz carpeta_origen/ usuario@dominio:/ruta/a/carpeta_destino/
rsync -rtvz carpeta_origen/ usuario@xxx.xxx.xxx.xxx/ruta/a/carpeta_destino/
rsync -rtvz carpeta_origen/ nombre_servidor:/ruta/a/carpeta_destino/

Carpeta remota a carpeta local, utilizando un dominio, una direccin de IP o un servidor definido en el
archivo de configuracin de SSH:
rsync -rtvz usuario@dominio:/ruta/a/carpeta_origen/ carpeta_destino/
rsync -rtvz usuario@xxx.xxx.xxx.xxx:/ruta/a/carpeta_origen/ carpeta_destino/
rsync -rtvz nombre_servidor:/ruta/a/carpeta_origen/ carpeta_destino/

Excluyendo archivos y directorios

Hay muchos casos en los que necesitamos excluir ciertos archivos y directorios de rsync, un caso comn es
cuando sincronizamos un proyecto local con un repositorio remoto o incluso con un sitio vivo, en este caso
podramos querer excluir algunos directorios de desarrollo y algunos archivos ocultos de ser transferidos al
sitio vivo. Excluir archivos puede ser hecho con --exclude seguido del directorio o el archivo que
queremos excluir. La carpeta de origen o la carpeta de destino pueden ser un directorio local o un directorio
remoto como se explico en la seccin previa.

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/

Las rutas son relativas a la carpeta desde la que estamos llamando rsync, salvo que comience con una
diagonal, en cuyo caso la ruta sera absoluta.

Otra manera de hacer esto es crear un archivo con la lista de archivos y directorios a excluir de rsync, as
como patrones (todos los archivos que caigan dentro del patrn dado seran excluidos, *.txt excluira
cualquier archivo con esa extensin), uno por linea, y llamar este archivo con --exclude-from seguido de
el archivo que queremos utilizar para la exclusin de los archivos. Primero creamos y editamos este archivo
en nuestro editor de texto favorito, en este ejemplo utilizo gedit, pero puedes usar kate, Vim, nano, o
cualquier otro editor de texto:

touch excluidos.txt
gedit excluidos.txt

En este archivo podemos agregar lo siguiente:

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

Y despus llamamos a rsync:

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

Adicionalmente a borrar archivos que han sido eliminados de la carpeta de origen, como se explic en
Sincronizando dos carpetas con rsync, rsync puede borrar del destino archivos que estn excluidos de la
transferencia, podemos hacer esto con el parmetro --delete-excluded, por ejemplo:

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


carpeta_destino/

Este comando har a rsync recursivo, preservar los tiempos de modificacin de la carpeta de origen,
incrementar la verbosidad, excluir todos los archivos que caigan dentro de los patrones en el archivo
excluidos.txt, y borrar todos los archivos excluidos si existen en la carpeta de destino.

Utilizando rsync como un servicio cuando SSH no est disponible


Esto fue movido a su propia seccin, Utilizando rsync como servicio

Algunos parmetros adicionales de rsync

-t Preserva los tiempos de modificacin de los archivos que estn siendo transferidos.
-q Suprime todos los mensajes que no sean de error, este parmetro es contrario al parmetro -v que muestra
mucha ms informacin de la transferencia.
-d Copia los archivos de un directorio sin utilizar recursividad para copiar los directorios internos, en decir,
solo los archivos son transferidos.
-l Copia los symlinks como symlinks
-L Copia los archivo a los que un symlink est apuntando cuando encuentre un symlink.
-W Copia archivos enteros, ya que cuando utilizamos el algoritmo de delta-transfer solo se copia la parte de
un archivo que fue actualizada, algunas veces esto no es deseado.
--progress Muestra el progreso de los archivos que estn siendo transferidos.
-h Muestra la informacin que provee rsync en un formato ms legible, las cantidades son dadas en K's,
M's, G's, y as sucesivamente.

Notas al pie

La cantidad de opciones que rsync nos brinda es inmensa, podemos definir exactamente que archivos
queremos transferir, que archivos en especfico queremos comprimir, que archivos queremos borrar en la
carpeta de destino si estos archivos existen, y podemos lidiar con archivos de sistema tambin, para ms
informacin podemos usar man rsync y man rsyncd.conf

Deje la informacin que concierne a respaldos fuera de esta publicacin, ya que esto ser cubierto, junto con
la automatizacin del proceso de respaldos, en una publicacin futura.

Es posible utilizar rsync en Windows por medio del uso de cygwin, sin embargo no cuento con una
computadora con Windows disponible por el momento (o planeo tenerla en el futuro cercano), as que
aunque he hecho esto no puedo publicar al respecto. Sin embargo, si utilizas rsync como un servicio en
Windows, necesitas agregar la linea "scrict mode = false" en rsyncd.conf en lo mdulos, esto har que
rsync no revise los permisos en el archivo de secretos ya que si lo hiciera fallara por que no estara
apropiadamente configurados (ya que no funcionan igual que en Linux).

Esta publicacin podra ser actualizada si hay algo que corregir o agrego ms informacin si lo veo
necesario.