# Borg backup (Français)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Note: Borg est développé pour des distributions stables. Arch Linux, très réactive, a au moins une fois créé un dysfonctionnement temporaire par une mise à jour conflictuelle. Il est donc nécessaire de doubler les sauvegardes par Borg d'une autre méthode. En sus du classique rsync, on peut recommander le programme restic produisant lui aussi des sauvegardes incrémentales et différentielles mais nettement plus volumineuses qu'avec borg.

## Sauvegarde de ses données personnelles

Cet ajout au Wiki fait suite à la parution de l'article consacré à BORG dans Linux Pratique

En complément des solutions de Synchroniser vos ordinateurs on pourra donc utiliser l'excellent BORG.

## Principe : archivage par dé-duplication

- Plutôt qu'accumuler les fichiers comme dans l'archivage classique par TAR, la dé-duplication vérifie par hashage l'identité des fichiers, quels que soient leurs noms, pour ne les copier qu'une fois.
- Elle occupe ainsi, même sans compression, une place minimale pour des sauvegardes incréméntales répétées. L'option de compression (zstd est recommandée) dont on peut choisir l'intensité, accentuera ce gain d'espace .
- Enfin ces archives peuvent se "monter" très simplement dans le système de fichiers pour étude et récupération sélectives.

## Installation

### Installation normale

Le paquet community/borg est dans les dépôts officiels, cf Install

### Paquets AUR

Il existe aussi la version borg-gitAUR.

### Optionnels recommandés :

python-llfuse pour le montage des archives, openssh pour la connexion à des hôtes distants

## Utilisation

### Aide

La documentation très complète propose un Guide de démarrage. Voir bien sûr, le man, la liste des man disponibles par:

    $ apropos borg

et les exemples des sites en liens ci-dessus.

Une aide très détaillée est aussi disponible par les commandes, soit générale :

    $ borg help

soit circonstanciée :

    $ borg help <command>

exemple :

    $ borg help compression

D'abord, bien sûr, créer et définir un emplacement pour les sauvegardes,

- soit local : une partition dédiée, un disque externe,
- soit distant : SSHFS, NFS, Samba…, l'utilisation de SSH est particulièrement recommandée et documentée

Note: Il est important, pour des données sensibles, de créer plusieurs sauvegardes sur des supports différents, règle du 3 - 2 -1

- Commandes essentielles :

    borg init, puis : borg create, borg list, borg check, borg mount, etc...

- Depuis la version 1.1 la commande 'borg init' doit comporter la mention du mode de cryptage, cf.: Borg-Wiki, une sécurité par simple mot de passe sera donc initiée par :

    $ borg init -e=repokey /path/to/repo (ou --encryption=repokey...)

- Les commandes `borg mount` ou `borg extract` doivent être utilisées avec le chemin complet et réel (ce qui exclut les liens) du point de montage

## Création des programmes

### Exclusions

Exemples pour les données personnelles d'un utilisateur <user> :

- Créer un fichier ~/.borg/exclusions : une ligne par dossier ou fichier contenant, e.g. :

    /home/$USER/ARCHIVES
    /home/$USER/BACKUP
    /home/$USER/Downloads
    /home/$USER/VirtualBox*
    /home/$USER/.thumbnails
    /home/$USER/.thunderbird
      etc...

Note: 1. "Due to whitespace removal paths with whitespace at the beginning or end can only be excluded using regular expressions"

donc, utiliser dans un fichier d'exclusion /home/user/Playon* et non /home/user/'PlayOnLinux's\ virtual\ drives/

Note: 2. Depuis la version 1.1.0-1 bien respecter l'ordre des options suivant : borg create [Options/Flags] ARCHIVE [PATH [PATH [...]]]

    donc : options d'exclusions avant [SOURCE [DESTINATION [...]]]

### Exclusions des caches

Note: 3. Alléger la liste d'exclusions avec l'option: --exclude-caches, pour les répertoires de cache dans lesquels on aura placé le fichier CACHEDIR.TAG selon le standard, supporté aussi par TAR : Tagging_Standard, détail ici

Usage : ... [--exclude-from EXCLUDEFILE] [--exclude-caches] [--exclude-if-present FILENAME]

On peut positionner ce TAG en 3 commandes :

    $ echo "Signature: 8a477f597d28d172789f06886806bc55" > CACHEDIR.TAG
    $ find . -maxdepth 3 -type d -name cache -exec cp CACHEDIR.TAG {} \;
    $ rm CACHEDIR.TAG

Vérification :

    $ find . -maxdepth 4  -name CACHEDIR.TAG

### Créer un Script

par exemple un `.local/bin/BorgData.sh`, inspiré de celui donné ici, dans cet exemple la partition de BKP est sur un disque différent monté dans le fstab, avec en sus un montage bind du répertoire de destination sur un dossier personnel "BACKUP ":

    #!/bin/bash
    ## Backup quotidien du home de "user"
    set -e

    echo -e ""
    echo -e "     \e[55;15;5;12m***** sauvegarde des données de "user" *****\e[0m"
    echo -e ""

    # on exporte cette variable pour pouvoir supprimer une sauvegarde
    export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes

    # Pour pouvoir afficher une notification système il faut exporter cette variable:
    export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
    # notification
    notify-send 'Début de Sauvegarde des Données' --icon=dialog-information

    ## on peut - ou non - selon les exigences de sécurité
    ## renseigner ici la passphrase pour qu'elle ne soit
    ## pas demandée de façon interactive par le programme
    ## en ce cas faire un chmod 700 sur ce script pour vous en réserver l'accès et décommentez ci-dessous
    # export BORG_PASSPHRASE='ma_phrase_secrète'

    export sourcefolder='/home/user'
    export  REPOSITORY='/home/user/BACKUP/user_bkp'

    ## Créer le rapport - on y dirigera les flux de sortie du script pour debuggage si besoin
    {
        date "+%A %d %B %Y %Rh"
    } > $sourcefolder/RapportBorg.txt

    ## création de la sauvegarde
    borg create -v --stats --compression zstd,6 --exclude-from \
       /home/user/EXCLUSIONS --exclude-caches "$REPOSITORY::user_{now:%Y-%m-%d}" \
       "$sourcefolder" &>> $sourcefolder/RapportBorg.txt || true    ## l'alternative "|| true" pour éviter l'interruption du script par un code d'erreur en cas, par ex., d'un simple problème de lecture d'un fichier caché
                                                                    ## problème rencontré avec un cache de gwenview et quelques rares fichiers dépourvus de tout droit, même -r-- !!

    # ne conserver que les sauvegardes des : 7 derniers jours, 1/semaine pour les 4 dernières semaines et 1/mois pour les 3 derniers mois
    echo -e ""
    echo -e "     \e[55;15;5;12m***** Rotation sauvegarde *****\e[0m"
    borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=2

    ## on peut compléter le rapport par un bilan :
    {
       echo ""
       echo "Sauvegardes"
       borg list $REPOSITORY
       echo ""
       echo "Taille des Sauvegardes"
       du -sh $REPOSITORY
    }  >> $sourcefolder/RapportBorg.txt

    # notification
    notify-send 'Sauvegarde des Données' \
       'Sauvegarde Terminée' --icon=dialog-information

    ## Si on a créé la variable BORG_PASSPHRASE ne pas oublier de la supprimer
    ## pour éviter qu'elle apparaisse avec la simple commande 'env' ... : décommentez donc ci-dessous
    # unset BORG_PASSPHRASE

    exit 0

- Créer un programme, pour des données personnelles on peut le placer dans ~/.local/bin/ (remplacer terminal par la console de votre choix)

    $ vim ~/.local/bin/bkp_mon_user
    #!/bin/bash
    terminal -e  /path/to/BorgData.sh

on n'oublie pas:

    $ chmod u+x ~/.local/bin/bkp_mon_user

## Automatisation

- Par cron - voir la solution de Jocelyn Delalande dans LP par exemple :

    Automatisation

    Nous utilisons la configuration par défaut de cron, qui s'arrange pour que les scripts placés dans /etc/cron.daily soient exécutés quotidiennement.
    Puisque les sauvegardes sont poussées, l'automatisation est à configurer sur le client uniquement.
    Jusqu'ici, Borg nous demandait la phrase de passe à chaque opération. À des fins d'automatisation, il nous faut désormais la stocker dans un fichier :

    root@babasse # mkdir /root/.borg
    root@babasse # cat > /root/.borg/passphrase
    monmotdepasse
    ([Ctrl]+[D] pour valider)

    …et la protéger des autres utilisateurs de la machine :
    root@babasse # chmod 700 /root/.borg/passphrase

    Pour éviter la contrainte du renseignement de la passphrase en terminal à chaque commande Borg, on peut exporter la variable d'environnement/BORG ainsi :
    export BORG_PASSPHRASE='exemple : complicated & long' comme expliqué ici
    Pour une meilleure sécurité, plutôt inclure cet export dans un script que de façon permanente dans le .bashrc/.zshrc même protégé par un "chmod 700"

- Par Systemd - exemple simple pour données personnelles, avec une unité systemd/utilisateur :

Notifications :

    * Pour  pouvoir afficher une notification pour la sauvegarde de données personnelles, ajouter cette ligne au Script :
    export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

    * Et, par exemple :
    # notification
    notify-send 'Sauvegarde des Données' 'Début' --icon=dialog-information

    * Pour un Script de sauvegarde-système exécuté en root, insérer dans le script plutôt :
    # Message système
    sudo -u user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'Sauvegarde-Système' 'Début' --icon=dialog-information

    Référence

- Créer le répertoire ~/.config/systemd/user/
- Créer le service : ~/.config/systemd/user/bkp_mon_user.service

    # [Unit]
    Description=Sauvegarde des donnees de user

    [Service]
    Type=oneshot
    ExecStart=~/.local/bin/bkp_mon_user

- Créer le Timer : ~/.config/systemd/user/bkp_mon_user.timer

    [Unit]
    Description=Sauvegarde des donnees de user quotidienne
    Documentation=man:borg

    [Timer]
    OnBootSec=15min
    OnUnitActiveSec=1d

    [Install]
    WantedBy=timers.target

- Activer :

    $ systemctl --user enable bkp_mon_user.timer

- En cas de modification :

    $ systemctl --user daemon-reload

- Contrôle :

    $ systemctl --user status bkp_mon_user.timer
    $ journalctl -r --user-unit bkp_mon_user.service
    $ du -sh /path/to/user_bkp

## Restauration des données personnelles

- On commence par lister les archives disponibles :

    $ borg list /path/to/repo/DIR

- Récupération par montage d'une archive antérieure sur un répertoire créé ou existant, par la commande :

    $ borg mount /path/to/repo/DIR/::nom_date /mnt/point

- une fois la récupération terminée le démontage se fera par :

    $ borg umount ~/mnt/point

- Récupération par extract (pour restauration ou comparaison) d'une archive

    d'abord se placer dans le dossier de destination, la commande extract ne recevant pas d'autre chemin que celui de l'emplacement où elle est lancée

    $ cd ~/Dossier_de_Restauration

- - 1.la totalité de l'archive :

    $ borg extract /media/bkp/user_bkp::user_$date

- - 2.un répertoire seul :

    $ borg extract /media/bkp/user_bkp::user_$date home/user/répertoire_voulu

- - 3.un fichier seul :

    $ borg extract /media/bkp/user_bkp::user_$date home/user/répertoire/fichier_voulu

La commande extract, à l'inverse de mount, écrit les fichiers physiquement, ils ne seront pas effacés par la commande borg umount <répertoire> mais par rm

## Restauration du Système

- pour une restauration du système à un état archivé, la commande est extract

Note: 1. Attention . En cas d'utilisation de la commande extract, il y aura création de doublons dans la base de données de pacman en raison de l'absence - voir ce post - d'une option `--delete` dans la commande `borg extract`.

Cette même option --delete, dans rsync, évite cette duplication, voir Sauvegarde système complète avec rsync, ceci fait recommander une restauration en 2 temps, voir ci-dessous.

Noter cependant qu'on peut exclure une liste de fichiers par l'ajout de l'option --exclude à la commande extract, voir

    $ borg help extract

Note: 2. extract écrit toujours dans le répertoire courant

on se placera donc :

- soit, recommandé : dans un répertoire extérieur pour ensuite déplacer les seuls fichiers souhaités, ou tout le système, en deux temps avec la commande rsync -a --delete

- soit, directement dans le répertoire de destination mais en évitant soigneusement les doublons par l'option --exclude.

Pour une restauration complète à la date de la veille par exemple :

    # cd /path/to/mount_point/
    # borg extract $(echo /path/to/repo/DIR/::nom_`date -d yesterday +%F`)
    # rsync -aAXv --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/home/*","/lost+found"} /path/to/mount_point/ /  ## ne pas oublier le slash final de mount_point

- pour une restauration d'un système devenu instable et/ou inutilisable :

- anticiper en remplaçant l'outil de sécurité minimum qu'est une archlinux.iso récente "gravée" sur une clef USB, par une archlinux.iso complétée et recompilée comme expliqué dans le Wiki.

On ajoutera en fin du fichier `~/archlive/releng/packages.x86_64` : vim borg fuse screen (1 nom par ligne) et éventuellement quelques lignes de commandes dans un fichier texte aide-mémoire ajouté à la racine : `~/archlive/releng/aide-memoire.txt`.

Borg sera ainsi installé, fonctionnel, et son 'man' utilisable, ainsi qu'un vim complet et non minimum, une console sectionnable par screen.

Une fois lancée l'iso on montera les chemins source et destination dans des emplacements adéquats créés par, par exemple :

    # mkdir /media{src,dest}

- on pourra aussi utiliser la commande :

    # systemctl start gpm

pour pouvoir si besoin "copier-coller" depuis l'aide-mémoire par la souris (sélection puis clic-milieu).

## Réparation d'un Dépôt de Sauvegardes Endommagé

Un article très complet dans ce blog

## Interface graphique

Le programme pika-backupAUR (non testé) apporte une interface graphique à borg.

## Voir aussi

- Documentation officielle (en)
- Synchroniser vos dossiers locaux/distants (fr) Présentation rapide sur des logiciels de synchronisation multi-OS avec interface graphique (Capivara, Owncloud, Sparkleshare (Git), Syncany, Synkron et Unison) et retours des utilisateurs linuxfr.
- Un mémo en français
- Monter un serveur de sauvegardes avec BorgBackup
- Sauvegardes dédupliquées avec Borg-Backup : retour d'expérience, télécharger l'article au format .pdf
- borgmatic simple Python wrapper script for the Borg backup software (non testé)
- Devenir SysAdmin d’une PME - Les sauvegardes
- BorgBackup sur le Wiki de sebsauvage
- Installer BorgBackup sur un NAS
- Soucis rencontrés avec Borg

Categories:

- System administration (Français)
- Backup (Français)
- Français