Cómo usar el comando Rsync en Unix

En esta guía, veremos ejemplos sobre cómo usar el comando rsync para sincronizar archivos, carpetas y programar copias de seguridad en intervalos de tiempo fijos, en Unix/Linux/MacOS.

Introducción

La revolución digital ha cambiado nuestras vidas de muchas maneras. Hoy en día, nuestros álbumes de fotos, colecciones de música, estanterías, etc. son todos digitales - archivos binarios escritos en un disco. Nuestra vida y trabajo se comparten entre multitud de dispositivos. Las empresas tienen áreas de desarrollo, puesta en escena, pruebas y docenas de desarrolladores conectados a ellas.

De este cambio en nuestra dinámica de vida surgieron dos problemas: ¿cómo preservar la integridad de nuestros datos y cómo sincronizarlos en todos nuestros dispositivos? Introduzca rsync, una herramienta que tiene como objetivo y realmente tiene éxito en la solución de esos problemas.

Lanzado por primera vez en 1996 bajo la licencia GPLv3, rsync es una herramienta de sincronización y transferencia de archivos de código abierto escrita en C. Funciona comparando tamaños y tiempos de modificación (mtimes) para decidir qué archivos deben sincronizarse, y utiliza un algoritmo efectivo para minimizar el ancho de banda de la red para las transferencias.

Siguiendo la filosofía unix, rsync es muy ligero, fácilmente configurable y scriptable. Ha alcanzado gran popularidad y ubicuidad. Casi todas las distribuciones de Linux vienen con rsync preinstalado; ¡incluso puedes encontrarlo en MacOS listo para usar!

Por supuesto, también se puede compilar desde el código fuente; el tarball se puede encontrar aquí. Sin embargo, para los usuarios de Windows, se requiere un esfuerzo adicional. Se puede usar con el tiempo de ejecución de Cygwin o bajo WSL.

Operaciones básicas de rsync

1
$ rsync options source destination

La sintaxis es bastante sencilla. Llamas a rsync, enumeras las opciones y eliges la fuente y el destino. Todas las opciones se pueden encontrar en las páginas man de rsync. Echemos un vistazo a las opciones clave que usaremos:

  • --archivo o -a
    This option is an alias for -rlptgoD which boils down to - do a recursive call trying to preserve as much as you can. This includes mtimes, permissions and ownership, symlinks, etc. This option is almost always used. Hardlinks are not included since tracking them down can be a costly operation. They can be explicitly requested with the -H option.

  • --verbose o -v y --human-readable o h.
    This option, very common with command line programs, forces rsync to log the operations it performs to the standard output stream. Should be skipped in scripts, where the --quiet or -q option is preferred as it produces no output.

  • --comprimir o -z
    This option uses compression during network transfer to reduce bandwidth. Very desirable and almost always used; same as the --archive option.

  • --ejecución en seco o -n
    This tells rsync to simulate the process and tell us what will be updated or deleted without actually doing anything. Useful for double checking our arguments and dealing with sensitive data.

  • --update o -u
    This option tells rsync to skip files that are newer in the destination than in the source. We will take a deeper look at its effects in the examples below.

  • --del
    This option tell rsync to delete all files in the destination not included in the source argument. Useful for cleaning up temporary files which we don't need anymore but backed up during previous synchronization.

  • --inplace
    The default way rsync works is by copying new files over, and then deleting the data it's substituting. This option tells it to substitute data inplace which doesn't take that much storage in the transfer process. Useful in situations without much storage headroom ie. transfering to a flash drive etc.

Ejemplos de rsync

1
$ rsync -avz src dest

Esta es la forma más común de invocar rsync. Conserva y comprime todo, mientras registras las operaciones.

Para ubicaciones remotas:

1
$ rsync -avz src [correo electrónico protegido]:location

Si tiene un disco duro externo en el que le gustaría sincronizar los archivos, pero usa dos dispositivos para editarlos (por ejemplo, editar fotos en una computadora portátil y una computadora de escritorio), el indicador -u es útil, ya que es posible que no lo haga. quiere que rsync anule el trabajo más reciente en cualquiera de estos con sus versiones anteriores:

1
$ rsync -avuz src /mnt/my_hdd

rsync con hosts remotos

Otra cosa que tiene rsync es el hecho de que sobresale con las transferencias remotas. Usando ssh por defecto (hay otros protocolos disponibles, incluso tiene el suyo propio), está completamente integrado con los llaveros ssh. La única advertencia es que rsync debe instalarse en ambos extremos, pero con tanta ubicuidad, eso casi nunca es un problema.

Realización de una copia de seguridad completa del sistema {#realización de una copia de seguridad completa del sistema}

Las copias de seguridad completas del sistema son comunes para muchos usuarios de *nix, si están particularmente preocupados con sus datos o simplemente les gusta experimentar y tener cajas fuertes. Usaremos algunas opciones adicionales como -A y -X que preservan las ACL y los atributos extendidos. Algunos árboles de archivos en nuestro sistema de archivos son innecesarios, por lo que los excluiremos con la opción --exclude. También eliminaremos cualquier archivo residual que hayamos eliminado localmente entre las dos copias de seguridad:

1
$ sudo rsync -aAXv --del --exclude={"/dev/*", "/proc/*", "/sys/*", "/tmp/*", "/run/*", "/mnt/*", "/media/*","/lost+found"} dest

Copias de seguridad diarias con rsync y crontab

Usando crontab, podemos programar copias de seguridad diarias, semanales, mensuales o incluso de tiempo variable. Escribamos una expresión cron y programemos nuestro comando rsync para que se ejecute todos los días a las 00:00:

1
0 0 * * * root sudo rsync -aAXv --del --exclude={"/dev/*", "/proc/*", "/sys/*", "/tmp/*", "/run/*", "/mnt/*", "/media/*","/lost+found"} dest

En su directorio /etc, puede encontrar múltiples directorios cron.*, correspondientes a la frecuencia con la que se debe verificar y ejecutar su contenido. Para crear una copia de seguridad diaria de todo nuestro sistema, podemos tomar el comando anterior, colocarlo en un archivo llamado, digamos, daily_backup.sh y colocarlo dentro de /etc/cron.daily/.

Este comando se ejecutará en un momento específico, definido por su crontab. Asegúrese de que su secuencia de comandos sea ejecutable y comience con un tinglado definitorio.

Conclusión

¿Que es no gustar? Una herramienta de línea de comandos mínima y liviana, que es fácil de usar, capaz de hacer muchas cosas, fácil de poner en scripts y hace lo que hace bastante rápido. No sorprende que rsync haya alcanzado tanta popularidad y disponibilidad. Hace un trabajo bastante bueno en esto que todos, conscientes o no, realmente necesitan.