BorgBackup, borg pour les intimes

BorgBackup (borg) est un logiciel de sauvegarde par déduplication supportant la compression et le chiffrement. Il est sous licence BSD 3-Clause, disponible sur GitHub et activement maintenu (dernière version 1.0.7 du 18/08/2016). C’est un fork d’Attic (dernier commit 24/05/2015).

Chaque fichier est découpé en blocs de X octets (chunk), chacun disposant de sa propre signature. Les fichiers ne sont donc pas lisibles directement car stockés sous forme de chunks.

Borg s’appuie sur Python 3.4 et est disponible pour Linux, FreeBSD/OpenBSD/NetBSD, Mac OS X. Ses principales qualités :

  • Il est simple à utiliser et puissant
  • Il fait de la déduplication (réduction importante de l’espace occupé par les sauvegardes), de la compression (lz4 très rapide mais compression faible, zlib rapidité et compression moyenne, lzma lent mais compression élevée) et du chiffrement (AES-256)
  • La documentation est simple et claire (mais en Anglais), la page Usage fournit des exemples et l’explication de chaque commande

Installation

Les commandes suivantes sont exécutées sur une Debian 8. Si vous souhaitez utiliser la commande borg mount, il faudra installer le support de FUSE.

borg extract permet d’extraire le contenu d’une sauvegarde dans le dossier courant donc Attention ! borg mount permet de « monter » une sauvegarde (système de fichiers en lecture seule) afin de consulter son contenu. On pourra alors se déplacer dedans et éventuellement copier les fichiers/dossiers qu’on souhaite récupérer. Je recommande borg mount. Cela évite une restauration complète d’une sauvegarde (via borg extract) avec le nécessaire nettoyage que ça implique derrière si on n’a pas besoin de récupérer tous les fichiers/dossiers.

Voilà Borg est installé. On va créer deux dossiers : mkdir -p /home/babar/borg_backup /home/babar/tests. Le premier sera le repository Borg et le second un dossier pour faire nos tests de restauration.

borg init

borg init va initialiser un repository pour Borg où seront stockées les sauvegardes. Il est fortement recommandé de stocker ce dossier/repository à plusieurs endroits (sur un disque dur externe, dans le cloud, à l’extérieur de votre domicile par exemple). Pour rappel la règle des 3-2-1 de la sauvegarde.

La première commande à lancer est borg init /home/babar/borg_backup signifiant la même chose que borg init --encryption=repokey /home/babar/borg_backup. Les choix proposés pour le chiffrement du repository sont --encryption {none,keyfile,repokey}, le choix par défaut étant repokey, none signifiant pas de chiffrement.

--encryption repokey correspond au mode mot de passe uniquement. La clé est stockée dans le repository (le fichier /home/babar/borg_backup/config). Si un attaquant/vilain récupère votre repository, il a la clé mais pas le mot de passe, il ne peut pas déchiffrer les sauvegardes.

--encryption keyfile correspond au mode mot de passe et clé. La clé est stockée dans votre home (dans /home/babar/.config/borg/keys). Si un attaquant/vilain récupère votre repository, il n’a ni la clé ni le mot de passe, il ne peut pas déchiffrer les sauvegardes.

Il est vital de sauvegarder le fichier /home/babar/borg_backup/config dans le mode repokey et le dossier /home/babar/.config/borg/keys dans le mode keyfile car si vous les perdez vous ne pourrez pas déchiffrer vos sauvegardes.

borg create et borg prune

borg create est la commande la plus importante car c’est elle qui effectue la sauvegarde. Évidemment la première sauvegarde est la plus longue.

-v : verbose
--stats : Montrer les statistiques de la sauvegarde créée
/home/babar/borg_backup : Notre repository
{hostname}_{now:%d.%m.%Y} : Mon serveur s’appelant Jessie, ça donnera Jessie_20.08.2016. Il s’agit du nom de la sauvegarde que nous allons créer. On aurait tout aussi bien pu écrire directement Sauvegarde_20.08. Voir la documentation à propos de {hostname} et {now}
/home/babar/syncthing /etc /var/www : Nous sauvegardons les dossiers /home/babar/syncthing, /etc et /var/www

borg prune va s’occuper de ce qu’on appelle la rotation c’est-à-dire de respecter les règles de conservation/suppression de nos sauvegardes. J’ai choisi une règle un peu compliquée à comprendre (je m’en excuse) mais c’est pour mieux illustrer les possibilités offertes.

--keep-within=10d : Conserver toutes les sauvegardes effectuées durant le temps indiqué (ici 10 jours)
--keep-weekly=4 : Nombre de sauvegardes hebdomadaires à conserver
--keep-monthly=-1 : Nombre de sauvegardes mensuelles à conserver. Vous remarquerez le -, spécifier un nombre négatif de sauvegardes signifie qu’on conserve une sauvegarde indéfiniment ici la mensuelle
/home/babar/borg_backup : Notre repository

borg list et borg delete

borg list permet de lister le contenu d’un repository ou d’une sauvegarde.

borg delete permet de supprimer une sauvegarde ou un repository entier.

borg extract et borg mount

borg extract permet d’extraire le contenu d’une sauvegarde.

borg mount permet de monter une sauvegarde comme un système de fichier FUSE.

Quelques détails supplémentaires

Je l’ai mis en place sur mon server@home et en test sur 3 serveurs au boulot, je ferai un retour dans quelques semaines/mois. La société SysNove a fait un article dessus pour expliquer comment ils s’en servent.

Je n’ai pas parlé de compression ni de sauvegarde distante afin de rester accessible. Le Quick Start vous apportera les réponses nécessaires.

Borg utilise un cache pour faire son travail (/home/babar/.cache/borg) dont la taille grandit rapidement. Voir la FAQ.

Concernant les sauvegardes automatiques, on utilisera export BORG_PASSPHRASE='monjolimotdepasse'. On peut également choisir le mode keyfile et renseigner un mot de passe vide. Voici le script de sauvegarde borg_backup.sh que j’utilise actuellement. J’ai créé une tâche cron pour le lancer chaque jour.

Borg amène tous les raffinements qu’on peut désirer pour ses sauvegardes : rotation, chiffrement, déduplication, compression, clarté et simplicité.

Borg c’est de la balle.

Déjà 14 avis pertinents dans BorgBackup, borg pour les intimes

À noter également:
– il existe le projet Borgmatic, qui permet à travers une configuration simplissime d’automatiser ses sauvegardes.
– le plus important: Borg permet de faire des sauvegardes à la fois incrémentales, dédupliquées _et_ chiffrées côté client, il n’est donc pas nécessaire d’avoir confiance dans le stockage distant. À ma connaissance, c’est le seul (en tout cas à ce niveau de facilité d’utilisation?).
    Salute,

    De la chance. J’avais entendu du bien de Attic, j’avais déjà entendu parlé de Borg, j’ai vu l’article de Sysnove, A1 était aussi branché bref. En tout cas c’est de la bonne.

    Tcho !

J’utilise également Borg pour mes sauvegardes de différents partages réseau au boulot. J’ai initié un disque en ISCSI pour le stockage sur un NAS de backup. J’utilise la compression lz4 avec un script en cron qui tourne 2 fois par jour. C’est une tuerie. J’utilisais auparavant backuppc mais j’avais de gros soucis de stabilité réseau et de place. Réglés avec Borg, le lz4 est un faible taux de compression mais j’arrive à gagner quand même entre 30 et 40% d’espace disponible!
    Yo,

    Tu as testé, tu es sûr ? La doc ne dit pas ça :
    # Extract the « src » directory
    $ borg extract /path/to/repo::my-files home/USERNAME/src
    Note: currently, extract always writes into the current working directory (”.”)

    Tcho !

      Yep, j’ai testé. Comme la doc dit :

      This command extracts the contents of an archive. By default the entire archive is extracted but a subset of files and directories can be selected by passing a list of PATHs as arguments. The file selection can further be restricted by using the –exclude option.

      J’en ai conclu qu’on pouvait jouer avec les fichiers. Du coup, j’ai fait

      borg extract [user]@[serveur]:[repository]::[archive] home/USERNAME/chemin/vers/fichier et dans le répertoire où j’ai lancé la commande, j’ai trouvé un home/USERNAME/chemin/vers/fichier. C’est pas exactement super pratique, mais ça permet de restaurer un seul fichier.

      Par contre, j’aimerais bien faire en sorte que le scritp d’automatisation puisse logger la sortie final (stats) dans un fichier, pour en garder une trace. Et j’ai pas encore bien pu comprendre comment fonctionne borg check, je veux dire ce que ça fait.

        En fait on dit la même chose… du coup je ne comprends pas ton commentaire précédent ? Il faut vraiment que tu expliques où tu veux en venir lol.

        Tcho !

          Alors peut-être qu’on dit la même chose, je ne sais pas :D

          C’est simplement qu’on peut extraire un seul fichier de l’archive avec borg extract, et pas seulement toute l’archive ou un dossier, et il me semblait que ce n’était pas indiqué dans le billet. Reste que c’est certainement plus simple d’utiliser borg mount… :)

La discussion est malheureusement close.