Sincronización de directorios remotos con “rsync”

Rsync - Sincronización de directorios remotos

Rsync es una herramienta multiplataforma que permite transmitir datos de forma eficiente entre varios directorios de la misma máquina o entre distintas máquinas y dispositivos mediante red o internet permitiendo realizar copias sincronizadas o backups de equipos en distintas ubicaciones.
Puede comprimir los datos transmitidos por la red para que sea más liviano el consumo de ancho de banda, permite cifrado mediante SSH y lo mejor de todo es una aplicación libre y gratuita incorporada en los repositorios de la mayoría de las distribuciones linux.

Rsync para la sincronización con directorios remotos

Rsync para la sincronización con directorios remotos

Instalar rsync en debian, ubuntu o derivados

Primero tenemos que instalar la herramienta “rsync” en el ordenador que usaremos como cliente:

sudo apt install rsync

También debemos disponer de ssh en el cliente (la máquina desde la que ejecutaremos "rsync" será el cliente)

sudo apt install ssh

Y en el servidor necesitamos openssh-server (la máquina a la que conectaremos será la que haga de servidor)

sudo apt install openssh-server

Sintaxis de Rsync

Esta es la estructura de rsync:

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

Sincronizar un directorio remoto a un directorio local de forma incremental con rsync

Para sincronizar un directorio de forma incremental utilizando un tunel ssh para cifrar los datos:

rsync -avz --progress --delete -e ssh laguialinux@192.168.0.144:/home/laguialinux/Documentos /home/laguialinux/rsync

  • laguialinux es el usuario del directorio remoto
  • 192.168.9.144 es el servidor remoto desde el que se sincronizará
  • /home/laguialinux/Documentos es el directorio dentro del servidor remoto
  • /home/laguialinux/rsync es el directorio local
  • --progress nos muestra un resumen del porcentaje enviado por archivo
  • --delete si ha sido modificado un archivo o directorio lo borra y vuelve a descargar la versión nueva o modificada (si esta opción no se incluye nos descarga el mismo archivo renombrado tantas veces como sea modificado por lo que se encontraría repetido por cada modificación)
  • -a se utiliza para obtener una estructura jerárquica idéntica a la original
  • -p mantiene los permisos originales
  • -g mantiene el grupo
  • -o mantiene el propietario
  • -t mantiene la fecha y hora del archivo original
  • -l mantiene los enlaces simbólicos tal como enlaces simbólicos
  • -r recorre toda la estructura de archivos que le hayamos indicado
  • -z comprime los bloques antes de enviarlos para así ahorrar ancho de banda
  • -c comprueba por CRC si dos archivos son iguales, ya que se puede dar el caso que tenga la misma fecha y tamaño con lo que no se copiaría el nuevo archivo modificado
  • -v verbose, muestra información más precisa de lo que está registrando o procesando
  • -e elige el protocolo de transmisión que usaremos, normalmente ssh
Así podemos combinar las opciones para rsync de la forma que más se adapte a nuestras necesidades o situación.
Existen algunas opciones más, podréis obtenerlas desde el manual:

man rsync

Sincronizar un directorio local a un directorio remoto de forma incremental con rsync

Solo hay que invertir la posición de los directorios del ejemplo anterior poniendo en primer lugar el directorio local y luego el directorio remoto, de la siguente forma:

rsync -avz --progress --delete -e ssh /home/laguialinux/rsync laguialinux@192.168.0.144:/home/laguialinux/Documentos

Sincronizar excluyendo directorios o archivos

Podemos excluir directorios completos (por supuesto se incluyen subdirectorios) y también podemos excluir archivos de la sincronización.

rsync -avz --progress --delete --exclude=/directorio --exclude=/archivo.txt -e ssh laguialinux@192.168.0.144:/home/laguialinux/Documentos /home/laguialinux/rsync

Copia completa del sistema respaldada en un servidor remoto

Podemos utilizar este método para realizar una copia de seguridad completa de todo nuestro equipo a un equipo remoto por ejemplo un NAS en nuestra red, otro equipo de la red, servidores o equipos a través de internet, etc...

rsync -avz --progress --delete --exclude=/proc --exclude=/media -e ssh / laguialinux@192.168.0.144:/home/laguialinux/backup/backup_$(date +%y%m%d%H%M)

Sincronizar cuando el puerto “ssh” no es el puerto estándar (22)

Puede ocurrir que utilicemos otro puerto que no sea el estándar para ssh, este es el puerto 22 por defecto pero es posible que lo hayamos cambiado en nuestro servidor por seguridad o cualquier otro motivo. Si utilizamos rsync sin especificar puerto usará por defecto el 22 así que deberemos especificarlo (siendo el puerto 1234) con -e 'ssh -p 1234' como en el siguiente ejemlo:

rsync -avz --progress --delete -e 'ssh -p 1234' laguialinux@192.168.0.144:/home/laguialinux/Documentos /home/laguialinux/rsync

Complementos y funciones para rsync

Hay muchas más opciones, combinaciones o configuraciones para rsync y lo que os he explicado en esta guía suelen ser las más comunes o usadas.
Es posible utilizar autenticación transparente mediante "SSH" para conectarnos de forma remota sin necesidad de utilizar clave cada vez que hagamos una conexión.
Podemos crear nuestro script para sincronizar con "rsync" de una forma más cómoda.
Para hacer el proceso más transparente al usuario y automatizado se puede programar mediante "cron" para que se ejecute el script cada cierto tiempo, por ejemplo para realizar diariamente una copia incremental o diferencial y una vez a la semana una copia completa.

Redes Linux
Votar Entrada: 
Average: 7.4 (5 votes)
Sigueme en google+: 

Comentarios

Este tutorial me ha salvado la vida pues me he llevado toda la tarde intentando encontrar un manual claro y sencillo para realizar una copia de seguridad programada desde un ordenador con linux ubuntu hacia el NAS de la empresa.<div>Gracias por el vídeo me ayudó a comprenderlo mucho mejor</div>
Votar Comentarios: 
Average: 10 (1 vote)

Añadir nuevo comentario