Crear una copia de seguridad con rsync

última modificación:

Cuando necesitamos hacer una copia de seguridad de un directorio, una de las opciones más sencillas en sistemas tipo Unix es usar rsync. Su mayor ventaja frente a un simple cp es que es incremental: la primera vez copia todo, y en las sucesivas solo copia los archivos que han cambiado, lo que lo hace mucho más rápido para copias de seguridad periódicas. Además, con la opción -a conserva permisos, fechas y enlaces simbólicos.

Para hacer una copia de seguridad de nuestro directorio personal en un disco externo:

rsync -av /home/usuario/ /mnt/disco-externo/backup/

La opción -a activa el modo archivo y -v el modo detallado para ver qué se está copiando. Si queremos que los archivos borrados en el origen también se eliminen del destino, añadimos --delete:

rsync -av --delete /home/usuario/ /mnt/disco-externo/backup/

Hay que prestar atención a la barra final en el directorio de origen: rsync ... /home/usuario/ copia el contenido de la carpeta, mientras que rsync ... /home/usuario (sin barra) copia la carpeta entera, con lo que el backup quedaría en backup/usuario/ en vez de directamente en backup/.

rsync también funciona sobre SSH para hacer copias a un servidor remoto. La sintaxis es la misma, sustituyendo la ruta local por usuario@servidor:/ruta/:

rsync -avz /home/usuario/ usuario@example.com:/home/usuario/backup/

La opción -z activa la compresión durante la transferencia, lo que puede reducir el tiempo en conexiones lentas.

Si necesitamos excluir algún directorio del backup, por ejemplo la caché del navegador, usamos --exclude:

rsync -av --exclude='.cache' /home/usuario/ /mnt/disco-externo/backup/

Para automatizar la copia de seguridad podemos añadir el comando al cron del usuario. Con crontab -e editamos la tabla de tareas programadas y añadimos una línea con la frecuencia y el comando:

0 2 * * * rsync -av /home/usuario/ /mnt/disco-externo/backup/

Esto ejecutaría la copia cada día a las 2:00. El único requisito es que el disco externo esté montado en /mnt/disco-externo/ antes de que se ejecute la tarea.