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.

aptitude install python3 python3-dev python3-pip python-virtualenv libssl-dev openssl libacl1-dev libacl1 liblz4-dev liblz4-1 build-essential # Les prérequis nécessaires pour installer Borg
aptitude install libfuse-dev fuse pkg-config # Optionnel : Pour le support de FUSE permettant l'utilisation de la commande borg mount
pip3 install borgbackup ou pip3 install borgbackup[fuse] # C'est la seconde commande que j'utilise, elle installe borg et le support de FUSE permettant l'utilisation de la commande borg mount

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.

borg create -v --stats /home/babar/borg_backup::{hostname}_{now:%d.%m.%Y} /home/babar/syncthing /etc /var/www

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

borg prune -v --keep-within=10d --keep-weekly=4 --keep-monthly=-1 /home/babar/borg_backup

--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 list /home/babar/borg_backup # Va lister toutes les sauvegardes du repository
borg list /home/babar/borg_backup::Jessie_17.08.2016 # Va lister tous les fichiers de la sauvegarde du 17/08
borg list /home/babar/borg_backup::Jessie_19.08.2016 | grep 2016-08-18 # On liste tous les fichiers de la sauvegarde du 19/08 puis on affiche les lignes avec le motif 2016-08-18. Va nous permettre de voir facilement les fichiers ajoutés/modifiés entre le 18/08 et le 19/08

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

borg delete /home/babar/borg_backup # Va supprimer le repository et donc toutes les sauvegardes contenues dedans
borg delete /home/babar/borg_backup::Jessie_19.08.2016 # Va supprimer la sauvegarde du 19/08

borg extract et borg mount

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

borg extract /home/babar/borg_backup::Jessie_17.08.2016 # Va extraire tous les fichiers de la sauvegarde du 17/08 dans le dossier courant

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

borg mount /home/babar/borg_backup::Jessie_17.08.2016 /home/babar/tests # Va monter en lecture seule tous les fichiers de la sauvegarde du 17/08 dans le dossier /home/babar/tests, ce dossier doit être vide
fusermount -u /home/babar/tests # Va démonter /home/babar/tests, je le fais souvent précéder de la commande cd pour éviter le message Device or resource busy

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.

#!/bin/bash

export BORG_PASSPHRASE='monjolimotdepasse'
REPOSITORY='/home/babar/borg_backup'

/usr/local/bin/borg create -v --stats $REPOSITORY::{hostname}_{now:%d.%m.%Y} /home/babar/syncthing /etc /var/www
/usr/local/bin/borg prune -v --keep-within=10d --keep-weekly=4 --keep-monthly=-1 $REPOSITORY

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.

Vus : 729
Publié par blog-libre : 133