Backup avec BorgBackup

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
The authenticity of host '44.88.42.84 (44.88.42.84)' can't be established.
ECDSA key fingerprint is SHA256:z42yu42uwLKuQN42ku5426KLmuG42KYyu5426mi8+ZE.
Are you sure you want to continue connecting (yes/no)? yes

Il vous sera demandé ensuite une passphrase (il se peut que a connexion se coupe, auquel cas relancer la commande)

Enter new passphrase: 
Enter same passphrase again:
Do you want your passphrase to be displayed for verification? [yN]: y
Your passphrase (between double-quotes): "Dovahkiin Dovahkiin naalok zinlos vahriin" 🐉⚔️
Make sure the passphrase displayed above is exactly what you wanted.

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
# borg mount /repo 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
# borg extract user@<AdresseIP>:/path/to/repo::NomduBackup home/USERNAME/dossier/fichier.txt

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
borg create aline@<ip>:/home/aline/BACKUP_SERVEUR_<ip>::{hostname}-HOME-`date +'%Y.%m.%d'` /home
borg create aline@<ip>:/home/aline/BACKUP_SERVEUR_<ip>::{hostname}-ETC-`date +'%Y.%m.%d'` /etc
borg create aline@<ip>:/home/aline/BACKUP_SERVEUR_<ip>::{hostname}-VAR-`date +'%Y.%m.%d'` /var
borg create aline@<ip>:/home/aline/BACKUP_SERVEUR_<ip>::{hostname}-ROOT-`date +'%Y.%m.%d'` /root

Ouvrir la crontab avec crontab -e et y mettre, pour avoir un backup tous les jours à 12h00 :

#------------------------------------------------------#
# Backup serveur #
#------------------------------------------------------#
00 12 * * * scripts/backups.sh

Documentation

https://doc.ubuntu-fr.org/borgbackup
https://borgbackup.readthedocs.io/en/stable/usage/general.html
https://sebsauvage.net/wiki/doku.php?id=borgbackup

> Partager <