Repte 2.3:Realització de backups
Primer hem de fer el script que permetrà fer un backup de les nostres màquines, farem que ho faci pel vagrant, així podem executar-ho des de la nostra màquina i ens fa una snapshot de la màquina que estigui encesa, no força res per evitar possibles errors i problemes.
#!/bin/bash
VAGRANT_DIR="$HOME/Documents/debian"
MAQUINAS_BACKUP=(
"debianproxy"
"router_2"
"debiandns"
"debianslave"
"debianldap"
"rockyFTP"
"rockyNFS"
)
SNAPSHOT_PREFIX="backup"
LOG_DIR="$VAGRANT_DIR/logs"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # No Color
log() {
local level="$1"; shift
local msg="$*"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
case "$level" in
INFO) echo -e "${BLUE}[INFO]${NC} ${timestamp} — ${msg}" | tee -a "$LOG_FILE" ;;
OK) echo -e "${GREEN}[OK]${NC} ${timestamp} — ${msg}" | tee -a "$LOG_FILE" ;;
WARN) echo -e "${YELLOW}[WARN]${NC} ${timestamp} — ${msg}" | tee -a "$LOG_FILE" ;;
ERROR) echo -e "${RED}[ERROR]${NC} ${timestamp} — ${msg}" | tee -a "$LOG_FILE" ;;
TITLE) echo -e "\n${BOLD}${CYAN}$msg${NC}\n" | tee -a "$LOG_FILE" ;;
esac
}
vm_esta_corriendo() {
local nombre="$1"
cd "$VAGRANT_DIR" && vagrant status "$nombre" --machine-readable | grep -q ",${nombre},state,running"
}
hacer_snapshot() {
local nombre="$1"
local etiqueta="$2"
local snapshot_name="${SNAPSHOT_PREFIX}_${etiqueta}"
log INFO "Creando snapshot de '${nombre}'..."
if cd "$VAGRANT_DIR" && vagrant snapshot save "$nombre" "$snapshot_name" >> "$LOG_FILE" 2>&1; then
log OK "Guardado con éxito: '${nombre}' -> '${snapshot_name}'"
return 0
else
log ERROR "Error al procesar '${nombre}'. Revisa el log para más detalles."
return 1
fi
}
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
FECHA_HUMANA=$(date '+%d/%m/%Y %H:%M:%S')
mkdir -p "$LOG_DIR"
LOG_FILE="${LOG_DIR}/backup_${TIMESTAMP}.log"
log TITLE "════════════════════════════════════════"
log TITLE " SISTEMA DE BACKUP VAGRANT — ${FECHA_HUMANA}"
log TITLE "════════════════════════════════════════"
if [[ ! -f "$VAGRANT_DIR/Vagrantfile" ]]; then
log ERROR "No se encontró el Vagrantfile en $VAGRANT_DIR"
exit 1
fi
log INFO "Máquinas incluidas en este backup:"
for vm in "${MAQUINAS_BACKUP[@]}"; do
echo -e " ${CYAN}•${NC} ${vm}"
done
echo ""
read -rp "¿Confirmas el inicio del backup de estas máquinas? [s/N]: " confirma
if [[ ! "$confirma" =~ ^[sS]$ ]]; then
log WARN "Backup cancelado por el usuario."
exit 0
fi
EXITO=0
FALLO=0
SALTADAS=0
for vm in "${MAQUINAS_BACKUP[@]}"; do
echo "--------------------------------------------------------"
log INFO "Analizando: ${vm}"
if vm_esta_corriendo "$vm"; then
if hacer_snapshot "$vm" "$TIMESTAMP"; then
((EXITO++))
else
((FALLO++))
fi
else
log WARN "La máquina '${vm}' no está 'running'. Saltando..."
((SALTADAS++))
fi
done
echo ""
log TITLE "════════════════ RESUMEN ════════════════"
log OK "Finalizadas con éxito: ${EXITO}"
[[ $FALLO -gt 0 ]] && log ERROR "Fallidas: ${FALLO}"
[[ $SALTADAS -gt 0 ]] && log WARN "Omitidas (apagadas): ${SALTADAS}"
log INFO "Archivo de log: ${LOG_FILE}"
log TITLE "═════════════════════════════════════════"
[[ $FALLO -gt 0 ]] && exit 1 || exit 0
Ho executem i dona aquest resultat:
[11:02:28][debian][hbarbera@hbarbera]-$ ./backup_vms.sh
════════════════════════════════════════
SISTEMA DE BACKUP VAGRANT — 10/04/2026 11:02:32
════════════════════════════════════════
[INFO] 2026-04-10 11:02:32 — Máquinas incluidas en este backup:
• debianproxy
• router_2
• debiandns
• debianslave
• debianldap
• rockyFTP
• rockyNFS
¿Confirmas el inicio del backup de estas máquinas? [s/N]: s
--------------------------------------------------------
[INFO] 2026-04-10 11:02:43 — Analizando: debianproxy
[WARN] 2026-04-10 11:02:46 — La máquina 'debianproxy' no está 'running'. Saltando...
--------------------------------------------------------
[INFO] 2026-04-10 11:02:46 — Analizando: router_2
[INFO] 2026-04-10 11:02:50 — Creando snapshot de 'router_2'...
[OK] 2026-04-10 11:03:01 — Guardado con éxito: 'router_2' -> 'backup_20260410_110232'
--------------------------------------------------------
[INFO] 2026-04-10 11:03:01 — Analizando: debiandns
[INFO] 2026-04-10 11:03:05 — Creando snapshot de 'debiandns'...
[OK] 2026-04-10 11:03:14 — Guardado con éxito: 'debiandns' -> 'backup_20260410_110232'
--------------------------------------------------------
[INFO] 2026-04-10 11:03:14 — Analizando: debianslave
[WARN] 2026-04-10 11:03:17 — La máquina 'debianslave' no está 'running'. Saltando...
--------------------------------------------------------
[INFO] 2026-04-10 11:03:17 — Analizando: debianldap
[WARN] 2026-04-10 11:03:21 — La máquina 'debianldap' no está 'running'. Saltando...
--------------------------------------------------------
[INFO] 2026-04-10 11:03:21 — Analizando: rockyFTP
[INFO] 2026-04-10 11:03:25 — Creando snapshot de 'rockyFTP'...
[OK] 2026-04-10 11:03:36 — Guardado con éxito: 'rockyFTP' -> 'backup_20260410_110232'
--------------------------------------------------------
[INFO] 2026-04-10 11:03:36 — Analizando: rockyNFS
[WARN] 2026-04-10 11:03:39 — La máquina 'rockyNFS' no está 'running'. Saltando...
════════════════ RESUMEN ════════════════
[OK] 2026-04-10 11:03:39 — Finalizadas con éxito: 3
[WARN] 2026-04-10 11:03:39 — Omitidas (apagadas): 4
[INFO] 2026-04-10 11:03:39 — Archivo de log: /home/hbarbera/Documents/debian/logs/backup_20260410_110232.log
═════════════════════════════════════════ A més fa un log que ensenya el mateix que pots veure a la consola, per poder fer un seguiment del backups que has fet.