#!/bin/bash # # Script de restauration interactive Borgmatic # Usage: ./restore.sh # set -e # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Charger les variables d'environnement if [ -f /etc/borgmatic/.env ]; then source /etc/borgmatic/.env elif [ -f .env ]; then source .env else echo -e "${RED}❌ Fichier .env non trouvé${NC}" exit 1 fi if [ -z "$BORG_REPO" ]; then echo -e "${RED}❌ BORG_REPO non défini${NC}" exit 1 fi echo -e "${BLUE}==================================================${NC}" echo -e "${BLUE}Script de restauration Borgmatic${NC}" echo -e "${BLUE}==================================================${NC}" echo "" # 1. Lister les archives disponibles echo -e "${YELLOW}📦 Archives disponibles:${NC}" echo "" borg list "$BORG_REPO" --short echo "" # 2. Demander quelle archive restaurer read -p "Nom de l'archive à restaurer (ou 'latest' pour la plus récente): " ARCHIVE_NAME if [ "$ARCHIVE_NAME" == "latest" ]; then ARCHIVE_NAME=$(borg list "$BORG_REPO" --short | tail -1) echo -e "${GREEN}Archive sélectionnée: ${ARCHIVE_NAME}${NC}" fi # 3. Vérifier que l'archive existe if ! borg list "$BORG_REPO::$ARCHIVE_NAME" > /dev/null 2>&1; then echo -e "${RED}❌ Archive non trouvée: $ARCHIVE_NAME${NC}" exit 1 fi # 4. Afficher le contenu de l'archive echo "" echo -e "${YELLOW}📂 Contenu de l'archive (répertoires principaux):${NC}" borg list "$BORG_REPO::$ARCHIVE_NAME" | head -50 echo "" # 5. Options de restauration echo -e "${YELLOW}Options de restauration:${NC}" echo "1. Monter l'archive pour exploration" echo "2. Extraire des fichiers/dossiers spécifiques" echo "3. Extraire l'archive complète (ATTENTION!)" echo "4. Annuler" echo "" read -p "Choix [1-4]: " CHOICE case $CHOICE in 1) # Monter l'archive MOUNT_POINT="/tmp/borg-restore-${ARCHIVE_NAME}" mkdir -p "$MOUNT_POINT" echo -e "${YELLOW}📌 Montage de l'archive dans: ${MOUNT_POINT}${NC}" borg mount "$BORG_REPO::$ARCHIVE_NAME" "$MOUNT_POINT" echo -e "${GREEN}✅ Archive montée avec succès${NC}" echo "" echo "Vous pouvez maintenant explorer et copier les fichiers depuis:" echo -e "${BLUE}${MOUNT_POINT}${NC}" echo "" echo "Pour démonter quand vous avez terminé:" echo -e "${YELLOW}borg umount ${MOUNT_POINT}${NC}" ;; 2) # Extraction sélective read -p "Chemin du fichier/dossier à extraire (ex: /etc/nginx): " PATH_TO_RESTORE read -p "Destination (défaut: ./restore): " RESTORE_DEST RESTORE_DEST=${RESTORE_DEST:-./restore} mkdir -p "$RESTORE_DEST" echo -e "${YELLOW}🔄 Extraction en cours...${NC}" borg extract --progress "$BORG_REPO::$ARCHIVE_NAME" "$PATH_TO_RESTORE" --destination "$RESTORE_DEST" echo -e "${GREEN}✅ Extraction terminée dans: ${RESTORE_DEST}${NC}" ;; 3) # Extraction complète echo -e "${RED}⚠️ ATTENTION: Cette opération va extraire TOUTE l'archive${NC}" read -p "Êtes-vous sûr? (tapez 'OUI' en majuscules): " CONFIRM if [ "$CONFIRM" != "OUI" ]; then echo -e "${YELLOW}Annulé${NC}" exit 0 fi read -p "Destination (défaut: ./restore-full): " RESTORE_DEST RESTORE_DEST=${RESTORE_DEST:-./restore-full} mkdir -p "$RESTORE_DEST" echo -e "${YELLOW}🔄 Extraction complète en cours (peut prendre du temps)...${NC}" borg extract --progress "$BORG_REPO::$ARCHIVE_NAME" --destination "$RESTORE_DEST" echo -e "${GREEN}✅ Extraction complète terminée dans: ${RESTORE_DEST}${NC}" ;; 4) echo -e "${YELLOW}Annulé${NC}" exit 0 ;; *) echo -e "${RED}❌ Choix invalide${NC}" exit 1 ;; esac echo "" echo -e "${GREEN}==================================================${NC}" echo -e "${GREEN}✅ Opération terminée${NC}" echo -e "${GREEN}==================================================${NC}"