El uso de comandos en Linux es algo más que natural ya que estos son el corazón de Linux desde hace muchos años, es por ello que debemos ser conscientes en la forma como usamos estos comandos ya que, así como algunos son prácticos para tareas fundamentales, otros pueden resultar peligrosos si no los gestionamos correctamente. Uno de los comandos más funcionales de Linux es el protocolo rsync el cual te explicará Solvetic en detalle a través de este tutorial. Vamos a ver primero qué es rsync.
En la actualidad mantener una infraestructura de cualquier tamaño sin ningún respaldo puede considerarse una locura, un disco puede fallar en cualquier momento y podrías perder información tan valiosa como la contabilidad de la empresa. En esta entrada hablaremos cómo usar Rsync, una de las mejores herramientas para los respaldos en sistemas *nix. Veremos desde lo más básico hasta ejemplos más avanzados con scripts y ejemplos que puedas aplicar en tu entorno de trabajo. Será un manual para saber cómo se usa rysnc.
La necesidad de tener la misma información en distintos lugares viene siendo una que cada vez va tomando más fuerza, esto debido a que nuestro espacio de trabajo es variable y queremos tener nuestras herramientas siempre con nosotros o inclusive como medidas de respaldo.
El comando rsync (Remote Sync), es un comando desarrollado para las tareas de copia y sincronización de archivos y directorios ya sea de forma remota o local en sistemas Linux o UNIX.
Con este comando podemos realizar las copias desde:
- De forma local
- Usando un shell remoto
- A través de un demonio rsync remoto
- Respaldos automatizados a discos o servidores remotos.
- Sincronización de archivos y directorios remotos.
- Transferencia común de archivos.
- Es más rápido que scp (Secure Copy) porque rsync utiliza un protocolo de subida que permite transferir solo la diferencia entre los archivos, la primera vez transfiere todo el archivo para la segunda vez solo los cambios que pueda haber.
- Está diseñado para respaldos en remoto.
- Soporta la copia de toda la permisología de los archivos, por ejemplo, dueño, grupos soft y hard link.
- Utiliza menos ancho de banda al utilizar compresión mientras se envían los archivos.
Rsync posee una funcionalidad de transferencia delta la cual permite reducir la cantidad de datos que son enviados a través de la red permitiendo que solo sean enviadas las diferencias entre los archivos de origen y los archivos existentes en el destino remoto, es por ello que rsync es ideal para copias de seguridad y duplicación.
Rsync actúa en el proceso de búsqueda de archivos a transferir usando un algoritmo checkqq de lqquick el cual se encarga de buscar los archivos que han sufrido algún tipo de modificación.
- Integra funciones de excluir opciones similares a GNU tar
- Cuenta con soporte para copiar enlaces, dispositivos, propietarios, grupos y permisos de Linux
- Añade un modo de exclusión CVS el cual permite ignorar los mismos archivos que CVS ignoraría en su función
- No requiere privilegios de superusuario (root)
- Podremos hacer uso de shell remoto como ssh o rsh
- Ofrece canalización de transferencias de archivos con el fin de minimizar los costos de latencia en la red
- Compatible con demonios rsync autenticados o anónimos
- Es más veloz que scp
Vamos a ver cómo usar rsync y parámetros rsync para poder realizar tareas como rsync copiar solo archivos nuevos o rsync borrar archivos destino.
1. Cómo usar rsync
La sintaxis de uso de este comando es la siguiente:
rsync opciones recurso destino
- -v: modo detallado.
- -r: esta opción copia los datos de forma recursiva sin dejar las marcas de tiempo y el permiso durante el proceso.
- -a: modo de archivo el cual permite copiar archivos de forma recursiva y conserva enlaces simbólicos, permisos de archivos, propiedad de usuarios y grupos y marcas de tiempo.
- -z: esta opción comprime los datos del archivo.
- -h: modo legible por humanos, números de salida en un formato legible por humanos .
Ahora veamos algunos ejemplos de cómo usar este comando. Al final del tutorial Solvetic te dará otros parámetros de uso de rsync en Linux.
2. Cómo instalar rsync
En la mayoría de sistemas actuales, rsync está instalado por defecto, pero si no es así podemos ejecutar lo siguiente:
yum install rsync (Red Hat – CentOS - Fedora) apt-get install rsync (Debian - Ubuntu)
En todo caso debemos confirmar la instalación de rsync, en algunos sistemas como Ubuntu 20 ya viene por defecto:
3. Copiar archivos y copiar directorios con rsync
El primer uso de rsync es copiar o sincronizar un archivo o directorio de forma local. Vamos a ver cómo copiar archivos rsync, copiar directorios con rsync y sincronizar dos directorios con rsync.
Para ello ejecutaremos lo siguiente
rsync -zvh “archivo” “destino”
Allí podemos ver detalles como:
- Datos enviados
- Cantidad de datos recibidos
- Velocidad de transferencia
- Tamaño total
Si el caso es copiar un directorio de forma local vamos a ejecutar lo siguiente:
rsync -zvh “directorio” “destino”
4. Copiar o sincronizar carpetas remotas rsync o directorio remoto
Podemos copiar o sincronizar archivos de forma local a un equipo remoto, para ello usaremos la siguiente sintaxis:
rsync -avz archivo/ root@192.168.0.xxx:/destino/
Siempre que usemos la IP remota debemos ingresar la contraseña de root de dicho equipo remoto. Ahora, si vamos a copiar un directorio remoto a nuestro servidor local usaremos la siguiente sintaxis:
rsync -azvh root@192.168.0.xxx:/destino/ directorio/
5. Rsync SSH cómo usar
SSH (Secure Shell) es un mecanismo de seguridad adicional para la transferencia de datos, esto se logra ya que SSH hace uso de una conexión segura con cifrado de alta estandarización.
Si vamos a copiar un archivo local a un equipo remoto con SSH, debemos hacer uso de la opción "-e" con el nombre del protocolo que desea usar:
rsync -avzhe ssh root@192.168.0.xxx:/destino /directorio
Para copiar un archivo local a un servidor remoto usaremos la siguiente sintaxis:
rsync -avzhe ssh “archivo” root@192.168.0.xxx:/destino/
Podemos validar en el directorio remoto que se ha copiado el archivo o directorio:
6. Rsync mostrar progreso de transferencia de archivos o directorios
Este es un método para una mejor administración de la transferencia, esto se logra con el parámetro –progress:
rsync -avzhe ssh --progress /origen root@192.168.0.xxx:/destino
7. Incluir o excluir directorios rsync
Las opciones –include y –exclude son opciones que nos permiten ya sea incluir o excluir archivos, también nos permite especificar los archivos o directorios a incluir en la sincronización o excluir archivos y carpetas que no deben ser transferidas.
Su uso es el siguiente:
rsync -avze ssh --include 'Letra*' --exclude '*' root@192.168.0.xxx:/destino
8. Rsync eliminar archivos y directorios
En caso de que un archivo o directorio no esté en el origen, pero ya esté disponible en el destino, podemos eliminar ese archivo o directorio durante el proceso de sincronización, para esto podemos usar –delete con el fin de borrar los elementos que no estén en el equipo de destino, ejecutaremos lo siguiente:
rsync -avz --delete root@192.168.0.xxx:/destino
9. Rsync Limitar tamaño de archivos
Con el parámetro –max-size podemos indicar cual es el tamaño máximo de los objetos a transferir con rsync, esto ayuda a controlar el espacio remoto:
rsync -avzhe ssh --max-size='300k' /origen/ root@192.168.0.xxx:/destino
10. Rsync eliminar archivos origen si la transferencia fue correcta
Con la variable –remove-source-files es posible que los archivos que han sido sincronizados en el origen sean eliminados solo si todo el proceso ha sido correcto, para ello usaremos lo siguiente. Vemos que el archivo de origen ha sido borrado.
rsync --remove-source-files -zvh “archivo” /destino/
11. Ejecutar rsync sin afectar los archivos
Esta es una opción ideal para personas que no conocen a fondo el poder de rsync ya que muestra lo que hará el comando mas no afecta el origen, esto se logra con el parámetro –dry-run, por ejemplo. Podemos ver que el archivo sigue allí.
rsync --dry-run --remove-source-files -zvh “archivo” /destino/
12. Limitar ancho de banda rsync
Con el parámetro –bwlimit será posible definir que tasa de red ha de usar rsync para las tareas de sincronización, esto se logra de la siguiente forma:
rsync --bwlimit=200 -avzhe ssh /origen/ root@192.168.0.xxx:/destino
13. Backup con Rsync
En ocasiones debemos respaldar cierta información antes de hacer modificaciones y en caso de algún error recuperar desde el Respaldo, empezaremos con un laboratorio haciendo respaldo de una carpeta a otra. De esta forma crearemos una backup con rsync de forma completa y segura.
Empezamos verificando que rsync esté instalado.
[user@Solvetic ~]$ which rsync /usr/bin/rsync
Crearemos 2 carpetas para el origen y destino de los archivos.
mkdir {respaldo1, respaldo2}
Creamos varios archivos en la carpeta respaldo1 en este caso no importa el tamaño de los archivos.
[user@Solvetic ~]$ touch respaldo1/file{1..75}
El directorio debería tener 75 archivos. Hacemos respaldo.
[user@Solvetic ~]$ ls respaldo1/ file1 file14 file19 file23 file28 file32 file37 file41 file46 file50 file55 file6 file64 file69 file73 file10 file15 file2 file24 file29 file33 file38 file42 file47 file51 file56 file60 file65 file7 file74 file11 file16 file20 file25 file3 file34 file39 file43 file48 file52 file57 file61 file66 file70 file75 file12 file17 file21 file26 file30 file35 file4 file44 file49 file53 file58 file62 file67 file71 file8 file13 file18 file22 file27 file31 file36 file40 file45 file5 file54 file59 file63 file68 file72 file9
Para respaldar los archivos al respaldo2 usamos. El origen debe terminar en / de lo contrario copiaria su carpeta y no el contenido.
rsync -r respaldo1/ respaldo2
SI entramos en el respaldo2 podemos ver los 75 archivos incluso podemos comprobar que son 2 directorios idénticos usando diff.
[user@Solvetic ~]$ diff respaldo1 respaldo2
En caso de crear un softlink de un archivo del directorio 1
ln -s file30 file100
Al utilizar rsync con -r no sincronizará el softlink en este caso usamos. Si nos fijamos esta vez sí tendremos el softlink sincronizado.
rsync -a respaldo1/ respaldo2
[user@Solvetic ~]$ rsync -anv respaldo1/ respaldo2 sending incremental file list sent 606 bytes received 12 bytes 1236.00 bytes/sec total size is 6 speedup is 0.01 (DRY RUN)
14. Otros parámetros Rsync
Como hemos mencionado, estos son algunos de los parámetros adicionales a usar con rsync en Linux:
- -t, --times: conserva la modificación del tiempo
- -g, --group: conserva los grupos
- -o, --owner: conserva el propietario del objeto
- -B, --block-size=TAMAÑO: fuerza un tamaño de bloque de suma de verificación fijo
- T, --temp-dir = DIR: este valor crea archivos temporales en el directorio DIR
- z, --compress: comprime los datos del archivo durante la transferencia
- -4, --ipv4: usa solo IPv4
- -6, --ipv6: usa solo IPv6
Existen muchas variables más, pero con estas son más que suficientes para que puedas sacar el máximo potencial de rsync en Linux. Hemos visto cómo utilizar rsync con las opciones más útiles, en conjunto con herramientas como cron y scripts en bash, python tendremos todo lo necesario para hacer nuestros respaldos sin necesidad de herramientas de terceros.