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
Installation
Section intitulée « Installation »Téléchargez le binaire officiel (recommandé pour avoir la dernière version) :
wget https://github.com/restic/restic/releases/download/v0.18.1/restic_0.18.1_linux_amd64.bz2bzip2 -d restic_0.18.1_linux_amd64.bz2chmod +x restic_0.18.1_linux_amd64sudo mv restic_0.18.1_linux_amd64 /usr/local/bin/resticOu via le gestionnaire de paquets (version potentiellement plus ancienne) :
# Debian/Ubuntusudo apt install restic
# Fedorasudo dnf install restic
# Arch Linuxsudo pacman -S resticAvec Homebrew :
brew install resticTéléchargez le binaire depuis les releases officielles, extrayez-le et ajoutez le dossier à votre PATH.
Ou avec winget :
winget install restic.resticVérifiez l’installation :
restic versionrestic 0.18.1 compiled with go1.25.1 on linux/amd64Environnement de test avec MinIO
Section intitulée « Environnement de test avec MinIO »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…).
-
Démarrez minikube (si ce n’est pas déjà fait) :
Fenêtre de terminal minikube start -
Déployez MinIO :
Fenêtre de terminal minikube kubectl -- create namespace miniominikube 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" -
Exposez le service :
Fenêtre de terminal minikube kubectl -- expose pod minio -n minio \--port=9000 --target-port=9000 --type=NodePort --name=minio-api -
Récupérez l’URL d’accès :
Fenêtre de terminal minikube service minio-api -n minio --urlExemple de sortie http://192.168.49.2:31019 -
Configurez les variables d’environnement :
Fenêtre de terminal export AWS_ACCESS_KEY_ID=minioadminexport AWS_SECRET_ACCESS_KEY=minioadminexport 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.
Concepts fondamentaux
Section intitulée « Concepts fondamentaux »Avant de commencer, comprenez ces trois concepts clés de restic.
Repository (dépôt)
Section intitulée « Repository (dépôt) »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
Snapshots
Section intitulée « Snapshots »Chaque sauvegarde crée un snapshot : une photo de vos fichiers à un instant T. Vous pouvez restaurer n’importe quel snapshot, même ancien.
Déduplication et chiffrement
Section intitulée « Déduplication et chiffrement »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.
Initialiser un repository
Section intitulée « Initialiser un repository »Avant la première sauvegarde, initialisez le repository :
restic initcreated restic repository d55b62d896 at s3:http://192.168.49.2:31019/restic-backup
Please note that knowledge of your password is required to accessthe repository. Losing your password means that your data isirrecoverably lost.Sauvegarder des fichiers
Section intitulée « Sauvegarder des fichiers »Première sauvegarde
Section intitulée « Première sauvegarde »restic backup /home/user/documentsrepository d55b62d8 opened (version 2, compression level auto)no parent snapshot found, will read all files
Files: 4 new, 0 changed, 0 unmodifiedDirs: 4 new, 0 changed, 0 unmodifiedAdded to the repository: 102.967 KiB (102.055 KiB stored)
processed 4 files, 100.052 KiB in 0:00snapshot 158bc701 savedSauvegardes incrémentales
Section intitulée « Sauvegardes incrémentales »Les sauvegardes suivantes sont incrémentales : seuls les fichiers nouveaux ou modifiés sont envoyés.
# Ajouter un fichierecho "Nouveau contenu" > /home/user/documents/nouveau.txt
# Relancer la sauvegarderestic backup /home/user/documentsrepository d55b62d8 opened (version 2, compression level auto)using parent snapshot 158bc701
Files: 1 new, 0 changed, 4 unmodifiedDirs: 0 new, 3 changed, 1 unmodifiedAdded to the repository: 2.564 KiB (1.481 KiB stored)
processed 5 files, 100.073 KiB in 0:00snapshot 6f1a7cec savedExclure des fichiers
Section intitulée « Exclure des fichiers »# Exclure par patternrestic backup /home/user --exclude="*.log" --exclude=".cache"
# Utiliser un fichier d'exclusionscat > /tmp/excludes.txt << 'EOF'*.log*.tmp.cachenode_modulesEOF
restic backup /home/user --exclude-file=/tmp/excludes.txtLister et explorer les snapshots
Section intitulée « Lister et explorer les snapshots »Voir tous les snapshots
Section intitulée « Voir tous les snapshots »restic snapshotsrepository 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 KiB6f1a7cec 2026-01-23 15:06:10 master1 /home/user/documents 100.073 KiB---------------------------------------------------------------------------------------2 snapshotsLister les fichiers d’un snapshot
Section intitulée « Lister les fichiers d’un snapshot »restic ls latestsnapshot 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.txtRestaurer des données
Section intitulée « Restaurer des données »Restaurer un snapshot complet
Section intitulée « Restaurer un snapshot complet »restic restore latest --target /tmp/restorerestoring snapshot 6f1a7cec to /tmp/restoreSummary: Restored 9 files/dirs (100.073 KiB) in 0:00Restaurer un fichier ou dossier spécifique
Section intitulée « Restaurer un fichier ou dossier spécifique »# Restaurer uniquement un dossierrestic restore latest --target /tmp/restore --include "/home/user/documents"
# Restaurer un fichier précisrestic restore latest --target /tmp/restore --include "/home/user/documents/rapport.txt"Restaurer depuis un snapshot ancien
Section intitulée « Restaurer depuis un snapshot ancien »# Lister les snapshots pour trouver l'IDrestic snapshots
# Restaurer depuis un snapshot spécifiquerestic restore 158bc701 --target /tmp/restore-ancienGérer la rétention avec forget et prune
Section intitulée « Gérer la rétention avec forget et prune »Supprimer des snapshots (forget)
Section intitulée « Supprimer des snapshots (forget) »forget marque les snapshots pour suppression mais ne libère pas l’espace :
# Supprimer un snapshot par IDrestic forget 158bc701
# Appliquer une politique de rétentionrestic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6Libérer l’espace (prune)
Section intitulée « Libérer l’espace (prune) »prune supprime effectivement les données qui ne sont plus référencées :
restic pruneloading indexes...finding data that is still in use for 1 snapshotssearching used packs...
to repack: 5 blobs / 1.715 KiBthis removes: 4 blobs / 1.147 KiBto delete: 0 blobs / 0 Btotal prune: 4 blobs / 1.147 KiBremaining: 10 blobs / 101.828 KiBunused size after prune: 0 B (0.00% of remaining size)
repacking packsrebuilding indexremoving 1 old packsdoneCombiner forget et prune
Section intitulée « Combiner forget et prune »# En une seule commanderestic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --pruneVérifier l’intégrité
Section intitulée « Vérifier l’intégrité »Vérification rapide (index et structure)
Section intitulée « Vérification rapide (index et structure) »restic checkusing temporary cache in /tmp/restic-check-cache-1215412186load indexescheck all packscheck snapshots, trees and blobsno errors were foundVérification complète (avec lecture des données)
Section intitulée « Vérification complète (avec lecture des données) »restic check --read-dataStatistiques du repository
Section intitulée « Statistiques du repository »restic statsStats in restore-size mode: Snapshots processed: 2 Total File Count: 17 Total Size: 200.125 KiBBackends supportés
Section intitulée « Backends supportés »Restic supporte de nombreux backends de stockage :
| Backend | Format repository | Exemple |
|---|---|---|
| Local | /chemin/vers/repo | restic -r /backup/repo init |
| SFTP | sftp:user@host:/path | restic -r sftp:bob@server:/backup init |
| Amazon S3 | s3:endpoint/bucket | restic -r s3:s3.amazonaws.com/mybucket init |
| MinIO | s3:endpoint/bucket | restic -r s3:minio.local:9000/backup init |
| Backblaze B2 | b2:bucket:path | restic -r b2:mybucket:/restic init |
| Azure Blob | azure:container:/ | restic -r azure:mycontainer:/ init |
| Google Cloud | gs:bucket:/path | restic -r gs:mybucket:/restic init |
| REST Server | rest:http://host:port/ | restic -r rest:http://localhost:8000/ init |
| Rclone | rclone:remote:path | restic -r rclone:gdrive:/backup init |
Automatiser les sauvegardes
Section intitulée « Automatiser les sauvegardes »Script de sauvegarde
Section intitulée « Script de sauvegarde »#!/bin/bashset -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"
# Sauvegarderestic backup /home /etc --exclude-file=/etc/restic/excludes.txt
# Rétentionrestic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# Vérification (hebdomadaire)if [ "$(date +%u)" -eq 7 ]; then restic checkfiPlanification avec cron
Section intitulée « Planification avec cron »# Sauvegarde quotidienne à 2h du matin0 2 * * * /usr/local/bin/backup-restic.sh >> /var/log/restic.log 2>&1Planification avec systemd
Section intitulée « Planification avec systemd »[Unit]Description=Restic backup
[Service]Type=oneshotExecStart=/usr/local/bin/backup-restic.sh[Unit]Description=Run restic backup daily
[Timer]OnCalendar=*-*-* 02:00:00Persistent=true
[Install]WantedBy=timers.targetsudo systemctl enable --now restic-backup.timerDépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
Fatal: unable to open config file | Repository non initialisé | Exécutez restic init |
wrong password or no key found | Mauvais mot de passe | Vérifiez RESTIC_PASSWORD |
connection refused | Backend inaccessible | Vérifiez l’URL et les credentials |
pack is damaged | Corruption de données | Exécutez restic check --read-data |
repository is already locked | Processus interrompu | Exécutez restic unlock |
À retenir
Section intitulée « À retenir »- 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-runtoujours : prévisualisez les suppressions avecforget --dry-runavant de les appliquer.
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »- Site officiel : restic.net
- Documentation : restic.readthedocs.io
- GitHub : github.com/restic/restic
- Forum : forum.restic.net