Avant de commencer
- Un serveur Linux avec un compte
sudo - Une destination : un NAS joignable en SFTP (SSH), un disque monté, ou un stockage compatible S3
- Avoir lu la règle 3-2-1 pour savoir où placer cette sauvegarde dans votre stratégie
restic est un outil de sauvegarde libre, en un seul binaire, disponible sous Linux, Windows et macOS. Il chiffre tout avant l'envoi, déduplique les données (seuls les blocs modifiés sont envoyés après la première sauvegarde) et garde un historique que vous élaguez selon vos règles.
Nous allons sauvegarder /etc et /home d'un serveur vers un NAS en SFTP, chaque nuit.
1. Installer restic
sudo apt install restic # Debian, Ubuntu
sudo dnf install restic # Fedora, RHEL (dépôt EPEL)
restic version
2. Préparer l'accès au NAS
restic se connecte au NAS en SFTP avec une clé SSH sans phrase de passe, puisque la sauvegarde tourne sans vous. Créez une clé dédiée pour le compte root, qui exécutera la sauvegarde :
sudo ssh-keygen -t ed25519 -f /root/.ssh/restic_nas -N "" -C "restic@$(hostname)"
sudo ssh-copy-id -i /root/.ssh/restic_nas.pub sauvegarde@nas.maison.lan
Côté NAS, utilisez un compte dédié (sauvegarde) qui n'a accès qu'au dossier des sauvegardes.
Puis déclarez la clé pour cet hôte :
sudo nano /root/.ssh/config
Host nas.maison.lan
User sauvegarde
IdentityFile /root/.ssh/restic_nas
Testez : sudo ssh nas.maison.lan doit se connecter sans rien demander.
3. Créer le dépôt chiffré
Le mot de passe du dépôt chiffre toutes les données. Générez-en un solide et stockez-le dans un fichier lisible par root seulement :
sudo install -d -m 700 /etc/restic
openssl rand -base64 32 | sudo tee /etc/restic/motdepasse > /dev/null
sudo chmod 600 /etc/restic/motdepasse
Danger
Sans ce mot de passe, la sauvegarde est irrécupérable. Copiez-le immédiatement dans votre gestionnaire de mots de passe. Si le serveur meurt, c'est la seule chose dont vous aurez besoin pour restaurer.
Créez un fichier de variables, utilisé par les commandes et par la tâche automatique :
sudo nano /etc/restic/env
RESTIC_REPOSITORY=sftp:nas.maison.lan:/volume1/sauvegardes/serveur
RESTIC_PASSWORD_FILE=/etc/restic/motdepasse
Initialisez le dépôt :
sudo bash -c 'set -a; . /etc/restic/env; restic init'
4. Première sauvegarde
sudo bash -c 'set -a; . /etc/restic/env; restic backup /etc /home --exclude-caches --tag quotidien'
La première sauvegarde envoie tout. Les suivantes ne transfèrent que les différences et sont bien plus rapides.
Listez les instantanés :
sudo bash -c 'set -a; . /etc/restic/env; restic snapshots'
Bases de données et applications
Copier les fichiers d'une base en cours d'écriture peut produire une sauvegarde incohérente. Faites d'abord un export (pg_dump, mysqldump, sqlite3 base.db ".backup export.db") dans un dossier inclus dans la sauvegarde, ou arrêtez le service le temps de la copie.
5. Automatiser avec un timer systemd
Le service, qui sauvegarde, élague les anciens instantanés et vérifie le dépôt :
sudo nano /etc/systemd/system/restic-sauvegarde.service
[Unit]
Description=Sauvegarde restic vers le NAS
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
# Cache de restic : accélère fortement les sauvegardes suivantes
CacheDirectory=restic
Environment=RESTIC_CACHE_DIR=/var/cache/restic
ExecStart=/usr/bin/restic backup /etc /home --exclude-caches --tag quotidien
ExecStart=/usr/bin/restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
ExecStart=/usr/bin/restic check
Nice=10
IOSchedulingClass=idle
Le minuteur, chaque nuit à 2 h avec un décalage aléatoire :
sudo nano /etc/systemd/system/restic-sauvegarde.timer
[Unit]
Description=Sauvegarde restic quotidienne
[Timer]
OnCalendar=*-*-* 02:00
RandomizedDelaySec=30min
Persistent=true
[Install]
WantedBy=timers.target
Persistent=true lance la sauvegarde au démarrage si le serveur était éteint à l'heure prévue.
Activez et testez :
sudo systemctl daemon-reload
sudo systemctl enable --now restic-sauvegarde.timer
sudo systemctl start restic-sauvegarde.service # lancement immédiat pour tester
systemctl list-timers restic-sauvegarde.timer
journalctl -u restic-sauvegarde.service -n 50
La politique de rétention
La commande forget conserve :
| Règle | Conserve |
|---|---|
--keep-daily 7 |
Une sauvegarde par jour sur les 7 derniers jours |
--keep-weekly 4 |
Une par semaine sur les 4 dernières semaines |
--keep-monthly 12 |
Une par mois sur les 12 derniers mois |
--prune supprime ensuite réellement les données qui ne servent plus à aucun instantané.
6. Tester la restauration
Une sauvegarde n'a de valeur que si on sait la restaurer. Restaurez dans un dossier temporaire, jamais par-dessus les fichiers en place :
sudo bash -c 'set -a; . /etc/restic/env; restic restore latest --target /tmp/restauration --include /etc/hostname'
cat /tmp/restauration/etc/hostname
restic recrée l'arborescence complète sous le dossier cible : /etc/hostname devient /tmp/restauration/etc/hostname.
Pour récupérer un fichier en naviguant, montez le dépôt (nécessite le paquet fuse3) :
sudo mkdir -p /mnt/restic
sudo bash -c 'set -a; . /etc/restic/env; restic mount /mnt/restic'
# dans un autre terminal : sudo ls /mnt/restic/snapshots/
Astuce
Une fois par mois, vérifiez aussi une partie des données elles-mêmes, pas seulement la structure du dépôt :
restic check --read-data-subset=5%
Aller plus loin
- Deuxième destination (règle 3-2-1) : ajoutez un dépôt hors site (stockage S3 européen, NAS chez un proche) avec un second service, ou copiez le dépôt avec
restic copy. - Alerte en cas d'échec : ajoutez
OnFailure=dans le service vers une unité qui envoie une notification (ntfy, e-mail), ou un ping vers un service comme Healthchecks. - Protection contre les rançongiciels : activez les instantanés en lecture seule côté NAS, pour qu'un serveur compromis ne puisse pas effacer son propre historique.