#!/bin/bash # ============================================================================== # == Script di Backup Completo (v3.0) - Flotta Autonoma di Mauro == # ============================================================================== # Questo script esegue un backup completo dell'Hub Dati (/mnt/ssd), # utilizzando un file di esclusioni per ignorare i percorsi non necessari. # ------------------------------------------------------------------------------ # --- Variabili di Configurazione --- export RESTIC_REPOSITORY="/mnt/backup-hdd/flotta-backup" export RESTIC_PASSWORD_FILE="/mnt/ssd/data/Dropbox/adrian/scripts/secrets/restic_password" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" LOG_DIR="$SCRIPT_DIR/logs" LOG_FILE="$LOG_DIR/backup_completo.log" SOURCE_DIR="/mnt/ssd" EXCLUSION_FILE="$SCRIPT_DIR/backup_completo_exclusions.txt" # Assicura che la cartella dei log esista da subito mkdir -p "$LOG_DIR" # Recupera la password restic da variabile o file dedicato PASSWORD_FILE="${RESTIC_PASSWORD_FILE:-$HOME/.config/restic/password}" if [[ -z "${RESTIC_PASSWORD:-}" ]]; then if [[ -r "$PASSWORD_FILE" ]]; then RESTIC_PASSWORD="$(<"$PASSWORD_FILE")" export RESTIC_PASSWORD else echo "===== BACKUP FALLITO: $(date) =====" >> "$LOG_FILE" echo "RESTIC_PASSWORD non impostata e file \"$PASSWORD_FILE\" non leggibile" | tee -a "$LOG_FILE" >&2 exit 1 fi fi trap 'unset RESTIC_PASSWORD' EXIT # --- Inizio dello Script --- echo "===== INIZIO BACKUP COMPLETO: $(date) =====" >> "$LOG_FILE" # Esegue il backup dell'intero Hub Dati, applicando il file delle esclusioni restic backup "$SOURCE_DIR" --exclude-file="$EXCLUSION_FILE" >> "$LOG_FILE" 2>&1 # Applica la policy di conservazione degli snapshot restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune >> "$LOG_FILE" 2>&1 # Esegue un controllo di integrità settimanale (domenica) if [[ "$(date +%u)" == "7" ]]; then echo "===== CHECK RESTIC: $(date) =====" >> "$LOG_FILE" if restic check >> "$LOG_FILE" 2>&1; then echo "===== CHECK RESTIC COMPLETATA =====" >> "$LOG_FILE" else echo "===== CHECK RESTIC FALLITA =====" >> "$LOG_FILE" fi fi echo "===== FINE BACKUP COMPLETO: $(date) =====" >> "$LOG_FILE" echo "" >> "$LOG_FILE" # Rimuove la password dall'ambiente per sicurezza unset RESTIC_PASSWORD