Uso de rsync para transferir y sincronizar sistemas locales y remotos

Uso de Rsync.

Rsync es una herramienta poderosa que facilita la transferencia y sincronización de datos entre sistemas locales y remotos.

Uso básico de rsync

Creemos dos directorios dentro del directorio /tmp, llamados “dir1” y “dir2”, y generemos una gran cantidad de archivos ficticios dentro de /tmp/dir1

mkdir /tmp/dir1 /tmp/dir2
for i in `seq 1 100`;do touch /tmp/dir1/archivo$i;done

Ahora, tenemos 100 archivos en /tmp/dir1; /tmp/dir2 todavía no debería tener ninguno. Podemos usar rsync para copiar todos los archivos de /tmp/dir1 a /tmp/dir2:

rsync /tmp/dir1/* /tmp/dir2

Usando el globing básico de los archivos, podemos tomar todos los archivos y copiarlos a otro directorio. ¿Qué pasa si hay un directorio dentro de /tmp/dir1.

No será transferido. Tendremos que usar el indicador -r (–recursivo) para recorrer el directorio, transfiriendo cada archivo dentro de él:

find /tmp/dir1 -delete
ln -s /tmp/dir1/archivo100 /tmp/dir1/archivo101
rsync -r /tmp/dir1/ /tmp/dir2

Vemos que rsync ha omitido el enlace simbólico que creamos. Elimine /tmp/dir2 nuevamente, e intentemos nuevamente, esta vez usando la bandera -a:

find /tmp/dir1 -delete
rsync -a /tmp/dir1/ /tmp/dir2

Use chown para cambiar la propiedad de un archivo en /tmp/dir1 a otro usuario, y copie los archivos usando -a a /tmp/dir2.

Ejecute ls -l y observe que la propiedad se movió con el archivo. Cosas útiles!

NOTA: Hay una diferencia entre incluir una barra diagonal (/) al final de la ruta de origen y omitirla; el primero transferirá todos los archivos DENTRO del directorio especificado, mientras que el segundo transferirá el directorio con todos los archivos dentro.

La bandera -a

Mencionamos anteriormente que la bandera -a (–archivo) es un alias para una colección de otras banderas, -rltpgoD. Desglosado, cada bandera hace lo siguiente:

r - recursivo

l - Transfiere cualquier enlace simbólico encontrado

t - Conservar marcas de tiempo

p - Conservar permisos

g - Conservar grupos

o - Preservar la propiedad

D - Preservar dispositivos de caracteres y bloques

Es posible que desee agregar lo siguiente a su comando para un tamaño de archivo más fácil de leer:

h - Formato de tamaño de archivo legible para humanos

Todo el mundo ama los comentarios

El indicador -v (–verbose) le dará más resultados sobre el estado de la transferencia, incluido un resumen al final, que se verá más o menos así:

$ rsync -av dir1/ dir2
building file list ... done
sent 1040 bytes received 20 bytes 2120.00 bytes/sec
total size is 7 speedup is 0.01

Si desea más estadísticas, ejecute rsync con el indicador –stats.

Esto le dará una lista detallada del número total de archivos, archivos transferidos, puntos de referencia e incluso una velocidad de transferencia promedio.

Por otro lado, -q (–quiet) suprimirá toda la salida, que se puede usar para scripts cuando no se requiere retroalimentación.

Transferencias remotas simplificadas

El verdadero poder de rsync está en su capacidad para realizar no solo transferencias locales sino también transferencias remotas.

Si ha usado scp anteriormente, la sintaxis para las transferencias remotas es bastante similar:

 rsync [flags] [local path] [user]@[remote server]:[remote path]

Como ejemplo, un rsync que use esta sintaxis se vería así:

rsync -avh /tmp/dir1/ root@host2:/tmp/dir2

Tenga en cuenta lo siguiente: (dos puntos) entre el servidor remoto y la ruta remota; Esto es requerido.

Mas opciones

rsync viene con una gran lista de opciones disponibles, demasiadas para repasarlas en un solo artículo. Las últimas banderas que cubriremos son las banderas –exclude, –exclude-from, –update y –delete

-exclude

Excluir archivos basados en un patrón. Rsync aún no es compatible con expresiones regulares, por lo que solo el emparejamiento de archivos estándar y el trabajo global es permitido

-exclude-from

Excluir archivos listados en un archivo separado por línea

-update

Actualice los archivos en el destino solo si la copia de origen se ha modificado más recientemente

-delete

Elimine archivos en el destino solamente si la copia de origen ya no existe.

Puertos alternativos SSH

Si ha cambiado el puerto SSH en su servidor, deberá decirle a rsync que use el nuevo número de puerto.

Ejemplo con puerto SSH normal:

rsync -azh /local/path/archivo user@host.com:/remote/path/archivo

Ejemplo con puerto SSH alternativo (22334):

rsync -azh /local/path/archivo -e 'ssh -p 22334' user@host.com:/remote/path/archivo

Transferencias remotas sin contraseña

Las transferencias de archivos remotos a locales o locales a remotos se pueden facilitar con el uso de claves SSH.

Con las claves SSH configuradas en servidores remotos y locales, la sincronización se puede programar sin esfuerzo y sin intervención humana (sin tener que ingresar una contraseña cada vez).

comments powered by Disqus