Rsync (sincronización remota): 10 ejemplos prácticos del comando Rsync en Linux


Rsync (Remote Sync) es un comando más comúnmente utilizado para copiar y sincronizar archivos y directorios de forma remota y local en sistemas Linux/Unix. Con la ayuda del comando rsync, puede copiar y sincronizar sus datos de forma remota y local en directorios, discos y redes, realizar copias de seguridad de datos y duplicar entre dos máquinas Linux.

Este artículo explica el uso básico y avanzado del comando rsync para transferir sus archivos de forma remota y local en máquinas basadas en Linux. No es necesario ser usuario root para ejecutar el comando rsync.

  1. Copia y sincroniza archivos de manera eficiente hacia o desde un sistema remoto.
  2. Admite la copia de enlaces, dispositivos, propietarios, grupos y permisos.
  3. Es más rápido que scp (Copia segura) porque rsync usa un protocolo de actualización remota que permite transferir solo las diferencias entre dos conjuntos de archivos. La primera vez, copia todo el contenido de un archivo o directorio desde el origen al destino, pero a partir de la próxima copia solo los bloques y bytes modificados en el destino.
  4. Rsync consume menos ancho de banda, ya que utiliza el método de compresión y descompresión al enviar y recibir datos en ambos extremos.

# rsync options source destination

  1. -v: detallado
  2. -r: copia datos de forma recursiva (pero no conserva las marcas de tiempo ni los permisos mientras transfiere datos
  3. -a: modo de archivo, el modo de archivo permite copiar archivos de forma recursiva y también conserva enlaces simbólicos, permisos de archivo, propiedad de usuarios y grupos y marcas de tiempo
  4. -z: comprime los datos del archivo
  5. -h: números de salida legibles por humanos en un formato legible por humanos

Podemos instalar el paquete rsync con la ayuda del siguiente comando.

# yum install rsync (On Red Hat based systems)
# apt-get install rsync (On Debian based systems)

1. Copiar/sincronizar archivos y directorio localmente

Este siguiente comando sincronizará un solo archivo en una máquina local desde una ubicación a otra ubicación. Aquí, en este ejemplo, es necesario copiar o sincronizar un nombre de archivo backup.tar en la carpeta/tmp/backups /.

[[email protected]]# rsync -zvh backup.tar /tmp/backups/

created directory /tmp/backups

backup.tar

sent 14.71M bytes  received 31 bytes  3.27M bytes/sec

total size is 16.18M  speedup is 1.10

En el ejemplo anterior, puede ver que si el destino aún no existe, rsync creará un directorio automáticamente para el destino.

El siguiente comando transferirá o sincronizará todos los archivos de un directorio a un directorio diferente en la misma máquina. En este ejemplo,/root/rpmpkgs contiene algunos archivos de paquetes rpm y desea que ese directorio se copie dentro de la carpeta/tmp/backups /.

[[email protected]]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/nagios-3.5.0.tar.gz

rpmpkgs/nagios-plugins-1.4.16.tar.gz

sent 4.99M bytes  received 92 bytes  3.33M bytes/sec

total size is 4.99M  speedup is 1.00

2. Copiar/sincronizar archivos y directorios desde o hacia un servidor

Este comando sincronizará un directorio de una máquina local a una máquina remota. Por ejemplo: hay una carpeta en su computadora local "rpmpkgs" que contiene algunos paquetes RPM y desea que el contenido del directorio local se envíe a un servidor remoto, puede usar el siguiente comando.

[[email protected]]$ rsync -avz rpmpkgs/ [email protected]:/home/

[email protected]'s password:

sending incremental file list

./

httpd-2.2.3-82.el5.centos.i386.rpm

mod_ssl-2.2.3-82.el5.centos.i386.rpm

nagios-3.5.0.tar.gz

nagios-plugins-1.4.16.tar.gz

sent 4993369 bytes  received 91 bytes  399476.80 bytes/sec

total size is 4991313  speedup is 1.00

Este comando lo ayudará a sincronizar un directorio remoto con un directorio local. Aquí, en este ejemplo, un directorio/home/tarunika/rpmpkgs que está en un servidor remoto se está copiando en su computadora local en/tmp/myrpms.

[[email protected]]# rsync -avzh [email protected]:/home/tarunika/rpmpkgs /tmp/myrpms

[email protected]'s password:

receiving incremental file list

created directory /tmp/myrpms

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/nagios-3.5.0.tar.gz

rpmpkgs/nagios-plugins-1.4.16.tar.gz

sent 91 bytes  received 4.99M bytes  322.16K bytes/sec

total size is 4.99M  speedup is 1.00

3. Rsync sobre SSH

Con rsync, podemos usar SSH (Secure Shell) para la transferencia de datos, usando el protocolo SSH mientras transferimos nuestros datos, puede estar seguro de que sus datos se transfieren en una conexión segura con cifrado para que nadie pueda leer sus datos mientras se transfieren. a través del cable en Internet.

Además, cuando usamos rsync, necesitamos proporcionar la contraseña de usuario/root para realizar esa tarea en particular, por lo que usar la opción SSH enviará sus inicios de sesión de manera encriptada para que su contraseña esté segura.

Para especificar un protocolo con rsync, debe proporcionar la opción "-e" con el nombre del protocolo que desea utilizar. Aquí, en este ejemplo, usaremos "ssh" con la opción "-e" y realizaremos la transferencia de datos.

[[email protected]]# rsync -avzhe ssh [email protected]:/root/install.log /tmp/

[email protected]'s password:

receiving incremental file list

install.log

sent 30 bytes  received 8.12K bytes  1.48K bytes/sec

total size is 30.74K  speedup is 3.77
[[email protected]]# rsync -avzhe ssh backup.tar [email protected]:/backups/

[email protected]'s password:

sending incremental file list

backup.tar

sent 14.71M bytes  received 31 bytes  1.28M bytes/sec

total size is 16.18M  speedup is 1.10

4. Muestre el progreso durante la transferencia de datos con rsync

Para mostrar el progreso mientras se transfieren los datos de una máquina a una máquina diferente, podemos usar la opción "-progreso" para ello. Muestra los archivos y el tiempo restante para completar la transferencia.

[[email protected]]# rsync -avzhe ssh --progress /home/rpmpkgs [email protected]:/root/rpmpkgs

[email protected]'s password:

sending incremental file list

created directory /root/rpmpkgs

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

           1.02M 100%        2.72MB/s        0:00:00 (xfer#1, to-check=3/5)

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

          99.04K 100%  241.19kB/s        0:00:00 (xfer#2, to-check=2/5)

rpmpkgs/nagios-3.5.0.tar.gz

           1.79M 100%        1.56MB/s        0:00:01 (xfer#3, to-check=1/5)

rpmpkgs/nagios-plugins-1.4.16.tar.gz

           2.09M 100%        1.47MB/s        0:00:01 (xfer#4, to-check=0/5)

sent 4.99M bytes  received 92 bytes  475.56K bytes/sec

total size is 4.99M  speedup is 1.00

5. Uso de opciones –incluir y –excluir

Estas dos opciones nos permiten incluir y excluir archivos especificando parámetros con esta opción nos ayuda a especificar aquellos archivos o directorios que desea incluir en su sincronización y excluir archivos y carpetas que no desea que se transfieran.

En este ejemplo, el comando rsync incluirá solo los archivos y el directorio que comience con "R" y excluirá todos los demás archivos y directorios.

[[email protected]]# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

[email protected]'s password:

receiving incremental file list

created directory /root/rpm

./

Requirename

Requireversion

sent 67 bytes  received 167289 bytes  7438.04 bytes/sec

total size is 434176  speedup is 2.59

6. Uso de la opción –delete

Si un archivo o directorio no existe en el origen, pero ya existe en el destino, es posible que desee eliminar ese archivo/directorio existente en el destino durante la sincronización.

Podemos usar la opción "–delete" para eliminar archivos que no están en el directorio de origen.

La fuente y el destino están sincronizados. Ahora creando un nuevo archivo test.txt en el destino.

[[email protected]]# touch test.txt
[[email protected]]# rsync -avz --delete [email protected]:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting test.txt
./
sent 26 bytes  received 390 bytes  48.94 bytes/sec
total size is 45305958  speedup is 108908.55

Target tiene el nuevo archivo llamado test.txt, cuando se sincroniza con la fuente con la opción "–delete", eliminó el archivo test.txt.

7. Establezca el tamaño máximo de los archivos que se van a transferir.

Puede especificar el tamaño máximo de archivo que se va a transferir o sincronizar. Puede hacerlo con la opción "–max-size". Aquí, en este ejemplo, el tamaño máximo de archivo es 200k, por lo que este comando transferirá solo aquellos archivos que sean iguales o menores a 200k.

[[email protected]]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm

[email protected]'s password:

sending incremental file list

created directory /root/tmprpm

./

Conflictname

Group

Installtid

Name

Provideversion

Pubkeys

Requireversion

Sha1header

Sigmd5

Triggername

__db.001

sent 189.79K bytes  received 224 bytes  13.10K bytes/sec

total size is 38.08M  speedup is 200.43

8. Elimina automáticamente los archivos de origen después de una transferencia exitosa

Ahora, suponga que tiene un servidor web principal y un servidor de respaldo de datos, creó una copia de respaldo diaria y la sincronizó con su servidor de respaldo, ahora no desea mantener esa copia local de respaldo en su servidor web.

Entonces, ¿esperará a que se complete la transferencia y luego eliminará esos archivos de respaldo locales manualmente? Claro que no. Esta eliminación automática se puede realizar mediante la opción "–remove-source-files".

[[email protected]]# rsync --remove-source-files -zvh backup.tar /tmp/backups/

backup.tar

sent 14.71M bytes  received 31 bytes  4.20M bytes/sec

total size is 16.18M  speedup is 1.10

[[email protected]]# ll backup.tar

ls: backup.tar: No such file or directory

9. Realice una ejecución en seco con rsync

Si eres un novato y estás usando rsync y no sabes qué va a hacer exactamente tu comando. Rsync realmente podría estropear las cosas en su carpeta de destino y luego deshacer puede ser un trabajo tedioso.

El uso de esta opción no hará ningún cambio, solo hará una ejecución en seco del comando y muestra el resultado del comando, si el resultado muestra exactamente lo mismo que desea hacer, entonces puede eliminar la opción '–dry-run' de su comando y ejecutar en la terminal.

[email protected]]# rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/

backup.tar

sent 35 bytes  received 15 bytes  100.00 bytes/sec

total size is 16.18M  speedup is 323584.00 (DRY RUN)

10. Establecer límite de ancho de banda y archivo de transferencia

Puede establecer el límite de ancho de banda mientras transfiere datos de una máquina a otra con la ayuda de la opción "–bwlimit". Esta opción nos ayuda a limitar el ancho de banda de E/S.

[[email protected]]# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email protected]:/root/tmprpm/
[email protected]'s password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

Además, de forma predeterminada, rsync sincroniza solo bloques y bytes modificados, si desea sincronizar explícitamente todo el archivo, utilice la opción "-W" con él.

[[email protected]]# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10

Eso es todo con rsync ahora, puede ver las páginas de manual para obtener más opciones. Manténgase conectado con Tecmint para obtener tutoriales más emocionantes e interesantes en el futuro. Deje sus comentarios y sugerencias.