Borg backup (Français) - ArchWiki

Jump to content

Related articles

- System backup
- Synchronization and backup programs

BorgBackup (abrégé : Borg) est un programme de sauvegarde par déduplication. En option, il prend en charge la compression et le chiffrement authentifié.

L'objectif principal de Borg est de fournir un moyen efficace et sûr de sauvegarder des données. La technique de déduplication des données utilisée rend Borg approprié pour les sauvegardes quotidiennes puisque seules les modifications sont stockées. La technique de chiffrement authentifié permet d'effectuer des sauvegardes vers des cibles qui ne sont pas entièrement fiables.

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. Consultez Category:Backup (Français).

## Installation

Installez le paquet borg. La version de développement est disponible avec borg-gitAUR.

Les dépendances optionnelles python-llfuse (pour le montage des archives) et openssh (pour la connexion à des hôtes distants) sont recommandées.

Le programme pika-backupAUR apporte une interface graphique à Borg.

## Documentation

La documentation très complète propose un guide de démarrage. En supplément des exemples fournis dans ces liens, consultez également borg(1) et `apropos borg`.

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

## Utilisation

Le concept principal sur lequel se fonde Borg est la 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émentales répétées.

L'option de compression (zstd est recommandée) dont on peut choisir l'intensité, accentuera ce gain d'espace.

Ces archives peuvent se "monter" très simplement dans le système de fichiers pour étude et récupération sélective.

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

La sauvegarde peut être soit locale avec une partition dédiée, un disque externe, soit distante par SSHFS, NFS, Samba… (l'utilisation de SSH est particulièrement recommandée et documentée).

Les commandes essentielles sont les suivantes :

    $ borg init

puis :

    $ borg create ; borg list ; borg check ; borg mount

Note:

- Depuis la version 1.1 la commande `borg init` doit comporter la mention du mode de chiffrement, une sécurité par simple mot de passe sera donc initiée par :

    $ borg init --encryption=repokey /path/to/repo

- 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

## Trucs et astuces

### Création des programmes

#### Exclusions

Créez un fichier `~/.borg/exclusions` : une ligne par répertoire 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:

- La documentation précise "Due to whitespace removal paths with whitespace at the beginning or end can only be excluded using regular expressions", il convient donc d'utiliser dans un fichier d'exclusion `/home/user/Playon*` et non `/home/user/'PlayOnLinux's\ virtual\ drives/`.
- Depuis la version 1.1.0-1 bien respecter l'ordre des options suivant : `borg create [Options/Flags] ARCHIVE [PATH [PATH [...]]]`, ce qui implique de placer les options d'exclusions avant `[SOURCE [DESTINATION [...]]]`.

#### Exclusions des caches

La liste d'exclusions peut être allégée avec l'option : `--exclude-caches`, pour les répertoires de cache dans lesquels on aura placé le fichier `CACHEDIR.TAG` selon Tagging Standard (pris aussi en charge par tar, détail ici).

L'exclusion s'utilise comme suit :

    ... [--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

Et on peut vérifier avec :

    $ find . -maxdepth 4  -name CACHEDIR.TAG

#### Créer un script

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 répertoire personnel `BACKUP`:

    ~/.local/bin/BorgData.sh

    #!/bin/bash
    ## Sauvegarde quotidienne 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 débogage 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" évite l'interruption du script par un code d'erreur en cas, par exemple 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éez un programme, pour des données personnelles on peut le placer dans `~/.local/bin/` (remplacez terminal par la console de votre choix):

    ~/.local/bin/bkp_mon_user

    #!/bin/bash
    terminal -e  /path/to/BorgData.sh

on n'oublie pas de le rendre exécutable.

### Automatisation

#### Par cron

Consulter la solution de Jocelyn Delalande par exemple :

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 et 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. Pour cela, créez le répertoire `/root/.borg`, puis ajoutez `votremotdepasse` dans le fichier `/root/.borg/passphrase`. Pour la protéger des autres utilisateurs de la machine :

    # 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_PASSPHRASE` comme expliqué dans la documentation.

Pour une meilleure sécurité, il est préférable de définir cette variable dans un script plutôt que de façon permanente dans le `.bashrc`/`.zshrc`, même si ce dernier est protégé par un `chmod 700`.

#### Par systemd

Un exemple simple, avec des données personnelles en utilisant une unité systemd/utilisateur :

- Créez le répertoire `~/.config/systemd/user/`

- Créez le service:

    ~/.config/systemd/user/bkp_mon_user.service

    [Unit]
    Description=Sauvegarde des données de user

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

- Créez le timer :

    ~/.config/systemd/user/bkp_mon_user.timer

    [Unit]
    Description=Sauvegarde quotidienne des données de user
    Documentation=man:borg

    [Timer]
    OnBootSec=15min
    OnUnitActiveSec=1d

    [Install]
    WantedBy=timers.target

- Activez l'unité `bkp_mon_user.timer` créée.

- En cas de modification, rechargez l'unité de systemd.

- Contrôlez le «status» de l'unité utilisateur `bkp_mon_user.timer` directement ou avec le journal de systemd (éventuellement, utilisez `du -sh /path/to/user_bkp`).

### Restauration des données personnelles

#### Récupération manuelle

On commence par lister les archives disponibles :

    $ borg list /path/to/repo/DIR

On peut effectuer un simple 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 copie effectuée depuis l'archive, le démontage se fera par :

    $ borg umount ~/mnt/point

#### Récupération par extraction

On peut également extraire (pour restauration ou comparaison) depuis une archive.

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

    $ cd ~/Répertoire_de_Restauration

Soit la totalité de l'archive :

    $ borg extract /media/bkp/user_bkp::user_date

Soit un répertoire ou un fichier seul

    $ borg extract /media/bkp/user_bkp::user_date home/user/répertoire_ou_fichier_voulu

Astuce: La commande `borg extract` écrit les fichiers physiquement : si une partie des fichiers extraits n'est plus utile, il convient d'utiliser rm.

### Restauration du système

#### Restauration du système à un état archivé

La commande est extract.

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.

Notez cependant qu'on peut exclure une liste de fichiers par l'ajout de l'option `--exclude` à la commande `extract`, voir `$ borg help extract`.
Note: La commande `extract` écrit toujours dans le répertoire courant

On se placera donc :

- solution recommandée : 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`

- solution alternative : 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 -aAXHv --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/home/*","/lost+found"} /path/to/mount_point/ /

Note: Ne pas oublier le slash final de mount_point.

#### Restauration d'un système devenu instable et/ou inutilisable

Anticipez en préparant l'outil de sécurité minimum qu'est une archlinux.iso récente sur une clef USB, complétée et recompilée comme expliqué dans Archiso avec l'ajout de Borg, FUSE, un multiplexeur de terminal (ici screen) et un éditeur complet (ici vim):

    ~/archlive/releng/packages.x86_64

    ...
    borg
    fuse
    screen
    vim

Éventuellement quelques lignes de commandes dans un fichier texte aide-mémoire peut être ajouté à la racine : `~/archlive/releng/aide-memoire.txt`.

Borg sera ainsi installé, fonctionnel, son manuel consultable hors ligne, ainsi qu'un vim complet et non minimum, accompagné par une console sectionnable par screen.

Une fois démarré le système de récupération, on montera les chemins source et destination dans des emplacements adéquats créés par, par exemple :

    # mkdir /media{source,destination}

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

### Réparation d'un dépôt de sauvegardes endommagé

Un article très complet est consultable dans le blog de garamotte.

## Voir aussi

- Documentation officielle (en)
- Automatisation par un service + timer systemd sur le blog de garamotte
- Un article sur Linux Pratique
- 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[dead link 2022-09-17 ⓘ]
- Sauvegardes dédupliquées avec Borg-Backup : retour d'expérience[dead link 2022-09-17 ⓘ], 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)

Hidden category:

- Pages with dead links