Sincronización de carpetas con rsync

Rsync es una herramienta muy útil para sincronizar dos directorios, ya sean de diferentes máquinas o de la misma máquina. Su sintaxis es la siguiente:

Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
Push: rsync [OPTION…] SRC… [USER@]HOST:DEST

Así pues, si se quiere sincronizar dos directorios, con un servidor remoto, y además de forma automatizada, mediante SSH, podríamos primero copiar la clave pública de una máquina a la otra, para conectar por certificado y evitar así tener que introducir un password para la conexión SSH. Aquí (con autentificación con password) o aquí (sin autentificación con password) el cómo hacerlo.

Una vez contemos con la autentificación por certificados configurada, podremos conectar desde el servidor desde el cual iniciamos el rsync para copiar sincronizar el contenido de una carpeta local, con una carpeta de un servidor remoto (en el ejemplo, se usará como base la carpeta local, con lo que la carpeta remota quedará igual que la local).

rsync -e ssh -avz /folder/src_folder [email protected]:/another_folder/dest_folder

Con el parámetro anterior, estaremos conectando por ssh contra el servidor 80.80.80.100, logueándonos con «user», que será el usuario contra el cual habremos copiado el certificado público de la máquina local, para poder conectar por ssh mediante certificados.

Además, con «-avz» se estarán manteniendo los permisos y propietarios de los ficheros copiados, y además con «z» se estarán comprimiendo los archivos durante las transferencias.

ACTUALIZACIÓN:

La opción «-a» en realidad, ejecuta «-rlptgoD», lo cual significa:

  • -r: recursivo
  • -l: copia los links simbólicos, como eso, links simbólicos
  • -p: conserva los permisos
  • -t: conserva los tiempos de modificación
  • -g: conserva el grupo
  • -o: conserva el propietario
  • -D: conserva los ficheros de dispositivo (–devices) así como los ficheros especiales (–specials)

El comando anterior, puede estar mejor si se le añade la opción:

-u / –update: no sincroniza los ficheros que son más recientes en directorio de destino

Finalmente, un parámetro muy interesante es el «-n»:

-n: combinado con el resto de parámetros, únicamente realiza el rsync en modo test, pero no efectúa ningún cambio, con lo que si se combina con la opción «-v» devolverá el resultado que obtendríamos al ejecutar el comando, pero sin realizar ninguna modificación. Si el resultado es el esperado, podremos quitar la opción «-n» y volver a ejecutar, para esta vez sí, obtener los cambios esperados.

ACTUALIZACIÓN 2:

Si queremos copiar el contenido de un directorio local (ej: /tmp/source) a otro directorio local (/tmp/dest) bastará con ejecutar:

rsync -av /tmp/source/ /tmp/dest/

ACTUALIZACIÓN 3:

También es importante señalar, que en el rsync las barras en el path son muy importantes. Si como origen se pone /tmp/ (con barra final) se copiará en el destino todo lo que hay dentro de /tmp, sin incluir el propio directorio «/tmp». Sin embargo, si como origen se pone «/tmp» sin barra final, entonces en el destino se creará el directorio «tmp» y en él se copiará todo lo que incluye el directorio tmp original.

Así pues, es importante asegurarse de que estamos especificando el path origen que queremos (con o sin barra final) antes de realizar un rsync. Si se quiere estar doblemente seguro, mejor usar el rsync la primera vez con el parámetro «-n» tal y como se ha comentado anteriormente.

4 respuestas a «Sincronización de carpetas con rsync»

  1. Adri, me puedes ayudar con lo siguiente.

    Tengo un servidor con musica y otros tienen que ir por nueva musica, todo lo tengo funcionando bien con crones y los pcs en su horario llegan y miran si hay musica nueva y se lleva lo que no tienen.

    Ahora lo que deseo es que una vez terminen me envie un correo informando, actualmente lo tengo asi.

    Si no tiene conexion con el servidor envia correo diciendo que fallo la copia, pero al tener conexion ingresa e inicia la transmisión pero aunque no termine me llega el correo con el log de lo que ha copiado pero requiero que llegue correo solo si los archivos del origen y destino sean iguales ya sea por tamaño o lista de archivos.

    Te agradezco la ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada.