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


Rsync (Remote Sync) es un comando de uso más común 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. It efficiently copies and sync files to or from a remote system.
  2. Supports copying links, devices, owners, groups and permissions.
  3. It’s faster than scp (Secure Copy) because rsync uses remote-update protocol which allows to transfer just the differences between two sets of files. First time, it copies the whole content of a file or a directory from source to destination but from next time, it copies only the changed blocks and bytes to the destination.
  4. Rsync consumes less bandwidth as it uses compression and decompression method while sending and receiving data both ends.
# rsync options source destination
  1. -v : verbose
  2. -r : copies data recursively (but don’t preserve timestamps and permission while transferring data
  3. -a : archive mode, archive mode allows copying files recursively and it also preserves symbolic links, file permissions, user & group ownerships and timestamps
  4. -z : compress file data
  5. -h : human-readable, output numbers in a human-readable format

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

El siguiente comando sincronizará un solo archivo en una máquina local desde una ubicación a otra ubicación. Aquí, en este ejemplo, el nombre de archivo backup.tar debe copiarse o sincronizarse 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. Aquí 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 hacia o desde 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 encriptación 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 forma cifrada 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. Muestra el progreso al transferir datos con rsync

Para mostrar el progreso mientras se transfieren los datos de una máquina a otra 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.

Aquí, en este ejemplo, el comando rsync incluirá solo aquellos archivos y directorios que comiencen 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 transferirán

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 seguridad 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é hará 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, 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 transferir archivo

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.