Sincronización de directorios remotos con “Rsync”

<P>
    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.
    <BR/>
    Puede comprimir los <STRONG>datos transmitidos</STRONG> 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.
</P>

<H2 class="subtitulo">Rsync para la sincronización con directorios remotos</H2>

<IMG src="/images/1_Portadas/Redes/Sincronizacion-de-directorios-remotos-con-rsync.jpg" alt="Rsync para la sincronización con directorios remotos"/>

<H3 class="subtitulo">Instalar rsync en debian, ubuntu o derivados</H3>
<P>
    Primero tenemos que instalar la herramienta “rsync” en el ordenador que usaremos como cliente:
    <P class="terminal">sudo apt install rsync</P>
    También debemos disponer de ssh en el cliente (la máquina desde la que ejecutaremos "rsync" será el cliente)
    <P class="terminal">sudo apt install ssh</P>
    Y en el servidor necesitamos openssh-server (la máquina a la que conectaremos será la que haga de servidor)
    <P class="terminal">sudo apt install openssh-server</P>
</P>

<H3 class="subtitulo">Sintaxis de Rsync</H3>
<P>
    Esta es la estructura de rsync:
    <P class="destacado">rsync [flags] [local path] [user]@[remote server]:[remote path]</P>
</P>

<H3 class="subtitulo">Sincronizar un directorio remoto a un directorio local de forma incremental con rsync</H3>
<P>
    Para <STRONG>sincronizar</STRONG> un directorio de forma incremental utilizando un tunel ssh para cifrar los datos:
    <P class="terminal">rsync -avz --progress --delete -e ssh [email protected]:/home/laguialinux/Documentos /home/laguialinux/rsync</P>
    <UL>
        <LI><STRONG>laguialinux</STRONG> es el usuario del directorio remoto</LI>
        <LI><STRONG>192.168.9.144</STRONG> es el servidor remoto desde el que se sincronizará</LI>
        <LI><STRONG>/home/laguialinux/Documentos</STRONG> es el directorio dentro del servidor remoto</LI>
        <LI><STRONG>/home/laguialinux/rsync</STRONG> es el directorio local</LI>
        <LI><STRONG>--progress</STRONG> nos muestra un resumen del porcentaje enviado por archivo</LI>
        <LI><STRONG>--delete</STRONG> 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)</LI>
        <LI><STRONG>-a</STRONG> se utiliza para obtener una estructura jerárquica idéntica a la original</LI>
        <LI><STRONG>-p</STRONG> mantiene los permisos originales</LI>
        <LI><STRONG>-g</STRONG> mantiene el grupo</LI>
        <LI><STRONG>-o</STRONG> mantiene el propietario</LI>
        <LI><STRONG>-t</STRONG> mantiene la fecha y hora del archivo original</LI>
        <LI><STRONG>-l</STRONG> mantiene los enlaces simbólicos tal como enlaces simbólicos</LI>
        <LI><STRONG>-r</STRONG> recorre toda la estructura de archivos que le hayamos indicado</LI>
        <LI><STRONG>-z</STRONG> comprime los bloques antes de enviarlos para así ahorrar ancho de banda</LI>
        <LI><STRONG>-c</STRONG> 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</LI>
        <LI><STRONG>-v</STRONG> verbose, muestra información más precisa de lo que está registrando o procesando</LI>
        <LI><STRONG>-e</STRONG> elige el protocolo de transmisión que usaremos, normalmente <STRONG>ssh</STRONG></LI>
    </UL>
    Así podemos combinar las opciones para <STRONG>rsync</STRONG> de la forma que más se adapte a nuestras necesidades o situación.
    <BR/>
    Existen algunas opciones más, podréis obtenerlas desde el manual:
    <P class="terminal">man rsync</P>
</P>

<H3 class="subtitulo">Sincronizar un directorio local a un directorio remoto de forma incremental con rsync</H3>
<P>
    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:
    <P class="terminal">rsync -avz --progress --delete -e ssh /home/laguialinux/rsync [email protected]:/home/laguialinux/Documentos</P>
</P>

<H3 class="subtitulo">Sincronizar excluyendo directorios o archivos</H3>
<P>
    Podemos excluir directorios completos (por supuesto se incluyen subdirectorios) y también podemos excluir archivos de la sincronización.
    <P class="terminal">rsync -avz --progress --delete --exclude=/directorio --exclude=/archivo.txt -e ssh [email protected]:/home/laguialinux/Documentos /home/laguialinux/rsync</P>
</P>

<H3 class="subtitulo">Copia completa del sistema respaldada en un servidor remoto</H3>
<P>
    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...
    <P class="terminal">rsync -avz --progress --delete --exclude=/proc --exclude=/media -e ssh / [email protected]:/home/laguialinux/backup/backup_$(date +%y%m%d%H%M)</P>
</P>

<H3 class="subtitulo">Sincronizar cuando el puerto “ssh” no es el puerto estándar (22)</H3>
<P>
    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 <STRONG>-e 'ssh -p 1234'</STRONG> como en el siguiente ejemlo:
    <P class="terminal">rsync -avz --progress --delete -e 'ssh -p 1234' [email protected]:/home/laguialinux/Documentos /home/laguialinux/rsync</P>
</P>

<H3 class="subtitulo">Complementos y funciones para rsync</H3>
<P>
    Hay muchas más opciones, combinaciones o configuraciones para <STRONG>rsync</STRONG> y lo que os he explicado en esta guía suelen ser las más comunes o usadas.
    <BR/>
    Es posible utilizar <A href="openssh-transparente" title="Autenticar de forma transparente por ssh"><STRONG>autenticación transparente</STRONG> mediante "<STRONG>SSH</STRONG>"</A> para conectarnos de forma remota sin necesidad de utilizar clave cada vez que hagamos una conexión.
    <BR/>
    Podemos crear nuestro script para sincronizar con "rsync" de una forma más cómoda.
    <BR/>
    Para hacer el proceso más transparente al usuario y automatizado se puede <A href="cron-configuracion-basica-para-programar-tareas-mediante-crontab" title="Programar tareas usando cron en linux">programar mediante "<STRONG>cron</STRONG>"</A> para que se ejecute el script cada cierto tiempo, por ejemplo para realizar diariamente una <a href="https://laguialinux.es/Backups-tipos-de-copias-de-seguridad/" title="Explicación de los distintos tipos de copias de seguridad">copia incremental o diferencial</a> y una vez a la semana una <a href="https://laguialinux.es/Backups-tipos-de-copias-de-seguridad/" title="Copia de seguridad">copia completa.</a>
</P>

<IFRAME class="IframeYoutube" width="560" height="315" src="https://www.youtube.com/embed/Xpfz7i_GfPU" allowfullscreen></IFRAME>

<IMG src="/images/1_Portadas/Redes/1-Redes-GNU-LINUX.png" alt="Redes Linux"/>

Raúl Caro Pastorino

Informático, técnico en sistemas, redes, baja tensión (electricidad) y desarrollador de aplicaciones WEB. Soy un apasionado por GNU/LINUX y el software libre en general desde prácticamente el año 2001-2003 que comencé. Intento usar y trabajar siempre con código libre o abierto de forma profesional. Me apasiona la programación, la micro-electrónica, el diseño gráfico y edición multimedia. Fan de Raspberry y arduino. Programo en bash, python, php y javascript principalmente. Repositorios de código con git: https://gitlab.com/fryntiz https://github.com/fryntiz

3 comentarios:

  1. Cordial saludos,

    Amigos tuve el privilegio de ver su tutorial y al realizar lo me encontré con un mensaje de error al momento de ejecutar el archivo script_rsync el mensaje es el siguiente:
    ——————————————————————————————————
    unexpected remote arg: root@ipservidor:/var/copiaprueba
    rsync error: syntax or usage error (code 1) at main.c(1214) [sender=3.0.9]
    ——————————————————————————————————

    • ME PASO EXACTEMENTE IGUAL

    • Se que ha pasado algo de tiempo, me ha resultado en fecha de exámenes, ¿Podrías poner el comando completo que usaste?

      He comprobado y funcionan los comandos mostrados (rectificando comillas que se muestran francesas en vez de simples, tengo que corregir aún cosas en el diseño del sitio)

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.