BorgBackup est un outil de sauvegarde incrémentielle en ligne de commande écrit en Python. BorgBackup supporte la dé-duplication : les fichiers sauvegardés sont découpés en tronçons et seuls les tronçons modifiés depuis la dernière sauvegarde seront sauvegardés. BorgBackup gère différents types de compressions ainsi que le chiffrement en AES 256-bit
Fonctionalités
Optimisation de l’espace disque
- Dé-duplication : chaque fichier est divisé en morceaux, seuls ceux n’ayant jamais été sauvegardés sont ajoutés
- Basé sur l’empreinte : pas de doublon, les morceaux dans un dépôt sont référencés peu importe leur provenance
Vitesse
- Code critique implémenté en C/Cython
- Mise en cache locale des fichiers/données d’index des morceaux
- Détection rapide des fichiers non modifiés.
Chiffrement des données
- Chiffrement AES 256-bit, Chiffrement côté client, Intégrité et authenticité vérifiées via HMAC-SHA256
Compression
- LZ4 (vitesse rapide, compression faible)
- zlib (vitesse moyenne, compression aussi)
- lzma (vitesse lente, compression élevée).
Sauvegardes hors site
- Borg peut stocker des données sur un hôte distant accessible via SSH
Sauvegardes montables comme un simple système de fichier
- Les backups de sauvegarde peuvent être montées comme des systèmes de fichiers dans l’espace utilisateur, la restauration se faisant alors par une simple copie de fichier.
Prés requis
Ces deux serveurs doivent avoir échangé au préalable des clés SSH pour permettre une authentification sans mdp.
Guide : http://n0tes.fr/2018/03/03/ssh-sans-mot-de-passe/
Il est nécessaire d’installer Borg sur tous les serveurs : celui qui va effectuer la sauvegarde et celui qui va la réceptionner (le serveur de backup)
Installation
Il suffit juste d’installer les paquets borgbackup et borgbackup-doc, ceux-ci installant automatiquement les dépendances nécessaires sur les deux serveurs : celui qui va effectuer la sauvegarde et celui qui va la réceptionner (le serveur de backup)
# apt install borgbackup borgbackup-doc |
Configuration
Il est obligatoire de créer un répertoire de dépôt où seront stocké les backups. Une fois fait il faudra indiquer au serveur client à quel endroit il se trouve pour effectuer la sauvegarde.
Initialisation du dépôt
Par défaut, les dépôts sont chiffrés avec une passphrase qui sera demandée lors de sa création.
Dans le cas d’une sauvegarde sur un même serveur :
# borg init /path/to/repo |
Dans le cas d’une sauvegarde sur un serveur distant :
# borg init user@host:/path/to/repo |
Si vous devez préciser le port :
# borg init ssh://user@host:port/path/to/repo |
Si c’est votre première connexion sur la machine vous aurez cette question, à laquelle il faut répondre yes
# borg init [email protected]:/path/to/BACKUP_SERVEUR |
Il vous sera demandé ensuite une passphrase (il se peut que a connexion se coupe, auquel cas relancer la commande)
Enter new passphrase: |
Garder précieusement la passphrase, c’est elle qui chiffre et déchiffre les données à sauvegarder.
⇒ Si vous la perdez vos sauvegardes seront inexploitables.
Initialisation du dépôt sans chiffrement
Si vous préférez sauvegarder sans chiffrement il faut préciser l’option --encryption=none
# borg init --encryption=none /path/to/repo |
# borg init --encryption=none user@host:/path/to/repo |
Créer une sauvegarde
Pour organiser les sauvegardes, il est utile de leur donner des noms pertinents et semi-automatique en utilisant les variables et commandes systèmes. Ils existe plusieurs solutions comme l’utilisation du nom d’hôte suivit d’un horodatage.
Pour créer un backups de vos répertoires /home
, /etc
, et /var/www
:
# borg create -v --progress user@<AdresseIP>:/path/to/BACKUP_SERVEUR::{hostname}-`date +'%Y.%m.%d-%H:%M:%S'` /home /etc /var/www |
Si vos backup se lance une fois par jour, pourquoi ne pas utilser le format date +'%Y.%m.%d
# borg create -v --progress user@<AdresseIP>:/path/to/BACKUP_SERVEUR::{hostname}-`date +'%Y.%m.%d'` /home |
Si vos backups ne se lancent qu’une fois par semaine, l’utilisation du numéro de la semaine avec la variable +%V
sera pratique.
# borg create -v --progress user@<AdresseIP>:/path/to/BACKUP_SERVEUR::{hostname}-`date +'+%V'` /home |
Lister les backups
Tout lister
Pour lister tous les backups présents dans le dépôt, il suffit d’utiliser le paramètre list
suivis du chemin du dépôt.
# borg list /path/to/BACKUP_SERVEUR/ |
Fitrer les résultats
Pour filtrer le résultat il est possible d’utiliser le paramètre --prefix
suivit d’une chaîne de caractères. Il s’agit d’un préfixe, donc la recherche se fait au début des noms.
# borg list --prefix Server42 /path/to/BACKUP_SERVEUR/ |
Lister le contenu d’un backup particulier
Si vous précisez le nom du backups comme Backup_home
vous aurez tout le contenu de /home
listé
# borg list --prefix Server42 /path/to/BACKUP_SERVEUR/::BackupName |
Accéder directement aux backups
Pour directement accéder aux fichiers sauvegardés, il faudra créer un répertoire et utiliser mount
# mkdir backups |
Une fois terminé, vous pouvez démonter le répertoire :
# borg umount backups |
Vérifier l’intégrité des backups:
Vérifier l’intégrité de tous les backups présents :
# borg check -v --progress /path/to/BACKUP_SERVEUR |
Vérifier l’intégrité d’un backup en particulier :
# borg check -v --progress /path/to/BACKUP_SERVEUR/::NomDuBackup |
Restorer des backups
La restauration se fait avec l’option extract
, l’idéal est de se placer dans un nouveau répertoire pour récupérer la sauvegarde.
Du serveur de backup vers la machine à restaurer :
# borg extract /path/to/repo::NomduBackup |
Depuis le client qui veut récupérer un backup distant :
# borg extract user@<AdresseIP>:/path/to/repo::NomduBackup |
Pour récupérer un dossier ou un fichier en particulier, veuillez noter que le chemin du fichier à récupérer commence sans /
# borg extract user@<AdresseIP>:/path/to/repo::NomduBackup home/USERNAME/dossier |
Supression des backups
Purger les anciens backups
Exemple, on garde :
- 1 backup par jour sur les 7 derniers jours
- 1 backup par semaine sur les 4 dernières semaines
- 1 backup par mois sur les 6 derniers mois
# borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /path/to/repo |
Si vous avez préfixé vos backups, vous pouvez également utiliser --prefix=NomBackup
Supprimer un backup en particulier /!\
Sur la machine locale :
# borg delete /path/to/repo::NomDuBackup |
Sur un serveur distant :
# borg delete user@<AdresseIP>:/path/to/BACKUP_SERVEUR::NomDuBackup |
Supprimer le dépot d’archive complet /!\
Pour entièrement supprimer les dépôts d’archive + les backups, irréversible, une confirmation sera demandé.
Sur la machine locale :
# borg delete /path/to/BACKUP_SERVEUR |
Sur un serveur distant :
# borg delete user@<AdresseIP>:/path/to/BACKUP_SERVEUR |
Automatisation des sauvegardes
Création d’un script bash qui se lancera tous les jours à midi à l’aide de cron pour effectuer les backups. Il est nécessaire au préalable de faire un échange de clés RSA pour que le serveur puisse se connecter directement sur le serveur de backup (https://n0tes.fr/2018/03/03/ssh-sans-mot-de-passe/).
Créer un script en .sh, pensez à le rendre exécutable.
#!/bin/bash |
Ouvrir la crontab avec crontab -e
et y mettre, pour avoir un backup tous les jours à 12h00 :
#------------------------------------------------------# |
Documentation
https://doc.ubuntu-fr.org/borgbackup
https://borgbackup.readthedocs.io/en/stable/usage/general.html
https://sebsauvage.net/wiki/doku.php?id=borgbackup