Resumen
-
Cree un script bash que controle qué, dónde y cuándo se ejecutan las copias de seguridad.
-
Programe el ejecutable backup.sh con cron y revise los registros y el destino después de las ejecuciones.
-
Pruebe el script, use rutas absolutas para evitar fallas de cron y tiempo de ejecución, y use comentarios para la documentación.
Una herramienta como Déjà Dup es una forma gráfica fácil y excelente de automatizar las copias de seguridad de Linux. Sin embargo, crear un script de copia de seguridad es la forma superior de automatizar las copias de seguridad. Ofrece mucho más control sobre qué se respalda, dónde se respaldan los datos y la frecuencia de las tareas de respaldo. También es una introducción divertida a las secuencias de comandos básicas. Así es como creé un script de respaldo simple y usé cron para automatizar las tareas de respaldo.
Crear un script de copia de seguridad simple y automatizarlo
Siempre que edite y actualice el script con sus rutas absolutas, la ubicación de su copia de seguridad puede ser una carpeta local, una nueva partición de disco o una unidad externa.
Elegir un destino de copia de seguridad
El plan era crear un script de respaldo eficiente, pero también quería una copia de los directorios esenciales de Linux, en caso de que alguna vez necesitara recuperar el sistema. Mi ubicación de respaldo para este proyecto fue una unidad flash USB de 128 GB.
Las mejores unidades flash USB de 2024
¿Busca una unidad flash sólida para agregar a su transporte diario? Tenemos un resumen de algunos de los mejores del mercado.
Preparando la ubicación de la copia de seguridad
Ya sea que su ubicación de respaldo sea una unidad flash USB, un disco duro externo o una partición nueva, preste atención a las rutas absolutas del directorio y los puntos de montaje; Los necesitarás una vez que comencemos a escribir el script.
Este script de respaldo utiliza rsync, que generalmente está preinstalado en la mayoría de las distribuciones. Confirme su versión de rsync y, si falta, use el administrador de paquetes para instalarla.
Comencé el proyecto creando un nuevo directorio llamado «Copia de seguridad» en la unidad flash USB montada. Puede crear esta carpeta gráficamente navegando a la ubicación de su copia de seguridad y luego usando el acceso directo Ctrl+SHIFT+N. Opté por la terminal y utilicé los comandos lsblk, cd y mkdir.
lsblk
cd “/media/htg/DATA BACKUP”
mkdir backup
rsync --version
sudo apt update -y && sudo apt install rsync
Decidir qué hacer una copia de seguridad y crear un script backup.sh
Para fines de recuperación del sistema, elegí hacer una copia de seguridad de un directorio que contiene archivos personales consolidados y directorios esenciales de Linux como /home, etc, /var, /usr/local, /root y /opt. La mayoría de los editores de texto de terminales de Linux admiten secuencias de comandos básicas. Utilicé nano para crear y guardar un script simple backup.sh bin bash en el directorio de inicio. Copie y pegue el siguiente script en su editor de texto de terminal preferido:
#!/bin/bash
# This bash script backs up Linux recovery directories and personal files
# Preserves ownership, permissions, timestamps, ACLs, and xattrs
set -euo pipefail
#------------This is the CONFIG script-----------
HOSTNAME="$(hostname)"
DATE="$(date +%F)"
BACKUP_ROOT="/media/htg/DATA BACKUP/Backup"
DEST_DIR="$BACKUP_ROOT/archives/${HOSTNAME}_${DATE}"
LOG_FILE="BACKUP_ROOT/logs/backup_${HOSTNAME}_${DATE}.log"
TMP_DIR="$BACKUP_ROOT/tmp"
#Don't forget to edit the BACKUP_ROOT, DEST_DIR, LOG_FILE and TMP_DIR paths
#Customize SOURCES=( to include the files and directories you want to back up
SOURCES=(
"/home"
"/etc"
"/var"
"/root"
"/opt"
"/usr/local"
"/home/htg/Backup"
)
EXCLUDES=(
"--exclude=/var/cache/"
"--exclude=/var/tmp/"
"--exclude=/var/lib/apt/lists/"
"--exclude=/home/*/.cache/"
"--exclude=/home/*/Downloads/"
"--exclude=/var/lib/docker/"
"--exclude=/var/lib/containers/"
)
# Add these flags for backup summary and progress:
# --info=progress2: Total progress line
# --info=name0: Hide individual filenames
# --stats: Final summary block
# --no-inc-recursive: Better progress accuracy
RSYNC_FLAGS=(-aAXH --numeric-ids --delete --human-readable --inplace --partial --info=progress2 --info=name0 --stats --no-inc-recursive)
# ---------- PREPARATION ----------
# Create destination folders on the flash drive
mkdir -p "$DEST_DIR" "$TMP_DIR" "$(dirname "$LOG_FILE")"
touch "$LOG_FILE"
# ---------- BACKUP ----------
echo "[$(date)] Starting backup to $DEST_DIR" | tee -a "$LOG_FILE"
for SRC in "${SOURCES[@]}"; do
echo "[$(date)] Backing up $SRC ..." | tee -a "$LOG_FILE"
# Run rsync and log output
rsync "${RSYNC_FLAGS[@]}" "${EXCLUDES[@]}" "$SRC" "$DEST_DIR" >>"$LOG_FILE" 2>&1
done
echo "[$(date)] Backup completed" | tee -a "$LOG_FILE"
# ---------- VERIFY ----------
echo "[$(date)] Listing destination sizes:" | tee -a "$LOG_FILE"
du -sh "$DEST_DIR"/* 2>/dev/null | tee -a "$LOG_FILE"
exit 0
Edite el script reemplazando BACKUP_ROOT, DEST_DIR, LOG_FILE y TMP_DIR con sus rutas absolutas, luego escriba y salga; para nano, use Ctrl+O+Enter y Ctrl+X. La siguiente parte es usar el comando chmod para hacer que el script sea ejecutable y el comando ls para confirmar el permiso de ejecución (busque -x).
nano ~/backup.sh
chmod +x ~/backup.sh
ls -l ~/backup.sh
Probar el script de copia de seguridad y automatizarlo mediante trabajos cron
Aunque todas las estrategias de respaldo eventualmente fallan, probar los sistemas y scripts de respaldo puede reducir las posibilidades de una pérdida catastrófica de datos. Detecta errores que podrían causar fallas en el proceso y es un paso simple pero esencial que salvaguarda la integridad de cualquier proceso de respaldo. En algunos sistemas, es posible que necesite utilizar sudo para probar la ejecución del script.
~/backup.sh
sudo ~/backup.sh
El script no se ejecutará correctamente si encuentra errores, pero el sistema los imprimirá y usted podrá solucionar el problema desde allí. Si todo está bien, verás los mensajes «Iniciando copia de seguridad» y «Copia de seguridad /home…». Si va al destino de la copia de seguridad, debería ver algunos directorios respaldados.
Si está haciendo una copia de seguridad de una gran cantidad de datos en una unidad externa, el proceso puede tardar un poco. Mientras no te aparezca ningún mensaje de error, ten paciencia, aunque parezca que el terminal se ha congelado.
Después de probar el script y confirmar que funciona, utilicé cron para programarlo para que se ejecutara a las 8:00 p. m., el comando ls para confirmar la tarea de respaldo programada y el comando systemctl para verificar el estado del servicio de cron.
sudo crontab -e
0 20 * * * /usr/bin/bash /home/htg/backup.sh >> "/media/htg/DATA BACKUP/Backup/logs/cron_backup.log" 2>&1
sudo crontab -l
ls -l /home/htg/backup.sh
systemctl status cron
En este punto, había creado y probado con éxito mi script de respaldo y usé cron para automatizarlo. El último paso fue confirmar el proceso de copia de seguridad y verificar los registros después de las 8:00 p.m. del día siguiente.
Las 3 lecciones que aprendí por las malas
Crear este script de respaldo fue una experiencia educativa y divertida. El proyecto me enseñó tres lecciones que me han quedado grabadas hasta la fecha.
Pruebe siempre los scripts de copia de seguridad
No probé mi primer script de respaldo. ¿Puedes adivinar lo que pasó? Así es: cuando ejecuté una copia de seguridad de prueba, el script falló. Me tomó un tiempo darme cuenta de que había estropeado una variable de shell; Escribí FECHA+»$(fecha +%F)” en lugar de FECHA=“$(fecha +%F)”, lo que provocó un ‘error de comando no encontrado’ en la línea 10.
La prueba de scripts de respaldo detecta errores de sintaxis y errores de permisos que pueden causar errores de ejecución. También es una buena práctica.
Utilice rutas absolutas
Debido a que cron es estricto y los errores pueden hacer que un trabajo cron falle, adquiera el hábito de utilizar rutas completas y absolutas de directorios y archivos en su secuencia de comandos. Minimiza los errores, agiliza las copias de seguridad y puede ayudar a reducir los errores de ejecución.
Comentar tu guión es como dejar notas para ti mismo (y para otras personas) que expliquen la intención detrás de una parte o sección específica del guión. En las secuencias de comandos bash, el símbolo de almohadilla (#) es el método ampliamente aceptado para comentar. Es posible que hayas notado varios comentarios en mi script bash.
Considere un ejemplo en el que necesita cambiar un script 6 meses después de crearlo. Sin comentarios, las posibilidades de editar incorrectamente partes esenciales y romper el guión son altas porque el guión ya no está fresco en su mente.
Así es como automaticé las copias de seguridad de Linux con un simple script bash y las tres lecciones que aprendí de la manera más difícil. Si bien las secuencias de comandos no son la forma más fácil de automatizar las copias de seguridad, son divertidas y educativas, especialmente si desea aprender las secuencias de comandos básicas de bash.