Outils pour utilisateurs

Outils du site


borg

Borg Backup est un programme de sauvegarde incrémentielle en ligne de commande. Il permet de fournir un moyen efficace et sûr de sauvegarder des données. Cette page aborde uniquement les sauvegardes distantes via SSH.

Installation

Sous debian Borg s'installe avec Apt.

sudo apt install borgbackup

Initialiser le dépôt distant chiffré

Vérifier qu'une liaison SSH, avec authentification par clefs, fonctionne entre la machine à sauvegarder et celle qui héberge le dépôt

L'initialisation se fait uniquement la première fois et depuis la machine à sauvegarder. Pour des questions pratiques je stocke la ckef de déchiffrage directement dans le dépôt, cela me permet d'être sûr de la retrouver depuis n'importe quel machine où je souhaite faire une restauration.

borg init -e repokey ssh://draconis@192.168.21.105:22/backup/colmaris
  • Init : pour initialiser le dépôt
  • -e : signifie que le dépôt sera chiffré
  • Repokey : indique que la clef de chiffrage sera stockée au sein même du dépôt.

Création de la sauvegarde

Pour chacune de mes sauvegardes j'utilise ce script bash. Source

Faire un topo sur la rétention des sauvegardes. FIXME à faire

#!/bin/bash
 
#!/bin/bash
 
# Adresse du dépôt
export BORG_REPO='ssh://borg@backup1.flozz.lan/home/borg/my-machine1-backup'
 
# Mot de passe du dépôt
export BORG_PASSPHRASE='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
 
# Chemin vers l'exécutable de Borg (pratique en cas d'installation
# non-standard ou si le script s'exécute dans un contexte ou la variable
# $PATH n'est pas correctement définie)
BORG=/usr/bin/borg
 
# Préparation ================================================================
 
# Ici on peut exécuter des commandes pour préparer la sauvegarde, comme par
# exemple faire des dumps des bases de données...
#
# Attention à bien gérer les erreurs !
 
# Sauvegarde =================================================================
 
$BORG create \
    --verbose \
    --list \
    --stats \
    --show-rc \
    --compression zstd \
    '::auto-{hostname}-{now}' \
    /root \
    /home \
    /etc \
    /var/www
 
# Dans la commande "borg create" ci-dessus, on ne précise que le nom de
# l'archive à créer et pas le chemin du dépôt, car celui-ci est déjà défini
# dans la variable d'environnement $BORG_REPO
 
# Je tiens également à attirer votre attention sur le nom de cette archive
# que je préfixe par "auto-". Cela me permet de distinguer les sauvegardes
# automatique d'éventuelles sauvegardes manuelles. On va voir à quoi cela
# sert un peu plus tard... :)
 
# On récupère le code de retour de la commande précédente.
# 0 = OK, 1 = WARNING, 2 = ERROR
BACKUP_STATUS=$?
 
# En cas d'erreur on rapporte l'erreur et on quitte...
if [[ $BACKUP_STATUS != 0 && $BACKUP_STATUS != 1 ]] ; then
    echo "Backup failed!"
    exit 1
fi
 
# NOTE : ici je vérifie explicitement que Borg ne s'est pas terminé avec
# son code de retour OK ou WARNING et pas simplement qu'il s'est terminé par
# ERROR. Il est en effet possible que d'autres codes d'erreurs soient
# retournés, comme par exemple 127, retourné par Bash s'il ne trouve pas la
# commande, ou 137 si le processus de Borg a été tué (sigkill).
 
# Nettoyage ==================================================================
 
# On commence par élaguer le dépôt...
 
$BORG prune \
    --verbose \
    --list \
    --stats \
    --show-rc \
    --glob-archives 'auto-{hostname}-' \
    --keep-daily 7 \
    --keep-weekly 4 \
    --keep-monthly 12 \
    --keep-yearly 3
 
# Dans la commande "borg prune" ci-dessus, je lui demande de considérer
# uniquement les sauvegardes dont le nom commence par "auto-machine1-".
# Cela me permet de faire des sauvegardes manuelles (par exemple en cas de
# grosse mise à jour des sites hébergés) sans que ces sauvegardes manuelles
# ne soient supprimées automatiquement.
 
PRUNE_STATUS=$?
 
# En cas d'erreur on rapporte l'erreur et on quitte...
if [[ $PRUNE_STATUS != 0 && $PRUNE_STATUS != 1 ]] ; then
    echo "Prune failed!"
    exit 1
fi
 
# ... puis on libère l'espace disque
 
$BORG compact \
    --verbose \
    --show-rc
 
COMPACT_STATUS=$?
 
# En cas d'erreur on rapporte l'erreur et on quitte...
if [[ $COMPACT_STATUS != 0 && $COMPACT_STATUS != 1 ]] ; then
    echo "Compaction failed!"
    exit 1
fi
 
# ATTENTION : Si l'option --append-only est utilisée sur le serveur, les
# anciennes archives ne seront pas effectivement supprimées (seulement marquées
# comme tel), et l'espace disque ne sera pas récupéré. Il faudra exécuter ces
# commande sans le mode append only de temps en temps.
 
# Finition ===============================================================
 
# Ici on peut exécuter des commandes pour nettoyer après la sauvegarde. On peut
# par exemple supprimer les dumps de base de données faits avant la sauvegarde.
#
# Attention à bien gérer les erreurs !
 
# Reporting ==============================================================
 
echo "Backup finished"
exit 0

Sécurisation du script. Aucun accès a part pour le root.

chown root:root /opt/my-backup.sh
chmod 700 /opt/my-backup.sh

Automatisation

Afin de réaliser cette sauvegarde régulièrement, je programme une tâche CRON avec la commande crontab -e. Je lance le script tous les jours à 23h30.

30 23 * * * sh /opt/backup-scripts/backup >/dev/null

Restaurer une sauvegarde

Chez borg on ne parle pas de restauration à proprement parler, mais plutôt d'une extraction de notre sauvegarde.

 borg extract ssh://draconis@192.168.21.105:22/backup/colmaris::version-a-extraire /point/de/restauration

On peut aussi restaurer uniquement certains éléments.

 borg extract ssh://draconis@192.168.21.105:22/backup/colmaris::version-a-extraire {élément à restaurer} /point/de/restauration

Commandes utiles

Lister les sauvegardes.

 borg list ssh://draconis@192.168.21.105:22/backup/colmaris

Lister le contenu d'un sauvegarde FIXME

 borg list ssh://draconis@192.168.21.105:22/backup/colmaris::version-sauvegarde

Obtenir des informations sur une sauvegarde

 borg info ssh://draconis@192.168.21.105:22/backup/colmaris::version-sauvegarde
borg.txt · Dernière modification : de colmaris