No hace falta un programa de copias de seguridad complicado para proteger un servidor pequeño o un equipo Linux de casa. Con rsync, un script de diez líneas y un temporizador tienes copias incrementales con historial. Esta es la receta que usamos.
La idea: instantáneas con enlaces duros
rsync tiene una opción, --link-dest, que compara con la copia anterior y, para los ficheros que no han cambiado, crea un enlace duro en lugar de copiarlos otra vez. Resultado: cada día tienes una carpeta que parece una copia completa, pero solo ocupa lo que ha cambiado.
El script
#!/bin/sh
set -eu
ORIGEN="/home /etc /srv"
DESTINO="/mnt/copias"
HOY=$(date +%F)
rsync -a --delete \
--link-dest="$DESTINO/ultima" \
$ORIGEN "$DESTINO/$HOY/"
ln -sfn "$DESTINO/$HOY" "$DESTINO/ultima"
# Conserva 30 días
find "$DESTINO" -maxdepth 1 -type d -name '20*' -mtime +30 -exec rm -rf {} +
Guárdalo como /usr/local/bin/copia.sh y dale permisos de ejecución.
Programarlo
Con cron, a las tres de la madrugada:
0 3 * * * /usr/local/bin/copia.sh >> /var/log/copia.log 2>&1
Si prefieres systemd, un servicio oneshot más un temporizador con OnCalendar=*-*-* 03:00 y Persistent=true, que ejecuta la copia al arrancar si el equipo estaba apagado a esa hora.
Tres reglas que no nos saltamos
- Una copia en el mismo disco no es una copia. El destino debe ser otro disco, y al menos una vez por semana, otro lugar.
- Prueba a restaurar. Una vez al mes recuperamos un fichero al azar. Una copia que no se ha restaurado nunca es una esperanza, no una copia.
- Las bases de datos, aparte. Copiar los ficheros de una base de datos en uso puede darte una copia corrupta. Haz antes un volcado (
pg_dump,mysqldump) y copia el volcado.
¿Y fuera de casa?
El mismo script sirve para un destino remoto cambiando DESTINO por usuario@servidor:/ruta y usando claves SSH. Si quieres cifrado en el destino y deduplicación entre equipos, el siguiente paso natural es BorgBackup o restic.

