# La sauvegarde de savanecloud.fr

J'ai découvert "Borg" lors du stage concluant ma formation de reconversion professionnelle. L'outil est simple, efficace, disponible sur Synology DSM et il existe des fournisseurs de services spécialisés chez lesquels, on peut externaliser nos sauvegardes. Mais me direz-vous pourquoi externaliser des sauvegardes ? Beh ouais, avec un NAS en RAID 1 j'ai peu de risque de perdre mes données. Effectivement. Mais le risque existe. Matérialisé par un cambriolage ou une destruction malencontreuse dudit NAS. Bref. Un jour j'ai eu peur et j'ai pris au sérieux la sauvegarde en dehors du cadre professionnel. Et bien entendu, laisser faire le boulot par Google, Dropbox, feu Hubic ou Microsoft ne me plaisais pas beaucoup.

- Borg backup : https://github.com/borgbackup/borg/
- BorgBase : https://www.borgbase.com

## Installation de Borg sur le Synology

### Le dépot de Synocommunity

Le paquet n'est pas disponible par défaut dans le dépôt ("repository", dire "ripo" pour les franglophones) de DSM. Pour l'obtenir, il faut ajouter un dépôt depuis les paramètres du gestionnaire de paquets de DSM. Le dépôt que j'utilise est celui de SynoCommunity. Ensuite il suffit de raffraîchir la liste des paquets disponibles et Borg Apparaît. Vous noterez en bas que Borg nécessite Python 3.11, cette dépendance est aussi à installer depuis le dépôt de SynoCommunity.

## Script de sauvegarde avec Borg

    #!/bin/bash
    # borg init --encryption=keyfile-blake2 /volume1/Backup/borgrepolzma/

    #Formatage et mise en page
    stars='***************************************************************************'

    # Pour le calcul d'exécutoin du script
    start_time=$(date +%s)

    log_file='/volume1/Backup/logs/'$(date +%Y-%m-%d--%Hh%M)'_borgbase.log'

    echo $(date +%d\ %b\ %Y\ %H:%M:%S) 2>&1 | tee -a $log_file

    # Définition des variables d'environnement pour simplifier les commandes
    # export BORG_RSH=<clef privée pour sauvegarder sur le serveur distant>
    # export BORG_REPO='borgserver:/borgrepo'
    export BORG_REPO='borgserver:borgrepo'
    export BORG_CACHE_DIR='<emplacement du cache de Borg>'

    # Cron n'a pas de $HOME
    export HOME=/root

    # Suite  l'erreur "Attempting to access a previously unknown unencrypted repository!"
    # Apparue le 28/05/2020
    export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes

    printf '\n%s\n%s\n%s\n' $stars "Début de la sauvegarde  " $stars 2>&1 | tee -a $log_file

    # Préparation de la sauvegarde du nextcloud
    docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --on 2>&1 | tee -a $log_file
    sleep 1m 2>&1 | tee -a $log_file

    # Dump de la base de données Postgres
    docker exec -i nextcloud_db_1 /usr/bin/pg_dump -U nextcloud nextcloud | gzip -9 > /volume1/nextcloud/db_dump.sql.gz 2>&1 | tee -a $log_file
    # Restaurer la BDD
    # docker exec nextcloud_db_1 pg_restore -U postgres -d nexcloud /backups/db_dump.sql

    /usr/local/bin/borg create \
    --one-file-system \
    --stats \
    --compression lz4 \
    ::{now:%Y-%m-%d--%Hh%M} \
    /volume1/dir1 \
    /volume1/dir2 \
    /volume1/nextcloud \
    --exclude /volume1/nextcloud/db \
    2>&1 | tee -a $log_file
    # ne pas sauvegarder les fichiers du conteneur postgres
    #--exclude /volume1/nextcloud/db \

    # Fin de la sauvegarde
    docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --off 2>&1 | tee -a $log_file

    printf '\n%s\n%s\n%s\n' $stars "PRUNE" $stars 2>&1 | tee -a $log_file

    # Keep 31 end of day, 0 additional end of week archives, and 0 end of month archive
    /usr/local/bin/borg prune -v --list --stats --keep-daily=31 --keep-weekly=0 --keep-monthly=0 2>&1 | tee -a $log_file
    printf '\n%s\n' '--- Fin de la sauvegarde ---' 2>&1 | tee -a $log_file

    printf '\n%s\n%s\n%s\n' $stars "borg info" $stars >> $log_file
    # Pour le mail envoyé en fin par le Task Scheduler Synology
    /usr/local/bin/borg info borgserver:borgrepo >> $log_file

    printf '\n%s\n%s\n%s\n' $stars "...Suppression des logs de plus de 200 jours..." $stars 2>&1 | tee -a $log_file
    find /volume1/Backup/logs -mtime +60 -exec rm -f {} \; 2>&1 | tee -a $log_file

    timestamp=$(date +%s)
    TZ='Europe/Paris' printf '%s\nNous sommes le %(%d %b %Y)T et il est %(%H:%M:%S)T.\n%s\n' $stars $timestamp $timestamp $stars 2>&1 | tee -a $log_file

    # Calcul du temps d'exécution du script
    end_time=$(date +%s)
    exec_time=$(($end_time - $start_time))
    printf '\n%s\n' $stars
    TZ='Europe/Paris' printf "L'exécution du script a duré %(%Hh%Mm%Ss)T\n" $exec_time 2>&1 | tee -a $log_file

Le service qui me permet d'externaliser facilement les sauvegardes, est BorgBase.

« Previous Next »