#!/bin/bash # ============================================================ # backup_immich_usb.sh — Backup Immich → clé USB /backup # Exclut : postgres (géré séparément), thumbs, encoded-video # ============================================================ SOURCE="/mnt/serveurNAS/Immich/" DEST="/backup/immich/" LOGFILE="/var/log/backup_immich_usb.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') echo "[$DATE] === Début backup Immich → USB ===" >> "$LOGFILE" # Monter la clé USB si elle ne l'est pas déjà (l'automount systemd peut être inactif après débranchement) mount /backup 2>/dev/null || true # Vérifier que la clé USB est bien montée if ! mountpoint -q /backup; then echo "[$DATE] ERREUR: /backup n'est pas monté (clé USB absente ?)" >> "$LOGFILE" exit 1 fi # Vérifier espace disponible (alerte si < 5 Go) AVAIL=$(df /backup | awk 'NR==2 {print $4}') AVAIL_GB=$((AVAIL / 1024 / 1024)) echo "[$DATE] Espace disponible sur clé USB: ${AVAIL_GB} Go" >> "$LOGFILE" if [ "$AVAIL_GB" -lt 5 ]; then echo "[$DATE] AVERTISSEMENT: Moins de 5 Go disponibles sur la clé USB !" >> "$LOGFILE" fi # Créer le dossier destination mkdir -p "$DEST" # Rsync — copie uniquement les fichiers modifiés # Exclut : postgres (base de données), thumbs et encoded-video (régénérables) rsync -av \ --no-perms --no-owner --no-group \ --exclude='postgres/' \ --exclude='thumbs/' \ --exclude='encoded-video/' \ --delete \ --progress \ --stats \ "$SOURCE" "$DEST" >> "$LOGFILE" 2>&1 EXIT_CODE=$? DATE_END=$(date '+%Y-%m-%d %H:%M:%S') if [ $EXIT_CODE -eq 0 ]; then echo "[$DATE_END] ✅ Backup terminé avec succès" >> "$LOGFILE" # Taille finale SIZE=$(du -sh "$DEST" 2>/dev/null | cut -f1) echo "[$DATE_END] Taille backup: $SIZE" >> "$LOGFILE" else echo "[$DATE_END] ❌ Backup terminé avec erreurs (code: $EXIT_CODE)" >> "$LOGFILE" fi echo "[$DATE_END] === Fin backup ===" >> "$LOGFILE" echo "" >> "$LOGFILE" exit $EXIT_CODE