¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal


rsync - Manual de uso 

Copyright © 2005-2024 LinuxTotal.com.mx
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

Autor: Sergio González D.  

rsync es la herramienta de copiado y sincronización de archivos más potente que existe en el mundo de Linux/Unix. Es una utilería, que de acuerdo a su página man, es rápida, versatil para el copiado local y remoto de archivos. Ofrece una larga lista de opciones que controlan todos los posibles aspectos de su comportamiento.

El 'secreto' de rsync es su algoritmo llamado 'delta-transfer' que reduce la cantidad de datos que se envían vía red al enviar solo las diferencias que hay entre dos archivos a nivel de sus metadatos (permisos, fechas de acceso, etc) y del contenido de sus datos a nivel de bloques en disco.


Modo de uso

El modo de uso de rsync es idéntica a los comandos cp o scp, es decir, rsync [opciones] origen [destino]

El 'destino' en rsync se dice que es opcional porque si solo se usa el origen, entonces equivale a listar el directorio o archivo origen.

Tanto el 'origen' como el 'destino' pueden ser locales o remotos


Sincronizar directorios localmente

Para poder ejemplificar el uso básico de rsync se crean un par de directorios y algo de contenido:

$> mkdir dir1 dir2 
$> touch dir1/reporte{1..5}
$> 
$> ls -l dir1/
total 0
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:43 reporte1
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:43 reporte2
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:43 reporte3
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:43 reporte4
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:43 reporte5
$> 
$> ls -l dir2/
total 0
$> 

Usando mkdir creamos un par de directorios y después con touch generamos 5 archivos llamados reporte1, reporte2, etc.

rsync para sincronizar directorios requiere de al menos la opción -r que indicar recursividad y copia el contenido del directorio más todos los subdirectorios que se encuentren el directorio.

$> rsync -r dir1/ dir2
$> ls -l dir2/
total 0
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:45 reporte1
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:45 reporte2
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:45 reporte3
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:45 reporte4
-rw-rw-r-- 1 user1 user1 0 Jan  9 13:45 reporte5
$>

Si por alguna razón no se requiere recursividad pero si crear los subdirectorios (y no copiar su contenido) entonces utiliza la opción --dirs que solo copia el contenido del directorio origen, archivos y nombre de directorios, pero no hay recursividad.

NOTA: Si se utilizan las opciones -r y --dirs al mismo tiempo, entonces -r tiene preferencia.

Cuando se sincronizan directorios es importante tomar en cuenta la diagonal / (slash) al final del directorio (dir1) origen ya que esto indica 'copiar el contendio del dir1' y sus subdirectorios directamente en dir2.

De lo contrario el resultado es el siguiente:

$ rsync -r dir1 dir2
$ 
$ ls -l dir2/
total 4
drwxrwxr-x 2 user user 4096 Jan  9 13:46 dir1   

Hay que tomar en cuenta que -r solo copia recursivamente pero no preserva o conserva permisos y estampas de tiempo de los archivos copiados.


El modo más utilizado

Una vez entendiendo que rsync es similar en uso que el comando cp veamos las opciones más utilizadas:
$ rsync -vazh dir1/ dir2

  • -v modo verboso, info extra de los archivos siendo copiados, etc.
  • -a modo archive, esta opción es la que necesitarás mas frecuentemente, ya que copia los archivos y directorios recursivamente y a diferencia de la opción -r preserva enlaces, permisos de archivos, usuario y grupo del archivo, y estampas de tiempo.
  • -z comprime datos de los archivos al transferir, útil sobre todo en transferencias o copias remotas.
  • -h modo humano, salida de números en formato legible para humanos.

$ rsync -avzh file* dir2
sending incremental file list
file1
file10
file2
file3
file4
file5
file6
file7
file8
file9

sent 56.73K bytes  received 206 bytes  22.77K bytes/sec
total size is 57.67M  speedup is 1,012.97


 
$ rsync -az file* dir2
$ 



Copias remotas

Como su nombre lo indica rsync "remote sync" es utilizado principalmente para copiar desde y hacía servidores remotos entre si, la sintaxis es sencilla: se indica el hostname o dirección IP del servidor remoto seguidio de : y el directorio destino (host:dir)
Ejamplos:

[user1@host1]$ rsync -avzh /srv/respaldos/ host2:respaldos/


$ rsync -avzh /srv/respaldos/ user1@host2:respaldos/


$ rsync -avzhP admin@192.168.10.10:/srv/respaldos/  /home/sergio/respaldos/


Copias remotas con ssh

Si estás copiando información sensible y quieres asegurarte que esta sea transferida de manera segura (encriptada) se puede entonces utilizar la opción -e con el parámetro ssh.

$ rsync -avzhe ssh admin@10.0.0.100:/backups/file001.log /var/log/.
admin@10.0.0.100's password:
receiving incremental file list
file001.log
sent 70 bytes  received 9.23K bytes  2.17K bytes/sec
total size is 50.12K  speedup is 2.66

Excluyendo y/o Incluyendo archivos

Estas dos opciones, --include y --exclude realizan exactamente lo que indican incluir y/o excluir archivos en la transferencia de archivos.

$ rsync -azP --exclude '*.bkp' 192.168.10.10:/srv/respaldos/  /home/sergio/respaldos/



$ rsync -azP --include 'reporte*'  --exclude '*' 192.168.10.10:/srv/respaldos/  /home/sergio/respaldos/



Borrando en el destino

No es algo muy frecuente, pero supongamos que deseas mantener dos directorios completamente iguales, los mismos archivos, es decir, que el directorio destino sea idéntico al directorio origen. Tienes entonces uno o mas archivos que existen en el destino pero que ya no están en el origen, al utilizar rsync con la opción --delete lo logras. Se eliminarán los archivos que estén en el destino que ya no existan en el origen.

$ touch dir2/ejemplo.txt	
$ rsync -avhP --delete dir1/ dir2
sending incremental file list
deleting ejemplo.txt
./
reporte1
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
reporte2
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=3/6)
reporte3
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=2/6)
reporte4
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=1/6)
reporte5
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 337 bytes  received 129 bytes  932.00 bytes/sec
total size is 0  speedup is 0.00



Y borrando el origen

Si después de una transferencia o copia de datos exitosa no deseas ocupar más espacio en el origen, entonces utiliza la opción --remove-source-files, que como su nombre lo indica claramente eliminará los archivos en el origen. ¡¡¡CUIDADO CON ESTA OPCIÓN!!! (Checa la siguiente opción)

	
$ touch dir1/test1.txt dir1/test2.txt
$ rsync -avh --remove-source-files  dir1/test* dir2/
sending incremental file list
test1.txt
test2.txt

sent 167 bytes  received 70 bytes  474.00 bytes/sec
total size is 0  speedup is 0.00
$ 
$ ll dir1/test*
ls: cannot access dir1/test*: No such file or directory
$ 

Simular o testear la transferencia antes de realmente realizarla

Cuando realices copias o transferencias críticas, donde al sobreescribir o eliminar archivos pudiera causar consecuencias graves, como la pérdida de datos o archivos sensibles (como en las opciones mostradas anteriormente --remove-source-files y --delete) o si aun no estás muy familiarizado con el uso de rsync, entonces es conveniente utilizar la muy útil opción --dry-run (simular o probar) donde rsync realmente no realizará ninguna acción de transferencia, copiado o eliminado de archivos, pero sin embargo te mostrará la salida como si lo hubiera hecjo, y de esta manera puedas comprobar si las acciones son las realmente deseadas. Una vez satisfecho solo elimina --dry-run y ejecuta el comando.

$ rsync -avh --dry-run --remove-source-files  dir1/test* dir2/

Estableciendo límites de ancho de banda y/o transferencia máxima/mínima de datos

--max-size='500k' esta opción permite definir el tamaño máximo de los archivos a transferir. Asi que solo se copiaran los archivos iguales o menores al tamaño indicado.

--min-size='500k' esta opción permite definir el tamaño mínimo de los archivos a transferir. Asi que solo se copiaran los archivos iguales o mayores al tamaño indicado.

$ rsync -avzhP -e ssh --max-size='500k' /home/ventas/reportes/*.xls  root@172.16.0.50:/backups/
root@172.16.0.50's password:
sending incremental file list
201501.xls
201502.xls
201505.xls
...
sent 234.14K bytes  received 315 bytes  22.21K bytes/sec
total size is 11.07M  speedup is 175.82


--bwlimit=100 por default, rsync no limita el ancho de banda en las transferencias entre equipos, pero si se desea limitarla con esta opción se logra.

$ rsync -avzhP -e ssh --max-size='500k' --bwlimit=100 /home/ventas/reportes/*.xls  root@172.16.0.50:/backups/



Opciones más útiles

Las opciones más comunes o útiles de rsync, ya sea de uso local o remoto son las siguientes:

OpciónDescripción
CortaLarga
-a --archive Modo archive, es igual a indicar las opciones r,l,p,t,g,o y D
-r --recursive Recursivo, copia recursivamente los directorios.
-l --links Cuando encuentra symlinks (enlaces simbólicos), estos son recreados en el destino.
-p --perms Opción que causa en el destino establecer los permisos igual que en el origen.
-t --times Transfiere los tiempos de los archivos (atime, ctime, mtime) al destino
-g --group Establece en el destino que el grupo del archivo copiado sea igual que el origen.
-o --owner Establece en el destino que el propietario del archivo copiado sea igual que el origen.
-D   Esto es igual que indicar las opciones --devices y --specials
  --exclude PATTERN Excluye archivos que igualan el patrón o pattern indicado.
  --include PATTERN Incluye archivos que igualan el patrón o pattern indicado.
  --devices Transfiere archivos de dispositivos de bloque y caracter al destino donde son recreados. Esto solo puede suceder si en el destino se tienen permisos de root.
  --specials Transfiere archivos especiales como fifos y named sockets.
  --version Indica el número de versión de rsync
-v --verbose Incrementa la cantidad de información que se informa durante la transferencia o copia de archivos. Es la opción contraria a --quiet
-q --quiet Decremente la cantidad de información que se informa durante la transferecnia o copia de archivos. Generalmente se utiliza cuando rsync se utiliza en una tarea cron. Es la opción contraria a --verbose
-I --ignore-times Una de las grandes virtudes de rsync es que al momento de copiar o transferir archivos, si estos son iguales en el destino en términos de tiempos y tamaño ya no lo copia, no hay cambios. Esta opción permite que esto sea ignorado y todos los archivos serán copiados/actualizados en el destino. (ver --size-only también)
  --size-only Normalmente solo se transfieren archivos con los tiempos cambiados o el tamaño cambiado. Con esta opción se ignoran los tiempos de los archivos y se transfiere cualquiera con un tamaño distinto en el destino.
-n --dry-run Crea una prueba de test de lo que realmente ocurrirá sin esta opción, sin realizar ningún cambio. Es decir, la salida mostrada será muy similar a lo que realmente pasará si no se incluye --dry-run. Generalmente se usa junto con la opción --verbose y la opción --itemize-changes
-i --itemize-changes Reporta una lista de los cambios realizados en cada archivo, incluidos cambios en sus atributos. Esto es equivalente a utilizar -vv en versiones obsolteas de rsync.
  --remove-source-files Remueve los archivos en el origen (no directorios) si en el destino estos fueron exitosamente duplicados o copiados.
  --timeout=TIEMPO Especifica un timeout en segundos, si no datos son transferidos en tiempo indicado rsync terminará. El default es 0 segundos que quiere decir sin timeout.
  --log-file=ARCHIVO Bitacoriza lo que se ha realizado en el ARCHIVO indicado.
  --stats Imprime un conjunto informativo de datos estadísticos sobre la transferencia realizada.
  --progress Muestra el avance o progreso de los archivos que están siendo transferidos.
  --bwlimit=KBPS Permite establecer un límite de transferencia en kilobytes por segundo. Esta opción su default es 0, lo que indica no límite en el uso del ancho de banda en la transferencia.
  --max-size=TAMAÑO No transfiere cualquier archivo más grande que el TAMAÑO indicado.
  --min-size=TAMAÑO No transfiere cualquier archivo más pequeño que el TAMAÑO indicado.
-z --compress Comprimir datos durante la transferencia.


¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal

LinuxTotal en:

Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.


Dona a través de paypal::


O a través de bitcoins:


14TNQv5wM3xkSv65gHGQ6s6f8yTZuFTohE
Más artículos de LinuxTotal

Observa la imagen siguiente, que corresponde a uno de los sitios de descargas de MySQL y notarás que todos los archivos que puede....


awk o la versión GNU gawk es más que un simple comando de procesamiento de patrones, es todo un lenguaje de análisis semántico....


Si acostumbras trabajar en la línea de comandos de Linux, muy posiblemente uses el shell bash (Bourne Again Shell, derivado del b....


Hay decenas de apliaciones para descargar archivos, la mayoría basadas en interfaces Web y de escritorio, y para todos los sistem....


Sistemas Linux con gran cantidad de usuarios, como servidores de correo, servidores samba, etc., tarde o temprano tienen el proble....


rsync es probablemente la herramienta de copiado y sincronización de archivos más potente que existe en el mundo de Linux/Unix. ....


¿Olvidaste o perdiste la contraseña del usuario 'root' de MySQL?, no hay problema, solo sigue estás sencillas instrucciones y p....


Una de las dificultades con una base de datos MySQL grande y activa es la de realizar respaldos limpios sin tener que desconectar ....


Sistemas basados en GNU/Linux (Al igual que sus parientes basados en Unix como BSD o los de Macinstosh) conservan la tradición de....


El siguiente es un script muy básico de iptables que puedes usar para proteger un solo equipo conectado a Internet a través de u....



Copyright © LinuxTotal.com.mx 2006-2024
info@linuxtotal.com.mx · linuxtotal.com.mx@gmail.com