Restic : sauvegardes incrémentielles chiffrées sur Debian et Ubuntu

20 juillet 2026 — par admin_libra

La sauvegarde est l’une des responsabilités les plus critiques d’un administrateur système, et pourtant elle reste souvent négligée ou improvisée. Restic est un outil moderne de sauvegarde, écrit en Go, qui répond à toutes les exigences d’une stratégie de backup sérieuse : chiffrement de bout en bout, déduplication des blocs, sauvegardes incrémentielles et prise en charge de nombreux backends de stockage. La version 0.19.1, publiée en juillet 2026, est disponible directement dans les dépôts officiels de Debian et Ubuntu.

Contrairement à des solutions comme rsync ou tar, Restic adopte une approche orientée snapshots : chaque sauvegarde produit un instantané cohérent de vos données, identifié par un hash unique. Ces snapshots sont stockés sous forme de blocs dédupliqués et chiffrés localement avant tout transfert vers le dépôt (repository). Le résultat : même si le backend de stockage est compromis, vos données restent illisibles sans le mot de passe du dépôt.

Ce guide couvre l’intégralité du cycle de vie d’une sauvegarde avec Restic : installation, initialisation d’un dépôt, première sauvegarde, exploration des snapshots, restauration granulaire, politique de rétention automatisée et programmation via les timers systemd.

Installation de Restic sur Debian et Ubuntu

Restic est disponible dans les dépôts officiels des distributions Debian (à partir de Debian 11 Bullseye) et Ubuntu (à partir d’Ubuntu 20.04 LTS). L’installation se fait en deux commandes :

sudo apt update
sudo apt install -y restic

Pour obtenir la dernière version stable (0.19.1 à l’heure de cet article), vous pouvez utiliser la commande intégrée de mise à jour automatique :

# Mettre à jour restic vers la dernière version officielle
sudo restic self-update

# Vérifier la version installée
restic version

Initialiser un dépôt de sauvegarde

Avant toute sauvegarde, il faut initialiser un repository (dépôt). Restic supporte de nombreux backends : répertoire local, SFTP, S3, Backblaze B2, Azure Blob, et bien d’autres. Dans cet article, nous couvrons les deux cas les plus courants : dépôt local et dépôt distant via SFTP.

Dépôt local

# Définir les variables d'environnement (à placer dans /etc/restic/env)
export RESTIC_REPOSITORY="/mnt/backup/restic-repo"
export RESTIC_PASSWORD="votre-mot-de-passe-fort"

# Initialiser le dépôt
restic init

Dépôt distant via SFTP

# Dépôt sur un serveur distant (nécessite une clé SSH configurée)
export RESTIC_REPOSITORY="sftp:[email protected]:/data/restic/mon-serveur"
export RESTIC_PASSWORD="votre-mot-de-passe-fort"

restic init

Pour sécuriser le mot de passe sans l’exposer dans l’environnement, créez un fichier dédié avec des permissions restrictives :

sudo mkdir -p /etc/restic
sudo bash -c 'cat > /etc/restic/env < /dev/null
sudo chmod 600 /etc/restic/password /etc/restic/env
sudo chmod 700 /etc/restic/

Effectuer une sauvegarde

La commande restic backup crée un nouveau snapshot. Lors de la première exécution, tous les fichiers sont transférés. Les sauvegardes suivantes sont incrémentielles : seuls les blocs modifiés ou nouveaux sont transmis, ce qui réduit considérablement la durée et la bande passante consommée.

# Charger les variables d'environnement
source /etc/restic/env

# Sauvegarde du répertoire /etc et /home
restic backup /etc /home --verbose

# Sauvegarde avec exclusions (caches, fichiers temporaires)
restic backup /home 
  --exclude="*.tmp" 
  --exclude="**/.cache" 
  --exclude="**/node_modules" 
  --exclude-if-present=".nobackup" 
  --verbose

# Dry-run : simuler sans écrire dans le dépôt
restic backup /home --dry-run --verbose

Pour les bases de données, combinez une sauvegarde logique avec un pipe vers Restic :

# Sauvegarde d'une base MySQL via stdin
mysqldump --single-transaction ma_base | 
  restic backup --stdin --stdin-filename ma_base.sql

Lister et explorer les snapshots

# Lister tous les snapshots
restic snapshots

# Lister les snapshots triés par date
restic snapshots --compact

# Explorer le contenu d'un snapshot
restic ls latest /home/user

# Comparer deux snapshots
restic diff a1b2c3d4 e5f6g7h8

# Afficher les statistiques du dépôt
restic stats

Restaurer des données

Restic propose deux approches de restauration : la commande restore pour une récupération directe sur disque, et mount pour naviguer dans les snapshots comme dans un système de fichiers.

Restauration complète ou partielle

# Restaurer le dernier snapshot dans /tmp/restore
restic restore latest --target /tmp/restore

# Restaurer un snapshot spécifique
restic restore a1b2c3d4 --target /tmp/restore

# Restaurer uniquement certains fichiers (filtrage par chemin)
restic restore latest --target /tmp/restore --include "/home/user/Documents"

# Restaurer en excluant certains types de fichiers
restic restore latest --target /tmp/restore --exclude "*.log"

Navigation FUSE (mount)

La commande mount expose tous les snapshots sous forme d’arborescence FUSE, permettant de retrouver un fichier précis sans restauration complète :

# Installer le support FUSE si nécessaire
sudo apt install -y fuse

# Monter le dépôt
mkdir -p /mnt/restic
restic mount /mnt/restic &

# Explorer les snapshots montés
ls /mnt/restic/snapshots/
# → 2026-07-15T02:00:01+02:00/  2026-07-16T02:00:01+02:00/  latest/

# Copier un fichier spécifique
cp /mnt/restic/snapshots/latest/etc/nginx/nginx.conf /tmp/nginx.conf.restore

# Démonter
fusermount -u /mnt/restic

Politique de rétention avec forget et prune

Sans politique de rétention, le dépôt grossit indéfiniment. La commande restic forget supprime les snapshots obsolètes selon des règles configurables, tandis que restic prune libère physiquement l’espace en supprimant les blocs de données orphelins.

# Politique de rétention classique : 7 quotidiens, 4 hebdomadaires, 12 mensuels
restic forget 
  --keep-daily 7 
  --keep-weekly 4 
  --keep-monthly 12 
  --keep-yearly 2 
  --prune

# Simuler la politique sans supprimer (dry-run)
restic forget 
  --keep-daily 7 
  --keep-weekly 4 
  --keep-monthly 12 
  --dry-run --verbose

# Vérifier l'intégrité du dépôt après le prune
restic check

L’option --prune combinée à forget exécute les deux opérations en une seule commande. Pour les grands dépôts, il est préférable de les séparer et d’utiliser --max-repack-size pour étaler la charge.

Automatisation avec systemd timers

Les timers systemd offrent une alternative robuste aux crons classiques : journalisation native via journalctl, gestion des dépendances réseau, et relance automatique en cas d’échec.

Créer le service systemd

sudo tee /etc/systemd/system/restic-backup.service << 'EOF'
[Unit]
Description=Restic backup service
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
ExecStart=/usr/bin/restic backup /etc /home 
  --exclude="**/.cache" 
  --exclude="*.tmp" 
  --verbose
ExecStart=/usr/bin/restic forget 
  --keep-daily 7 
  --keep-weekly 4 
  --keep-monthly 12 
  --prune
ExecStart=/usr/bin/restic check --read-data-subset=5%%
Nice=19
IOSchedulingClass=idle
EOF

Créer le timer systemd

sudo tee /etc/systemd/system/restic-backup.timer << 'EOF'
[Unit]
Description=Restic backup timer (quotidien à 02h00)

[Timer]
OnCalendar=*-*-* 02:00:00
RandomizedDelaySec=30min
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Activer et démarrer le timer
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer

# Vérifier l'état du timer
sudo systemctl list-timers restic-backup.timer

# Lancer manuellement pour tester
sudo systemctl start restic-backup.service

# Suivre les logs
sudo journalctl -u restic-backup.service -f

Bonnes pratiques et sécurité

Quelques recommandations essentielles pour une stratégie de backup fiable avec Restic :

  • Règle 3-2-1 : 3 copies, 2 supports différents, 1 hors site. Configurez un second dépôt Restic vers un backend distant (SFTP, S3, Backblaze).
  • Tester les restaurations régulièrement : planifiez un test de restauration mensuel dans un répertoire temporaire.
  • Conserver le mot de passe en sécurité : sans lui, les données chiffrées sont irrécupérables. Stockez-le dans un gestionnaire de mots de passe (Bitwarden, Vault) et non uniquement sur le serveur sauvegardé.
  • Vérifier l’intégrité : exécutez restic check --read-data-subset=10% hebdomadairement pour détecter toute corruption du dépôt.
  • Surveiller les sauvegardes : intégrez Restic avec Prometheus via l’exporteur restic-exporter ou vérifiez les logs via journalctl.

À lire également

Références

Index complet

Tous les articles (58)

Date Article Tags
20/07/2026 SSL : Certificat Let's Encrypt avec Certbot sur Debian/Ubuntu (sans Snap) apache certbot certificat 20/07/2026 MariaDB : Tuning mariadb server sous debian / ubuntu et operation de maintenance sauvegarde/restauration debian innodb maintenance 20/07/2026 MariaDB : Mise en place d'une réplication Master → Slave base-de-données binlog debian 20/07/2026 OpenSVC : piloter des conteneurs LXC sur datasets ZFS avec snapshots et réplication sous Debian/Ubuntu conteneurs debian haute-disponibilité 20/07/2026 SCREEN : utilisation et cas d'usage des screens sous Linux administration bash debian 20/07/2026 EtherPAD : installation et configuration d'Etherpad collaboration debian editeur-collaboratif 20/07/2026 Wazuh 4.14 : déployer un SIEM/XDR open source sur Debian/Ubuntu compliance debian fim 20/07/2026 Incus 7.x : gérer conteneurs système et VMs sur Debian/Ubuntu — le successeur communautaire de LXD conteneurs debian incus 20/07/2026 Restic : sauvegardes incrémentielles chiffrées sur Debian et Ubuntu backup chiffrement debian 20/07/2026 Restic : sauvegardes chiffrées et dédupliquées sur Debian/Ubuntu automatisation backup chiffrement 30/06/2026 PHP : gérer plusieurs versions PHP-FPM avec les dépôts Sury sur Debian/Ubuntu administration apache debian 22/06/2026 OS : Cycle de vie LTS et mise à jour des distributions — apt dist-upgrade et do-release-upgrade sous Debian / Ubuntu apt cycle-de-vie debian 17/06/2026 APT : Guide complet de la gestion des paquets sous Debian et Ubuntu administration apt debian 17/06/2026 SHELL : Guide des commandes les plus usuelles et commandes couteau suisse awk bash commandes 17/06/2026 SUDO : implémentation et sécurisation des accès sur Debian/Ubuntu administration audit authentification 17/06/2026 ProFTPd : authentification MySQL centralisée, FTPs (SSL) et SFTP sur Debian/Ubuntu authentification debian ftp 09/06/2026 Fail2ban — configuration avancée et filtres personnalisés bruteforce debian fail2ban 07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs