TL;DR — Résumé Rapide

Borgmatic automatise les sauvegardes chiffrées BorgBackup sous Linux. Configurez YAML, planifiez avec systemd timers et appliquez la stratégie 3-2-1.

Borgmatic transforme la CLI puissante mais verbeuse de BorgBackup en une configuration YAML déclarative — un seul fichier gère des sauvegardes chiffrées, dédupliquées et compressées avec des politiques de rétention, des vérifications de cohérence, des hooks de base de données et des notifications de surveillance. Ce guide couvre chaque étape de l’installation jusqu’à une stratégie 3-2-1 prête pour la production avec dumps de bases de données et intégration healthchecks.

Prérequis

  • Serveur Linux (Ubuntu 20.04+, Debian 11+, RHEL 8+ ou similaire)
  • Python 3.8+ (pour pip install) ou accès à apt/dnf/pacman
  • Accès SSH à une destination de sauvegarde distante (pour les sauvegardes hors site)
  • Accès root ou sudo
  • Familiarité de base avec YAML et systemd

Fondamentaux de BorgBackup

BorgBackup est un programme de sauvegarde avec déduplication écrit en Python et C. Avant de comprendre Borgmatic, il est essentiel de comprendre ce que Borg offre:

  • Fragmentation définie par le contenu — Borg divise les fichiers en blocs de taille variable basés sur le hachage du contenu, pas sur des blocs fixes. Un fichier volumineux légèrement modifié se déduplique efficacement car la plupart des blocs sont identiques.
  • Déduplication — Chaque bloc unique est stocké exactement une fois dans toutes les archives du dépôt. Un serveur de 100 Go avec des données majoritairement inchangées ne nécessite que des mégaoctets pour les sauvegardes suivantes.
  • Chiffrement — Le mode repokey-blake2 stocke une clé chiffrée avec AES-256-CTR dans le dépôt, protégée par votre phrase de passe et authentifiée avec HMAC-SHA256. Un serveur distant totalement compromis n’expose aucune donnée en clair.
  • Compressionlz4 (le plus rapide, CPU minimal), zstd (équilibré, recommandé) ou zlib/lzma (taux maximal). zstd,3 est la valeur par défaut moderne.
  • Mode append-only — Les dépôts peuvent être verrouillés pour qu’un client compromis puisse créer de nouvelles archives mais ne puisse pas supprimer ni modifier les existantes — les ransomwares ne peuvent pas détruire l’historique des sauvegardes.

Étape 1: Installer BorgBackup et Borgmatic

Via pip (recommandé — toujours la dernière version):

pip install --upgrade borgmatic

Via pipx (environnement isolé):

pipx install borgmatic

Via apt (Ubuntu/Debian):

apt install borgmatic

Via Docker:

docker run --rm \
  -v /etc/borgmatic:/etc/borgmatic \
  -v /var/backup:/backup \
  ghcr.io/borgmatic-collective/borgmatic

Vérifier l’installation:

borgmatic --version
borg --version

Étape 2: Configurer Borgmatic

Générer un template commenté:

mkdir -p /etc/borgmatic
borgmatic config generate --destination /etc/borgmatic/config.yaml

Configuration minimale de production pour un serveur web avec dumps de bases de données et surveillance:

source_directories:
  - /etc
  - /var/www
  - /home

repositories:
  - path: /var/backup/local-borg
    label: local
  - path: ssh://backup@192.168.1.100/~/backups/serveur
    label: distant-lan
  - path: ssh://backup@externe.exemple.com:22/~/backups/serveur
    label: distant-externe

storage:
  encryption_passphrase: "votre-phrase-de-passe-longue-et-aleatoire"
  compression: "zstd,3"
  archive_name_format: "{hostname}-{now:%Y-%m-%dT%H:%M:%S}"
  checkpoint_interval: 1800

retention:
  keep_daily: 7
  keep_weekly: 4
  keep_monthly: 6
  keep_yearly: 1

postgresql_databases:
  - name: mon_app_production
    username: postgres
    format: custom

mysql_databases:
  - name: wordpress
    username: root
    options: "--single-transaction"

hooks:
  before_backup:
    - echo "Démarrage sauvegarde le $(date)"
  after_backup:
    - curl -fsS https://hc-ping.com/votre-uuid > /dev/null
  on_error:
    - echo "Sauvegarde ECHOUEE le $(date)" | mail -s "Erreur Sauvegarde" admin@exemple.com

Champs de configuration clés:

ChampRôleValeur recommandée
encryption_passphraseProtège la clé du dépôt40+ caractères aléatoires
compressionAlgorithme + niveauzstd,3
keep_dailyArchives journalières conservées7
keep_weeklyArchives hebdomadaires conservées4
keep_monthlyArchives mensuelles conservées6

Étape 3: Initialiser le Dépôt

Initialiser chaque dépôt avant la première sauvegarde:

borgmatic init --encryption repokey-blake2

Pour un dépôt distant en mode append-only (fortement recommandé pour la sécurité hors site):

# Sur le serveur de sauvegarde, modifier ~/.ssh/authorized_keys:
command="borg serve --restrict-to-path /home/backup/backups --append-only",restrict ssh-rsa AAAA... client@serveur

# Puis initialiser normalement depuis le client
borgmatic init --encryption repokey-blake2

Exporter et stocker la clé du dépôt hors ligne — c’est critique:

borg key export /var/backup/local-borg /root/cle-borg-sauvegarde.txt
# Stocker dans un gestionnaire de mots de passe ET sur une clé USB hors site

Étape 4: Exécuter et Planifier les Sauvegardes

Première sauvegarde (verbeux pour vérifier que tout fonctionne):

borgmatic create --verbosity 1 --list --stats

Opérations régulières:

borgmatic          # créer + élaguer + compacter + vérifier (exécution complète)
borgmatic create   # sauvegarde uniquement
borgmatic prune    # appliquer la politique de rétention, supprimer les anciennes archives
borgmatic compact  # récupérer l'espace libéré (Borg 1.2+ requis)
borgmatic check    # vérifier l'intégrité du dépôt et des archives

Voir les archives disponibles:

borgmatic list
borgmatic info --archive latest

Étape 5: Planifier avec le Timer systemd

Borgmatic inclut une unité de service et de timer systemd. Les activer:

systemctl enable --now borgmatic.timer
systemctl status borgmatic.timer

Le timer par défaut s’exécute quotidiennement à une heure aléatoire dans la fenêtre de maintenance. Pour personnaliser le timing, créer un fichier de substitution:

# /etc/systemd/system/borgmatic.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=*-*-* 02:30:00
RandomizedDelaySec=30min
systemctl daemon-reload
systemctl restart borgmatic.timer

Étape 6: Procédures de Restauration

Lister les archives disponibles:

borgmatic list

Restaurer des fichiers ou répertoires spécifiques:

borgmatic extract \
  --archive serveur-2026-03-23T02:30:00 \
  --path /var/www/monapp \
  --destination /tmp/restauration

Restaurer une base de données PostgreSQL:

borgmatic restore --archive latest --database mon_app_production

Monter une archive avec FUSE pour la navigation:

borgmatic mount --archive latest --mount-point /mnt/borg
ls /mnt/borg
borgmatic umount --mount-point /mnt/borg

Comparaison: Borgmatic vs Alternatives

FonctionnalitéBorgmaticResticDuplicatiKopiaTarsnap
MoteurBorgBackupProprePropreProprePropre
ChiffrementAES-256-CTR+HMACAES-256-CTRAES-256AES-256-GCMAES-256-CTR
DéduplicationPar blocsAdressé par contenuPar blocsOuiOui
ConfigurationYAMLFlags CLIGUI/XMLGUI/CLICLI
Hooks BDDNatif (PG, MySQL, SQLite)Scripts externesNonNonNon
Append-onlyOui (serveur SSH)NonNonNonNon
Hooks surveillanceNatif avant/après/erreurExterneExterneExterneNon

Problèmes Courants

ProblèmeSolution
Failed to create/acquire the lockExécution précédente bloquée; exécuter borgmatic borg break-lock /chemin/depot
Repository is not a valid Borg repositoryChemin incorrect ou dépôt non initialisé; exécuter borgmatic init
Passphrase provided is incorrectVérifier que encryption_passphrase dans la config correspond à celle utilisée lors de l’init
Connection closed by remote hostClé SSH absente de authorized_keys ou borg serve non configuré sur le distant
No archives foundPremière sauvegarde pas encore exécutée; exécuter borgmatic create
compact: repository does not support compactionBorg < 1.2 sur le serveur; mettre à jour BorgBackup

Résumé

  • BorgBackup fournit la fragmentation définie par contenu, la déduplication, le chiffrement AES-256-CTR, la compression lz4/zstd/zlib et le mode append-only.
  • Borgmatic enveloppe Borg dans un unique config YAML couvrant create, prune, compact, check, hooks de bases de données et notifications de surveillance.
  • Timer systemd gère la planification avec RandomizedDelaySec pour éviter les pics de charge.
  • Hooks de bases de données (PostgreSQL pg_dump, MySQL mysqldump, SQLite) garantissent des snapshots cohérents sans arrêter les services.
  • Stratégie 3-2-1 — trois copies, deux types de médias, une hors site — implémentée en listant plusieurs dépôts dans un config.
  • Testez toujours les restaurations avant d’en avoir besoin; borgmatic check vérifie l’intégrité mais seul un extract réussi confirme la restaurabilité.

Articles Connexes