Sincronizacion con rsync(1)

rsync es una utilidad de sincronizacion remota, es decir que sirve para mantener sincronizado el contenido de dos carpetas en diferentes sistemas. Utiliza un algoritmo que minimiza la cantidad de datos transferidos de un lugar a otro copiando solamente las partes que cambiaron de un archivo. Es por ello que tambien se lo utiliza como un cp mejorado.

Uso basico

Como alternativa a cp

Comencemos por ver como copiar en el mismo sistema, de una carpeta a otra. Supongamos que tenemos dos carpetas, origen y destino, y queremos que el contenido entre ellas quede igual.

El primer comando que aprenderemos sera decirle a rsync que copie recursivamente (es decir las subcarpetas y sus contenidos tambien), de origen a destino.

  rsync -r origen/ destino

Notar la opcion -r que es la que le indica a rsync que la copia es recursiva.

Otra alternativa es indicarle con la opcion -a que copie recursivamente preservando los metadatos y archivos especiales (por ejemplo enlaces simbolicos)

  rsync -a origen/ destino

Importante: Notar en los dos ejemplos anteriores que origen esta finalizado con una barra /. De esta manera se le senaliza a rsync que copie el contenido de origen y no lo incluya. De otra forma lo que haria seria crear en destino una nueva carpeta llamada origen y volcar alli todo lo copiado.

Otras opciones utiles

Chequear lo que va a suceder

La opcion -n o bien --dry-run permite chequear que es lo que hara rsync sin que realmente se lleve ninguna opcion a cabo. Esto generalmente se combina con la opcion siguiente para mas detalles sobre el procedimiento a realizar.

Salida verborragica

La opcion -v muestra informacion mas detallada de lo normal sobre las acciones y resultados que van sucediendo a medida que se ejecuta rsync.

Copiando entre sistemas remotos

Ahora veremos el area donde rsync se luce. Realizaremos una sincronizacion donde origen y destino son carpetas en sistemas diferentes. Vamos a suponer que esos sistemas son nuestra PC (en alguna parte de Internet), y el servidor en Texto-Plano (suponiendo que ya tenemos cuenta).

Sincronizando una carpeta en nuestra PC a TP

Supongamos que ahora origen es una carpeta en nuestra PC y destino es una carpeta en nuestro $HOME en Texto-Plano, mas precisamente, el path absoluto de destino seria /home/fulana/destino (suponiendo que nuestro usuario es fulana).

Entonces

  rsync -e ssh -a origen/ fulana@texto-plano.xyz:/home/fulana/destino

Aqui aparecio la opcion -e ssh para indicarle a rsync que el medio de conexion con Texto-Plano sera mediante ssh.

De manera analoga, si quisieramos sincronizar de Texto-Plano hacia nuestra computadora, el comando seria:

  rsync -e ssh -a fulana@texto-plano.xyz:/home/fulana/origen/ destino

Mas opciones utiles

Ahora que estamos realizando copias por la red, estas opciones vendran muy utiles.

Compresion de los datos

La opcion -z comprime los datos, rediuciendo la cantidad de informacion enviada por la red.

Indicacion de progreso

Con la opcion -P rsync nos indicara el progreso de la sincronizacion. Ideal para cuando hay mucha info a copiar y queremos saber como va avanzando el asunto.

Datos en numeros legibles

Con la opcion -h le decimos a rsync que los numeros los muestre en una escala mas facil de entender. Usualmente combinada con la opcion -P.

Copiar solamente archivos nuevos o modificados

Con -u solamente se copian los archivos nuevos o que son mas nuevos en la carpeta de origen.

Combinando todo

Es importante aclarar que estas opciones se pueden combinar, de manera que:

  rsync -e ssh -azuhP fulana@texto-plano.xyz:/home/fulana/origen/ destino

copiara todo el contenido de la carpeta origen en Texto-Plano (-a), de manera comprimida (-z), copiando archivos nuevos o modificados solamente (-u), de manera facil de leer (-h), mostrando el progreso (-P) usando ssh como transporte.

Recuerden que siempre tienen mas informacion con el comando man rsync.