La terminal de Linux impone respeto pero una vez que dominas sus comandos básicos, te das cuenta de que la consola de Linux no es tu enemiga sino tu aliada para automatizar tareas.
Hoy vamos a abordar uno de los mayores dolores de cabeza de cualquiera que trastee con servidores, administre una Raspberry Pi en casa o que trabaje en entornos de desarrollo Linux, las dichosas copias de seguridad!!
Hacer backups manuales copiando y pegando carpetas da una pereza tremenda y siempre lo dejamos para otro momento o se nos olvida, así que hoy vamos a programar un script super sencillo en Bash de forma eficiente utilizando la herramienta reina del mundo sysadmin, rsync.
Después, configuraremos un cronjob para que el sistema lo ejecute por nosotros a diario.
¡Al lío!
La regla 3-2-1 de los Backups
En ciberseguridad y sistemas hay una norma sagrada que deberías seguir si no quieres perder tus datos ante un ataque de ransomware o un fallo físico de hardware.
- 3 copias de seguridad de tus archivos importantes.
- Al menos en 2 soportes físicos diferentes (SSD principal, un disco externo o un NAS).
- Al menos 1 copia fuera de tu casa (nube o en un servidor remoto).
El Script en Bash
- mkdir -p ~/scripts
- nano ~/scripts/backup_linux.sh
Ahora si quieres puedes copiar y pegar el siguiente código.
Acuérdate de modificar las rutas de ejemplo para adaptarlas a tu usuario y tus carpetas reales!
=======================================================================
#!/bin/bash
####################################
# SCRIPT PARA COPIA DE SEGURIDAD
####################################
# --- CONFIGURACION BASICA ---
ORIGEN="/home/tu_usuario/Proyectos"
DESTINO="/media/tu_usuario/disco_externo/Backups"
LOG="/var/log/backup_system.log" # Acuérdate de los permisos de escritura o muevelo a tu home
FECHA=$(date +"%Y-%m-%d %H:%M:%S")
# Nota: Puedes cambiar la variable LOG a:
# LOG="/home/tu_usuario/backup_system.log"
# --- INICIO DE LA COPIA ---
echo "----------------------------------------" >> "$LOG"
echo "[$FECHA] Iniciando copia de seguridad..." >> "$LOG"
# 1. Comprobar si nuestro directorio de origen existe
if [ ! -d "$ORIGEN" ]; then
echo "[$FECHA] ERROR: El directorio $ORIGEN no existe." >> "$LOG"
exit 1
fi
# 2. Comprobar si el destino esta montado/disponible, depende donde lo quieras
if [ ! -d "$DESTINO" ]; then
echo "[$FECHA] ERROR: $DESTINO no está disponible." >> "$LOG"
exit 1
fi
# 3. Ejecutar rsync con parámetros optimizados:
echo "[$FECHA] Sincronizando..." >> "$LOG"
rsync -avh --delete "$ORIGEN/" "$DESTINO/" >> "$LOG" 2>&1
# 4. Verificar si rsync terminó con éxito (código de salida 0)
if [ $? -eq 0 ]; then
echo "[$FECHA] Copia de seguridad completada correctamente." >> "$LOG"
else
echo "[$FECHA] ALERTA!! rsync Error en copia de seguridad." >> "$LOG"
fi
echo "----------------------------------------" >> "$LOG"
=======================================================================
Cuando hacemos uso de rsync:
- -a (archive) -- Preserva permisos, enlaces simbólicos, marcas de tiempo y propietarios.
- -v (verbose) -- Nos muestra qué se está copiando.
- -h (human-readable) -- Enseña los tamaños de archivo en formato legible (KB, MB, GB).
- --delete -- ¡Cuidado! Borra en el destino los archivos que ya no existan en el origen (siempre que queramos una copia espejo exacta).
Guardamos el archivo en nano y le damos permisos de ejecución al script para que el sistema nos deje ejecutarlo:
- chmod +x ~/scripts/backup_linux.sh
Es momento de probarlo, podemos invocarlo escribiendo:
- ./backup_linux.sh
Es el momento de revisar si se ha generado tu archivo log o el destino para comprobar que los archivos se han sincronizado perfectamente.
Automatización con Cronjobs
Tener el script ya nos quita algo de trabajo pero si tienes que acordarte de ejecutarjo tú mismo cada noche... puede que algún día no nos acordemos! Para eso nos va de maravilla que estemos en un sistema basado en Unix ya que la automatización de tareas periódicas se gestiona mediante el daemon Cron.
Para programar el script editaremos nuestra tabla de tareas programadas (crontab):
- crontab -e
Tranquilo, si es la primera vez que lo abres, te preguntará qué editor quieres usar, yo siempre que pueda me decanto por nano, al final es el primero que toqué en su día y es con el que más cómodo me siento... cada uno a sus preferencias!
Ve al final del archivo y añade una nueva línea, la sintaxis de Cron utiliza 5 columnas temporales antes de indicar el comando a ejecutar:
[Minuto] [Hora] [Día_del_Mes] [Mes] [Día_de_la_Semana] [Script]
Si quieres que tu backup se ejecute todos los días a las 3:00 AM (hora para que no interrumpa tu jornada):
- 0 3 * * * /home/tu_usuario/scripts/backup_linux.sh
Prefiero que se ejecute solo los domingos a la medianoche... ok! sería asi:
- 0 0 * * 0 /home/tu_usuario/scripts/backup_linux.sh
En fin, es ir haciendo pruebas y cada uno hacer su propia configuración. Guardamos el archivo y cerramos el editor y listo!! El sistema se encargará de ejecutar el script en segundo plano sin que te enteres.
Te recomiendo buenas prácticas de seguridad aplicadas al Backup, tus respaldos contienen copias exactas de tus bases de datos, claves SSH públicas, código y documentación y si no las proteges bien... pueden convertirse en un vector de ataque, recuerdalo!!
Mis recomendaciones básicas:
1) Protege tu script y copias, solo tú (y root) debería poder leer o modificar tus scripts de copia de seguridad o las carpetas de destino.2) Backups remotos seguros (con llaves SSH por ejemplo)
Si modificas tu script para mandar tu backup a un servidor remoto mediante rsync sobre SSH, NUNCA NUNCA uses contraseñas escritas en texto plano en el código, lo normal sería configurar autenticación con llaves criptográficas públicas sin contraseña (ssh-keygen y ssh-copy-id).
3) Verifica de vez en cuando, no confíes ciegamente en que el script funciona porque "no da error"... Una vez al mes yo entraría a la carpeta de la de seguridad, recupera algún archivo y probaría que se abra correctamente. Un backup que no se puede restaurar no sirve de nada!
Conclusión
Automatizar copias en Linux con Bash y rsync lleva apenas 10 min, 15 lo maximo, pero te puede salvar de perder noches enteras de trabajo.
¡Adapta el script, configura tu cronjob y deja que Linux haga el trabajo sucio!¿Tienes alguna duda configurando el script? ¡Déjala abajo en los comentarios y lo resolvemos juntos!
>_Saludos!
No hay comentarios:
Publicar un comentario