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-blake2stocke 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. - Compression —
lz4(le plus rapide, CPU minimal),zstd(équilibré, recommandé) ouzlib/lzma(taux maximal).zstd,3est 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:
| Champ | Rôle | Valeur recommandée |
|---|---|---|
encryption_passphrase | Protège la clé du dépôt | 40+ caractères aléatoires |
compression | Algorithme + niveau | zstd,3 |
keep_daily | Archives journalières conservées | 7 |
keep_weekly | Archives hebdomadaires conservées | 4 |
keep_monthly | Archives mensuelles conservées | 6 |
É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é | Borgmatic | Restic | Duplicati | Kopia | Tarsnap |
|---|---|---|---|---|---|
| Moteur | BorgBackup | Propre | Propre | Propre | Propre |
| Chiffrement | AES-256-CTR+HMAC | AES-256-CTR | AES-256 | AES-256-GCM | AES-256-CTR |
| Déduplication | Par blocs | Adressé par contenu | Par blocs | Oui | Oui |
| Configuration | YAML | Flags CLI | GUI/XML | GUI/CLI | CLI |
| Hooks BDD | Natif (PG, MySQL, SQLite) | Scripts externes | Non | Non | Non |
| Append-only | Oui (serveur SSH) | Non | Non | Non | Non |
| Hooks surveillance | Natif avant/après/erreur | Externe | Externe | Externe | Non |
Problèmes Courants
| Problème | Solution |
|---|---|
Failed to create/acquire the lock | Exécution précédente bloquée; exécuter borgmatic borg break-lock /chemin/depot |
Repository is not a valid Borg repository | Chemin incorrect ou dépôt non initialisé; exécuter borgmatic init |
Passphrase provided is incorrect | Vérifier que encryption_passphrase dans la config correspond à celle utilisée lors de l’init |
Connection closed by remote host | Clé SSH absente de authorized_keys ou borg serve non configuré sur le distant |
No archives found | Première sauvegarde pas encore exécutée; exécuter borgmatic create |
compact: repository does not support compaction | Borg < 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
RandomizedDelaySecpour é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 checkvérifie l’intégrité mais seul un extract réussi confirme la restaurabilité.