Dans un environnement de production, la stratégie de sauvegarde est aussi critique que la haute disponibilité elle-même. Pourtant, beaucoup d’administrateurs se retrouvent avec des outils de backup vieillis — tar + cron, rsync naïf, scripts maison — qui ne garantissent ni l’intégrité des données, ni leur confidentialité, ni l’optimisation de l’espace disque. Restic s’impose en 2025-2026 comme la référence moderne pour répondre à ces trois exigences simultanément.
Développé en Go par Alexander Neumann, Restic offre nativement le chiffrement bout-en-bout (AES-256-CTR + Poly1305-AES), la déduplication par contenu (Rabin fingerprinting sur des blocs de taille variable) et la vérification d’intégrité cryptographique de chaque snapshot. Résultat : 60 à 80 % d’économie d’espace en moyenne sur des workloads serveur typiques, sans jamais stocker un seul octet en clair côté dépôt. Même si le serveur de destination est compromis, vos données restent illisibles.
Dans cet article, nous allons installer et configurer Restic sur Debian 12 (Bookworm) et Ubuntu 24.04 LTS, créer des dépôts sur différents backends (local, SFTP, compatible S3/MinIO), mettre en place une politique de rétention intelligente, puis automatiser l’ensemble via des unités systemd pour une sauvegarde quotidienne sans intervention manuelle.
Installation de Restic
La version disponible dans les dépôts officiels Debian/Ubuntu est parfois en retard sur les releases amont. Restic 0.18.1 est la dernière version stable (septembre 2025). Deux méthodes sont disponibles.
Via apt (méthode simple)
sudo apt update && sudo apt install -y restic
restic version
Via le binaire officiel (méthode recommandée)
Cette méthode garantit d’utiliser la version la plus récente et permet la mise à jour en place avec restic self-update :
RESTIC_VERSION=0.18.1
wget -O /tmp/restic.bz2
"https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_amd64.bz2"
bunzip2 /tmp/restic.bz2
sudo install -m 755 /tmp/restic /usr/local/bin/restic
restic version
Pour mettre à jour ultérieurement :
sudo restic self-update
Initialiser un dépôt (repository)
Un repository Restic est l’endroit où seront stockés tous vos snapshots. Restic chiffre intégralement les données avant de les envoyer : le backend ne voit jamais rien en clair. Commencez par créer un fichier de mot de passe :
sudo mkdir -p /etc/restic
echo "VotreMotDePasseTrèsSécurisé!" | sudo tee /etc/restic/password.txt
sudo chmod 600 /etc/restic/password.txt
Dépôt local
restic init
--repo /srv/restic-repo
--password-file /etc/restic/password.txt
Dépôt SFTP (serveur distant)
Assurez-vous que l’authentification par clé SSH est configurée (voir article sur le durcissement SSH). Ajoutez dans ~/.ssh/config pour éviter les déconnexions :
Host backup-server
ServerAliveInterval 60
ServerAliveCountMax 240
restic init
--repo sftp:backup-user@backup-server:/srv/restic-repo
--password-file /etc/restic/password.txt
Dépôt compatible S3 / MinIO
Restic supporte tout service S3-compatible : AWS S3, MinIO (auto-hébergé), Wasabi, Backblaze B2…
export AWS_ACCESS_KEY_ID="votre-access-key"
export AWS_SECRET_ACCESS_KEY="votre-secret-key"
restic init
--repo s3:https://minio.example.com/restic-bucket
--password-file /etc/restic/password.txt
Pour centraliser la configuration, créez un fichier d’environnement :
cat > /etc/restic/env << 'EOF'
RESTIC_REPOSITORY=/srv/restic-repo
RESTIC_PASSWORD_FILE=/etc/restic/password.txt
EOF
chmod 600 /etc/restic/env
En sourçant ce fichier (source /etc/restic/env), vous n’aurez plus à spécifier --repo et --password-file à chaque commande.
Créer des sauvegardes
Premier backup
source /etc/restic/env
restic backup /etc /home /var/www
Restic affiche des statistiques détaillées à chaque exécution : données nouvelles ajoutées, données déjà présentes (déduplication), durée et vitesse de transfert.
Exclure les répertoires inutiles
Un fichier d’exclusions dédié est plus maintenable qu’une longue liste d’options :
cat > /etc/restic/excludes.txt << 'EOF'
/home/*/.cache
/home/*/.local/share/Trash
/var/cache
/var/tmp
/tmp
*.log.gz
*.sock
EOF
source /etc/restic/env
restic backup
--exclude-file /etc/restic/excludes.txt
--one-file-system
/etc /home /var/www
L’option --one-file-system empêche Restic de traverser les points de montage, évitant d’inclure accidentellement /proc, /sys ou des volumes NFS.
Taguer les snapshots
Les tags permettent d’identifier le contexte de chaque snapshot (production, pré-migration, test…) :
restic backup --tag production --tag web /var/www
Gérer et vérifier les snapshots
Lister les snapshots
source /etc/restic/env
restic snapshots
Vérifier l’intégrité du dépôt
À exécuter régulièrement pour détecter toute corruption silencieuse :
restic check
Pour une vérification complète des données (plus longue) :
restic check --read-data
Restaurer des données
Restaurer le dernier snapshot dans un répertoire temporaire
source /etc/restic/env
restic restore latest --target /mnt/restore
Restaurer un snapshot spécifique
restic snapshots # identifier l'ID du snapshot
restic restore abc123ef --target /mnt/restore
Restaurer uniquement un sous-répertoire
restic restore latest
--include /etc/nginx
--target /mnt/restore
Monter le dépôt en lecture seule (FUSE)
Restic peut monter le dépôt comme un système de fichiers pour parcourir les snapshots interactivement :
sudo apt install -y fuse
mkdir /mnt/restic-mount
restic mount /mnt/restic-mount
# Les snapshots sont accessibles sous /mnt/restic-mount/snapshots/
# Ctrl+C pour démonter
Politique de rétention
Sans rotation, le dépôt croît indéfiniment. La commande forget applique une politique de rétention, tandis que prune libère l’espace physique des données orphelines.
source /etc/restic/env
# Simuler d'abord avec --dry-run
restic forget
--keep-daily 7
--keep-weekly 4
--keep-monthly 6
--keep-yearly 2
--prune
--dry-run
# Appliquer réellement
restic forget
--keep-daily 7
--keep-weekly 4
--keep-monthly 6
--keep-yearly 2
--prune
Cette politique conserve : 1 snapshot par jour (7 jours), 1 par semaine (4 semaines), 1 par mois (6 mois), 1 par an (2 ans). Adaptez ces valeurs à votre RPO.
Automatisation avec systemd
Les timers systemd sont plus robustes que cron : ils rattrapent les exécutions manquées (serveur éteint) grâce à Persistent=true.
Service systemd
cat > /etc/systemd/system/restic-backup.service << 'EOF'
[Unit]
Description=Sauvegarde Restic quotidienne
After=network.target
[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
ExecStart=/usr/local/bin/restic backup
--exclude-file /etc/restic/excludes.txt
--one-file-system
/etc /home /var/www
ExecStartPost=/usr/local/bin/restic forget
--keep-daily 7
--keep-weekly 4
--keep-monthly 6
--prune
StandardOutput=journal
StandardError=journal
EOF
Timer systemd
cat > /etc/systemd/system/restic-backup.timer << 'EOF'
[Unit]
Description=Déclencheur quotidien — Sauvegarde Restic
[Timer]
OnCalendar=daily
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
La directive RandomizedDelaySec=1h étale aléatoirement le déclenchement pour éviter la saturation du backend si plusieurs serveurs sauvegardent vers le même dépôt.
Surveiller les sauvegardes
# Voir les dernières exécutions
journalctl -u restic-backup.service --since "7 days ago"
# Vérifier l'état du timer
systemctl status restic-backup.timer
À lire également
- Btrfs sur Linux — snapshots, sous-volumes et compression en pratique
- ZFS sur Linux : snapshots, clones et RAID-Z en pratique
- Scripting Bash avancé — pièges, bonnes pratiques et optimisation
- Ansible : automatiser la gestion de serveurs Linux avec des playbooks