Utilizar Rsync para Sincronizar Directorios Locales y Remotos en un Servidor

Actualizado el . Posteado en Blog. Visitado 3152 veces.

                             rsync sincronizacion

Introducción


Rsync , que significa "sincronización remota", es una herramienta de sincronización de archivos remota y local. Utiliza un algoritmo que minimiza la cantidad de datos copiados moviendo sólo las partes de los archivos que han cambiado.

En este tutorial, cubriremos el uso básico de esta poderosa utilidad. Vamos a usar un servidor Ubuntu 12.04 con los siguientes ejemplos, pero puede utilizar cualquier distribución moderna de Linux para seguir adelante.

¿Qué es Rsync?


Rsync es una herramienta de sincronización de red muy flexible. También puede referirse al protocolo de red desarrollado para utilizar esta herramienta.

Cuando hacemos referencia a rsync en este tutorial, nos referimos principalmente a la utilidad, y no al protocolo.

Debido al enlace en los sistemas Linux y Unix y su popularidad como herramienta para scripts de sistema, está incluido en la mayoría de las distribuciones de Linux de forma predeterminada.

Sintaxis Básica


La sintaxis básica de rsync es muy directa, y opera de una manera similar a ssh, scp y cp.

Vamos a crear dos directorios de prueba y algunos archivos de prueba con los siguientes comandos:

cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}

Ahora tenemos un directorio llamado dir1 con 100 archivos vacíos en él.

ls dir1

file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

También tenemos un directorio vacío llamado dir2 .

Para sincronizar el contenido de dir1 con dir2 en el mismo sistema, escriba:

rsync -r dir1/ dir2

La opción -r significa recursivo, que es necesario para la sincronización de directorios.

También podríamos usar el indicador -a en su lugar:

rsync -a dir1/ dir2

La opción -a es un indicador de combinación.

Representa "archivar" y sincroniza recursivamente y conserva enlaces simbólicos, archivos especiales y de dispositivos, tiempos de modificación, grupo, propietario y permisos.

Es más comúnmente usado que -r y es usualmente lo que quieres usar.

Una Nota Importante


Es posible que haya notado que hay una barra diagonal final (/) al final del primer argumento en los comandos anteriores:

rsync -a dir1/ dir2

Esto es necesario para significar "el contenido de dir1 ".

La alternativa, sin la barra diagonal, colocaría dir1 , incluido el directorio, dentro de dir2 . Esto crearía una jerarquía que se vería así:

~/dir2/dir1/[files]

Compruebe siempre los argumentos antes de ejecutar un comando rsync.

Rsync proporciona un método para hacer esto pasando las opciones -n o -dry-run . El indicador -v (para verbo) también es necesario para obtener la salida adecuada:

rsync -anv dir1/ dir2

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .

Compare esta salida con la salida que obtenemos cuando eliminamos la barra inclinada:

rsync -anv dir1 dir2

sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .

Puede ver aquí que el directorio en sí se transfiere.

Utilizar Rsync para Sincronizar un Sistema Remoto


La sincronización con un sistema remoto es trivial si tiene acceso SSH en su servidor remoto y rsync está instalado en ambos lados. Si necesita configurar las claves SSH , haga clic aquí.

Una vez que se haya verificado el acceso SSH entre los dos, puede sincronizar la carpeta dir1 de una computadora anterior usando una sintaxis (note que queremos transferir el directorio real en este caso, por lo que omitimos la barra):

rsync -a ~/dir1 username@remote_host:destination_directory 

Esto se llama una operación de "empuje" porque empuja un directorio del sistema local a un sistema remoto.

La operación opuesta es "pull". Se utiliza para sincronizar un directorio remoto con el sistema local. Si el dir1 estuviera en el sistema remoto en lugar de nuestro sistema local, la sintaxis sería:

rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine 

Como "cp" y herramientas similares, el origen es siempre el primer argumento, y el destino es siempre el segundo.

Opciones útiles para Rsync


Rsync ofrece muchas opciones para alterar el comportamiento predeterminado de la utilidad. Ya hemos discutido algunas de las banderas más necesarias.

Si está transfiriendo archivos que aún no han sido comprimidos, como archivos de texto, puede reducir la transferencia de red añadiendo compresión con la opción -z :

rsync -az source destination 

La bandera -P es muy útil. Combina las banderas --progress y --partial . La primera de ellas le da una barra de progreso para las transferencias y la segunda le permite reanudar transferencias interrumpidas:

rsync -azP source destination 
sending incremental file list
./
file1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .

Si ejecutamos el comando nuevamente, obtendremos una salida más corta, porque no se han realizado cambios.

Esto ilustra la capacidad de rsync para usar los tiempos de modificación para determinar si se han realizado cambios.

rsync -azP source destination 
sending incremental file list

sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00

Podemos actualizar el tiempo de modificación en algunos de los archivos y ver que rsync inteligentemente vuelve a copiar sólo los archivos modificados:

touch dir1/file{1..10}
rsync -azP source destination 
sending incremental file list
file1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file2
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)
file3
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101)
. . .

Con el fin de mantener dos directorios verdaderamente en sincronía, es necesario eliminar los archivos del directorio de destino si se eliminan de la fuente. De forma predeterminada, rsync no elimina nada del directorio de destino.

Podemos cambiar este comportamiento con la opción --delete . Antes de usar esta opción, use la opción --dry-run y realice pruebas para evitar la pérdida de datos:

rsync -a --delete source destination 

Si desea excluir ciertos archivos o directorios ubicados dentro de un directorio que está sincronizando, puede hacerlo especificándolos en una lista separada por comas siguiendo la opción --exclude =

rsync -a --exclude=pattern_to_exclude source destination 

Si especificamos un patrón para excluir, podemos sustituir esa exclusión por archivos que coincidan con un patrón diferente usando la opción --include = .

rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination 

Conclusión


Rsync puede simplificar las transferencias de archivos a través de conexiones en red y sincronizar los directorios locales. La flexibilidad de rsync la convierte en una buena opción para muchas operaciones de nivel de archivo diferentes.

Un dominio de rsync le permite diseñar operaciones de copia de seguridad complejas y obtener un control detallado sobre lo que se transfiere y cómo.

Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (0 respuestas).