Aller au contenu
Cloud medium

Sauvegarder vos données avec restic

14 min de lecture

Restic sauvegarde vos fichiers de manière incrémentale, chiffrée (AES-256) et dédupliquée vers n’importe quel backend : stockage local, serveur SFTP, Amazon S3, MinIO, Google Cloud Storage, Azure Blob… C’est un binaire unique, sans dépendances, qui fonctionne sur Linux, macOS et Windows.

Avec restic, vous pouvez :

  • Sauvegarder automatiquement vos données avec chiffrement de bout en bout
  • Restaurer un fichier, un dossier ou un snapshot complet
  • Gérer la rétention avec des politiques flexibles (garder les X derniers jours/semaines/mois)
  • Vérifier l’intégrité de vos sauvegardes à tout moment

Téléchargez le binaire officiel (recommandé pour avoir la dernière version) :

Fenêtre de terminal
wget https://github.com/restic/restic/releases/download/v0.18.1/restic_0.18.1_linux_amd64.bz2
bzip2 -d restic_0.18.1_linux_amd64.bz2
chmod +x restic_0.18.1_linux_amd64
sudo mv restic_0.18.1_linux_amd64 /usr/local/bin/restic

Ou via le gestionnaire de paquets (version potentiellement plus ancienne) :

Fenêtre de terminal
# Debian/Ubuntu
sudo apt install restic
# Fedora
sudo dnf install restic
# Arch Linux
sudo pacman -S restic

Vérifiez l’installation :

Fenêtre de terminal
restic version
Sortie attendue
restic 0.18.1 compiled with go1.25.1 on linux/amd64

Pour tester les commandes de ce guide, déployons MinIO (stockage S3-compatible) sur minikube. Vous pourrez ensuite adapter l’endpoint à votre provider (AWS S3, Outscale, Scaleway…).

  1. Démarrez minikube (si ce n’est pas déjà fait) :

    Fenêtre de terminal
    minikube start
  2. Déployez MinIO :

    Fenêtre de terminal
    minikube kubectl -- create namespace minio
    minikube kubectl -- run minio --image=minio/minio:RELEASE.2025-01-20T14-49-07Z -n minio \
    --env="MINIO_ROOT_USER=minioadmin" \
    --env="MINIO_ROOT_PASSWORD=minioadmin" \
    -- server /data --console-address ":9001"
  3. Exposez le service :

    Fenêtre de terminal
    minikube kubectl -- expose pod minio -n minio \
    --port=9000 --target-port=9000 --type=NodePort --name=minio-api
  4. Récupérez l’URL d’accès :

    Fenêtre de terminal
    minikube service minio-api -n minio --url
    Exemple de sortie
    http://192.168.49.2:31019
  5. Configurez les variables d’environnement :

    Fenêtre de terminal
    export AWS_ACCESS_KEY_ID=minioadmin
    export AWS_SECRET_ACCESS_KEY=minioadmin
    export RESTIC_REPOSITORY="s3:http://192.168.49.2:31019/restic-backup"
    export RESTIC_PASSWORD="votre-mot-de-passe-securise"

    Remplacez l’URL par celle obtenue à l’étape précédente.

Avant de commencer, comprenez ces trois concepts clés de restic.

Le repository est l’emplacement où restic stocke vos sauvegardes. Il peut être :

  • Un dossier local (/backup/restic-repo)
  • Un bucket S3 (s3:s3.amazonaws.com/mon-bucket)
  • Un serveur SFTP (sftp:user@serveur:/backup)
  • Un stockage compatible S3 comme Outscale OOS ou MinIO

Chaque sauvegarde crée un snapshot : une photo de vos fichiers à un instant T. Vous pouvez restaurer n’importe quel snapshot, même ancien.

Restic découpe vos fichiers en blobs (morceaux). Si un blob existe déjà dans le repository (même contenu dans un autre fichier ou snapshot), il n’est pas re-téléchargé. Tous les blobs sont chiffrés avec AES-256 avant d’être envoyés.

Architecture restic : machine locale, restic chiffre, repository avec snapshots et blobs dédupliqués

Avant la première sauvegarde, initialisez le repository :

Fenêtre de terminal
restic init
Sortie
created restic repository d55b62d896 at s3:http://192.168.49.2:31019/restic-backup
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Fenêtre de terminal
restic backup /home/user/documents
Sortie
repository d55b62d8 opened (version 2, compression level auto)
no parent snapshot found, will read all files
Files: 4 new, 0 changed, 0 unmodified
Dirs: 4 new, 0 changed, 0 unmodified
Added to the repository: 102.967 KiB (102.055 KiB stored)
processed 4 files, 100.052 KiB in 0:00
snapshot 158bc701 saved

Les sauvegardes suivantes sont incrémentales : seuls les fichiers nouveaux ou modifiés sont envoyés.

Fenêtre de terminal
# Ajouter un fichier
echo "Nouveau contenu" > /home/user/documents/nouveau.txt
# Relancer la sauvegarde
restic backup /home/user/documents
Sortie
repository d55b62d8 opened (version 2, compression level auto)
using parent snapshot 158bc701
Files: 1 new, 0 changed, 4 unmodified
Dirs: 0 new, 3 changed, 1 unmodified
Added to the repository: 2.564 KiB (1.481 KiB stored)
processed 5 files, 100.073 KiB in 0:00
snapshot 6f1a7cec saved
Fenêtre de terminal
# Exclure par pattern
restic backup /home/user --exclude="*.log" --exclude=".cache"
# Utiliser un fichier d'exclusions
cat > /tmp/excludes.txt << 'EOF'
*.log
*.tmp
.cache
node_modules
EOF
restic backup /home/user --exclude-file=/tmp/excludes.txt
Fenêtre de terminal
restic snapshots
Sortie
repository d55b62d8 opened (version 2, compression level auto)
ID Time Host Tags Paths Size
---------------------------------------------------------------------------------------
158bc701 2026-01-23 15:05:35 master1 /home/user/documents 100.052 KiB
6f1a7cec 2026-01-23 15:06:10 master1 /home/user/documents 100.073 KiB
---------------------------------------------------------------------------------------
2 snapshots
Fenêtre de terminal
restic ls latest
Sortie
snapshot 6f1a7cec of [/home/user/documents] at 2026-01-23 15:06:10:
/home
/home/user
/home/user/documents
/home/user/documents/rapport.txt
/home/user/documents/notes.md
/home/user/documents/nouveau.txt
Fenêtre de terminal
restic restore latest --target /tmp/restore
Sortie
restoring snapshot 6f1a7cec to /tmp/restore
Summary: Restored 9 files/dirs (100.073 KiB) in 0:00
Fenêtre de terminal
# Restaurer uniquement un dossier
restic restore latest --target /tmp/restore --include "/home/user/documents"
# Restaurer un fichier précis
restic restore latest --target /tmp/restore --include "/home/user/documents/rapport.txt"
Fenêtre de terminal
# Lister les snapshots pour trouver l'ID
restic snapshots
# Restaurer depuis un snapshot spécifique
restic restore 158bc701 --target /tmp/restore-ancien

forget marque les snapshots pour suppression mais ne libère pas l’espace :

Fenêtre de terminal
# Supprimer un snapshot par ID
restic forget 158bc701
# Appliquer une politique de rétention
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6

prune supprime effectivement les données qui ne sont plus référencées :

Fenêtre de terminal
restic prune
Sortie
loading indexes...
finding data that is still in use for 1 snapshots
searching used packs...
to repack: 5 blobs / 1.715 KiB
this removes: 4 blobs / 1.147 KiB
to delete: 0 blobs / 0 B
total prune: 4 blobs / 1.147 KiB
remaining: 10 blobs / 101.828 KiB
unused size after prune: 0 B (0.00% of remaining size)
repacking packs
rebuilding index
removing 1 old packs
done
Fenêtre de terminal
# En une seule commande
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
Fenêtre de terminal
restic check
Sortie
using temporary cache in /tmp/restic-check-cache-1215412186
load indexes
check all packs
check snapshots, trees and blobs
no errors were found

Vérification complète (avec lecture des données)

Section intitulée « Vérification complète (avec lecture des données) »
Fenêtre de terminal
restic check --read-data
Fenêtre de terminal
restic stats
Sortie
Stats in restore-size mode:
Snapshots processed: 2
Total File Count: 17
Total Size: 200.125 KiB

Restic supporte de nombreux backends de stockage :

BackendFormat repositoryExemple
Local/chemin/vers/reporestic -r /backup/repo init
SFTPsftp:user@host:/pathrestic -r sftp:bob@server:/backup init
Amazon S3s3:endpoint/bucketrestic -r s3:s3.amazonaws.com/mybucket init
MinIOs3:endpoint/bucketrestic -r s3:minio.local:9000/backup init
Backblaze B2b2:bucket:pathrestic -r b2:mybucket:/restic init
Azure Blobazure:container:/restic -r azure:mycontainer:/ init
Google Cloudgs:bucket:/pathrestic -r gs:mybucket:/restic init
REST Serverrest:http://host:port/restic -r rest:http://localhost:8000/ init
Rclonerclone:remote:pathrestic -r rclone:gdrive:/backup init
/usr/local/bin/backup-restic.sh
#!/bin/bash
set -e
export AWS_ACCESS_KEY_ID="votre-access-key"
export AWS_SECRET_ACCESS_KEY="votre-secret-key"
export RESTIC_REPOSITORY="s3:s3.amazonaws.com/mon-bucket"
export RESTIC_PASSWORD_FILE="/etc/restic/password"
# Sauvegarde
restic backup /home /etc --exclude-file=/etc/restic/excludes.txt
# Rétention
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# Vérification (hebdomadaire)
if [ "$(date +%u)" -eq 7 ]; then
restic check
fi
Fenêtre de terminal
# Sauvegarde quotidienne à 2h du matin
0 2 * * * /usr/local/bin/backup-restic.sh >> /var/log/restic.log 2>&1
/etc/systemd/system/restic-backup.service
[Unit]
Description=Restic backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-restic.sh
/etc/systemd/system/restic-backup.timer
[Unit]
Description=Run restic backup daily
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Fenêtre de terminal
sudo systemctl enable --now restic-backup.timer
ProblèmeCause probableSolution
Fatal: unable to open config fileRepository non initialiséExécutez restic init
wrong password or no key foundMauvais mot de passeVérifiez RESTIC_PASSWORD
connection refusedBackend inaccessibleVérifiez l’URL et les credentials
pack is damagedCorruption de donnéesExécutez restic check --read-data
repository is already lockedProcessus interrompuExécutez restic unlock
  • Chiffrement par défaut : toutes les données sont chiffrées avec AES-256, le mot de passe est indispensable.
  • Sauvegardes incrémentales : seuls les nouveaux blobs sont envoyés, économisant bande passante et stockage.
  • Déduplication intelligente : un même contenu n’est stocké qu’une fois, même entre fichiers différents.
  • Snapshots immuables : chaque sauvegarde crée un snapshot que vous pouvez restaurer à tout moment.
  • --dry-run toujours : prévisualisez les suppressions avec forget --dry-run avant de les appliquer.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.