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 »Restic est distribué sous forme de binaire statique unique, sans runtime ni dépendance à installer : il suffit de le placer dans le PATH. Les dépôts des distributions le proposent aussi, mais avec un décalage de version fréquent de plusieurs mois. Choisissez le téléchargement direct si vous voulez la version testée dans ce guide.
Téléchargez le binaire officiel (recommandé pour avoir la dernière version) :
base=https://github.com/restic/restic/releases/download/v0.19.1wget "$base/restic_0.19.1_linux_amd64.bz2" "$base/SHA256SUMS"sha256sum --check --ignore-missing SHA256SUMSbzip2 -d restic_0.19.1_linux_amd64.bz2chmod +x restic_0.19.1_linux_amd64sudo mv restic_0.19.1_linux_amd64 /usr/local/bin/resticLa commande sha256sum --check doit afficher restic_0.19.1_linux_amd64.bz2: OK
avant que vous décompressiez quoi que ce soit. Le fichier SHA256SUMS vient du
même dépôt de publication que l'archive : il détecte un téléchargement corrompu,
mais pas une publication compromise. Pour ce second cas, comparez l'empreinte
avec une valeur obtenue par un autre canal. Pour cette version, l'empreinte
SHA-256 de l'archive Linux amd64 est
f415415624dcc452f2a02b8c33641791a8c6d6d3b65bbb3543fcf9a25151585c.
Ou 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.19.1 compiled with go1.26.4 on linux/amd64Environnement de test avec RustFS
Section intitulée « Environnement de test avec RustFS »Pour tester les commandes de ce guide, déployons un stockage compatible S3 en local, avec Docker. MinIO ne publie plus d'image communautaire récupérable : au 9 octobre 2026, minio/minio sur Docker Hub et quay.io/minio/minio ne se téléchargent plus. Ce guide utilise donc RustFS, un autre stockage compatible S3. RustFS est publié en version stable (1.0.1) ; ici, il ne sert que de banc d'essai local. Vous pourrez ensuite adapter l'endpoint à votre provider (AWS S3, Outscale, Scaleway...).
-
Lancez RustFS sur le port 9000, limité à
127.0.0.1:Fenêtre de terminal export AWS_ACCESS_KEY_ID=demo-local-accessexport AWS_SECRET_ACCESS_KEY=demo-local-secret-keydocker run -d --name rustfs -p 127.0.0.1:9000:9000 \-e RUSTFS_ACCESS_KEY="$AWS_ACCESS_KEY_ID" \-e RUSTFS_SECRET_KEY="$AWS_SECRET_ACCESS_KEY" \-e RUSTFS_VOLUMES=/data \-v rustfs-data:/data \rustfs/rustfs:1.0.1@sha256:1803faef57627e2d9c2e7d89d655d712ddded5389040054987163043fecb6a3cLes deux valeurs
demo-local-*sont des valeurs de démonstration, valables uniquement pour ce conteneur local lié à127.0.0.1. Ne les réutilisez jamais sur un vrai stockage. -
Configurez le dépôt restic. restic lit les clés S3 dans les mêmes variables
AWS_*. Le mot de passe du dépôt est aussi une valeur de démonstration locale :Fenêtre de terminal export RESTIC_REPOSITORY="s3:http://127.0.0.1:9000/restic-backup"export RESTIC_PASSWORD="mot-de-passe-de-demo-local"Pas besoin de créer le bucket :
restic initle crée.Pour tout supprimer en fin de test :
docker rm -fv rustfs && docker volume rm rustfs-data.
Concepts fondamentaux
Section intitulée « Concepts fondamentaux »Trois notions suffisent à comprendre toutes les commandes qui suivent. Elles décrivent respectivement où restic écrit, ce qu'il écrit à chaque exécution, et comment il évite de réécrire deux fois la même donnée. Le vocabulaire est repris tel quel dans les sorties de commande, il vaut la peine de le fixer maintenant.
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 envoyé une seconde fois. Tous les blobs sont chiffrés avec AES-256 avant d'être envoyés.
Initialiser un repository
Section intitulée « Initialiser un repository »L'initialisation crée la structure de dossiers du dépôt et une clé de chiffrement protégée par votre mot de passe. Elle ne se fait qu'une fois par dépôt : toutes les sauvegardes ultérieures réutilisent cette clé. La commande lit RESTIC_REPOSITORY et RESTIC_PASSWORD dans l'environnement, inutile donc de repasser l'emplacement en argument :
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.L'adresse du dépôt affichée dans cette sortie est celle d'un autre banc d'essai que le vôtre : seul compte le message created restic repository.
Sauvegarder des fichiers
Section intitulée « Sauvegarder des fichiers »La commande backup prend un ou plusieurs chemins et en crée un snapshot. Elle ne demande aucune configuration préalable : pas de fichier de règles, pas de déclaration de jeux de sauvegarde. Le comportement change seulement selon qu'un snapshot précédent existe ou non pour les mêmes chemins.
Première sauvegarde
Section intitulée « Première sauvegarde »Sans snapshot antérieur, restic lit l'intégralité des fichiers et remonte no parent snapshot found :
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. Restic s'appuie sur le snapshot parent (la sauvegarde précédente des mêmes chemins) pour comparer taille et date de modification, et ne relit que ce qui a changé. Le snapshot produit reste malgré tout complet : il référence l'ensemble de l'arborescence, y compris les fichiers inchangés, et se restaure seul sans avoir besoin des sauvegardes antérieures.
# 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 »Les motifs d'exclusion s'écrivent soit en ligne de commande avec --exclude (répétable), soit dans un fichier passé à --exclude-file, à raison d'un motif par ligne. La seconde forme est préférable dès que la liste dépasse deux entrées : elle se versionne et se partage entre plusieurs machines.
# 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 »Une fois plusieurs sauvegardes accumulées, il faut pouvoir retrouver la bonne avant de restaurer. Deux commandes suffisent : l'une donne l'inventaire des snapshots, l'autre le contenu de l'un d'eux. Les deux travaillent uniquement sur les métadonnées du dépôt, elles ne téléchargent pas les données de fichiers.
Voir tous les snapshots
Section intitulée « Voir tous les snapshots »La sortie liste un snapshot par ligne, avec son identifiant court, la machine d'origine et les chemins sauvegardés :
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 »ls affiche l'arborescence enregistrée dans un snapshot, ce qui permet de vérifier qu'un fichier y figure bien avant de lancer une restauration :
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 »La restauration écrit les fichiers dans le répertoire désigné par --target, qui est obligatoire : restic n'écrase jamais l'emplacement d'origine sans qu'on le lui demande explicitement. Restaurez de préférence dans un répertoire vide, puis déplacez les fichiers une fois le contenu vérifié. Toute restauration part d'un snapshot, complet ou filtré.
Restaurer un snapshot complet
Section intitulée « Restaurer un snapshot complet »Sans filtre, la totalité du snapshot est recréée sous la cible, arborescence de chemins comprise :
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 »L'option --include restreint la restauration à un chemin, en utilisant le chemin absolu tel qu'il apparaît dans le snapshot (celui affiché par restic ls), pas un chemin relatif à la cible :
# 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 »Pour revenir à un état antérieur, remplacez latest par l'identifiant du snapshot visé ; les 8 premiers caractères suffisent tant qu'ils sont uniques dans le dépôt :
# 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 »Sans ménage, un dépôt accumule un snapshot par exécution et grossit indéfiniment. Le nettoyage se fait en deux temps distincts, et c'est la source de confusion la plus fréquente chez les nouveaux venus : forget décide quels snapshots ne sont plus utiles, prune récupère l'espace disque correspondant. Tant que prune n'a pas tourné, la volumétrie du dépôt ne bouge pas.
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 »L'option --prune enchaîne les deux opérations, et ne déclenche le nettoyage que si forget a effectivement retiré quelque chose. C'est la forme à utiliser dans un script planifié :
# 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é »Une sauvegarde qu'on n'a jamais vérifiée n'est qu'une hypothèse. Restic propose deux niveaux de contrôle : un contrôle de cohérence structurelle, rapide, qui valide les index et les métadonnées, et un contrôle de contenu, qui relit les données et recalcule leurs empreintes. Le second détecte la corruption silencieuse du stockage, que le premier ne peut pas voir.
Vérification rapide (index et structure)
Section intitulée « Vérification rapide (index et structure) »Ce contrôle télécharge les index et les arbres de métadonnées, mais pas les données de fichiers ; il se termine en quelques secondes même sur un gros dépôt :
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) »Avec --read-data, restic récupère chaque pack de données et vérifie son empreinte : c'est le seul moyen de détecter un fichier altéré côté stockage.
restic check --read-dataStatistiques du repository
Section intitulée « Statistiques du repository »stats renvoie par défaut la taille en mode restore-size, c'est-à-dire le volume qu'occuperaient les fichiers une fois restaurés, et non la place réellement prise dans le dépôt après déduplication :
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 »Le backend se choisit uniquement par le préfixe de l'URL de dépôt, passée avec -r ou via RESTIC_REPOSITORY. Aucune autre option ne change : les commandes backup, restore ou prune sont identiques quel que soit le stockage derrière. Les accès S3 et compatibles lisent leurs identifiants dans AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY, comme dans l'exemple RustFS plus haut.
| 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, RustFS | s3:endpoint/bucket | restic -r s3:rustfs.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 »Une sauvegarde lancée à la main finit toujours par être oubliée. L'automatisation tient en deux morceaux : un script qui enchaîne sauvegarde, rétention et vérification, puis un planificateur qui le déclenche. Le point sensible est celui des secrets : le mot de passe du dépôt et les clés d'accès au stockage ne s'écrivent jamais dans le script. Ils vivent dans deux fichiers à accès restreint (mode 600, propriétaire root), le premier référencé par RESTIC_PASSWORD_FILE, le second chargé par le script.
Fichiers de secrets
Section intitulée « Fichiers de secrets »Créez d'abord le dossier et les deux fichiers avec des droits restreints, avant d'y écrire quoi que ce soit : install -m 600 /dev/null crée un fichier vide déjà protégé, si bien que le secret n'est jamais lisible par un autre compte, même un instant.
sudo install -d -m 700 /etc/resticsudo install -m 600 /dev/null /etc/restic/passwordsudo install -m 600 /dev/null /etc/restic/s3.envsudoedit /etc/restic/passwordsudoedit /etc/restic/s3.envprintf '%s\n' '.cache' 'node_modules' '*.tmp' | sudo tee /etc/restic/excludes.txtLa dernière commande crée aussi la liste d'exclusions /etc/restic/excludes.txt, une exclusion par ligne, que le script lira : sans ce fichier, restic backup échoue et set -e arrête tout le script. Adaptez les motifs à vos données.
Le premier fichier contient le mot de passe du dépôt sur une seule ligne. Le second contient les clés d'accès, une affectation par ligne, sans le mot export :
AWS_ACCESS_KEY_ID=votre-access-keyAWS_SECRET_ACCESS_KEY=votre-secret-keyUn fichier lisible seulement par root suffit si le script tourne sous root, comme ici. Avec un compte de service, donnez-lui la propriété des deux fichiers.
Script de sauvegarde
Section intitulée « Script de sauvegarde »Le set -euo pipefail en tête interrompt le script à la première commande en échec ou à la première variable non définie, pour éviter qu'une purge s'exécute après une sauvegarde ratée. Le bloc set -a / set +a exporte les variables du fichier s3.env vers restic, sans qu'elles apparaissent dans le script :
#!/bin/bashset -euo pipefail
# Clés d'accès S3, lues dans un fichier protégé (chmod 600)set -a. /etc/restic/s3.envset +aexport 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étention (à retirer si la clé de ce serveur n'a pas le droit de supprimer,# voir la section sur l'immuabilité plus bas)restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# Vérification (hebdomadaire)if [ "$(date +%u)" -eq 7 ]; then restic checkfiCe script suppose une clé d'accès qui peut supprimer des objets. Si vous appliquez plus bas la clé sans droit de suppression (immuabilité), retirez la ligne forget --prune du script quotidien : elle échouerait à chaque exécution, et comme set -e interrompt le script, la vérification hebdomadaire restic check ne s'exécuterait jamais. La rétention se lance alors depuis un autre poste, avec la clé complète.
Planification avec cron
Section intitulée « Planification avec cron »La redirection vers un fichier de log est indispensable : sans elle, la sortie de restic part dans un mail local que personne ne lit.
# 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 »Un timer systemd remplace avantageusement cron : il journalise dans journalctl, et son option Persistent=true rattrape l'exécution manquée si la machine était éteinte à l'heure prévue. Il se compose toujours de deux unités, le service qui fait le travail et le timer qui le déclenche.
[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.timerComment rendre une sauvegarde restic immuable ?
Section intitulée « Comment rendre une sauvegarde restic immuable ? »Une sauvegarde qu'un attaquant peut effacer avec la clé du serveur sauvegardé ne protège pas d'un rançongiciel. Le script ci-dessus, avec ses clés d'accès sur la machine qu'il protège, ouvre exactement cette porte : qui prend la machine prend la clé, et la clé suffit à supprimer le dépôt. La documentation de restic décrit ce risque dans sa section sur le mode « append-only » : le client qui sauvegarde doit pouvoir écrire et lire, pas supprimer ni écraser, et les opérations forget et prune se lancent depuis un autre poste, mieux protégé. Deux leviers existent sur un stockage S3.
Premier levier : une clé sans droit de suppression. La clé du script ne reçoit que la lecture, l'écriture et la liste, plus la suppression limitée au préfixe locks/ : restic y dépose des verrous temporaires qu'il doit pouvoir retirer. Voici le modèle de politique, à adapter à votre fournisseur et au nom de votre bucket :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket", "s3:GetBucketLocation"], "Resource": "arn:aws:s3:::mon-bucket" }, { "Effect": "Allow", "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::mon-bucket/*" }, { "Effect": "Allow", "Action": ["s3:DeleteObject"], "Resource": "arn:aws:s3:::mon-bucket/locks/*" } ]}Avec cette clé, restic backup doit fonctionner et restic forget --prune doit échouer : c'est voulu. La rétention se lance alors avec une seconde clé, complète, conservée hors du serveur sauvegardé. Activez aussi le versioning du bucket : une écriture sur un objet existant conserve l'ancienne version. Cette politique est un modèle : le banc RustFS de ce guide ne permet pas de la poser avec les outils présentés ici, vérifiez-la sur votre fournisseur avant de vous y fier.
Second levier : l'Object Lock. L'Object Lock est une fonction S3 qui interdit la suppression d'une version d'objet pendant une durée de rétention, même à un administrateur en mode COMPLIANCE. Restic peut écrire dans un bucket qui l'active (amélioration #2202 du journal des changements de restic), mais il ne sait pas poser de rétention lui-même : celle-ci vient de la rétention par défaut du bucket. Sur le banc RustFS, avec restic 0.19.1 et l'AWS CLI :
export AWS_DEFAULT_REGION=us-east-1aws --endpoint-url http://127.0.0.1:9000 s3api create-bucket \ --bucket restic-locked --object-lock-enabled-for-bucketaws --endpoint-url http://127.0.0.1:9000 s3api put-object-lock-configuration \ --bucket restic-locked \ --object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":1}}}'export RESTIC_REPOSITORY="s3:http://127.0.0.1:9000/restic-locked"restic initrestic backup /homeinit et backup réussissent sans erreur, et le dépôt se comporte comme un dépôt ordinaire tant qu'on ne cherche pas à supprimer. La différence apparaît à la suppression : sur un bucket versionné avec Object Lock, un restic forget --keep-last 1 --prune réussit en apparence (le snapshot disparaît de restic snapshots, restic check ne signale rien), mais le service n'a posé qu'un marqueur de suppression. Chaque version antérieure du snapshot reste en place, protégée par la rétention :
aws --endpoint-url http://127.0.0.1:9000 s3api list-object-versions \ --bucket restic-locked --prefix snapshots/ \ --query '[length(Versions), length(DeleteMarkers)]' --output textAprès deux sauvegardes puis un forget --prune qui en retire une, la commande affiche 2 1 : deux versions conservées, un marqueur de suppression. Pour détruire réellement la version, il faut la désigner par son identifiant de version, et le service refuse tant que la rétention court. L'identifiant s'obtient avec list-object-versions (champ VersionId) :
aws --endpoint-url http://127.0.0.1:9000 s3api delete-object \ --bucket restic-locked --key <clé-du-snapshot> --version-id <identifiant-de-version>Le service répond :
An error occurred (AccessDenied) when calling the DeleteObject operation: Object is under COMPLIANCE retention and cannot be deleted until 2026-10-13 7:35:24.298923518 +00:00:00Le refus vaut aussi pour la clé administrateur. L'Object Lock protège donc le dépôt d'un attaquant qui détient une clé, mais ne libère pas d'espace avant la fin de la rétention : choisissez une durée égale à la période pendant laquelle vous acceptez de ne pas récupérer cet espace. Les versions masquées par un marqueur se retrouvent avec list-object-versions.
Dans les deux cas, testez la restauration depuis une copie du dépôt avant d'en dépendre : une sauvegarde immuable que personne n'a restaurée reste une hypothèse.
Dépannage
Section intitulée « Dépannage »La plupart des erreurs restic viennent de trois causes : un dépôt non initialisé, un mot de passe ou des identifiants de backend erronés, ou un verrou laissé par un processus interrompu. Le tableau associe chaque message affiché à sa cause la plus probable et à la commande qui débloque la situation.
| 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 |
error while unlocking: ... COMPLIANCE retention | Stockage S3 en Object Lock qui refuse de supprimer le verrou posé par restic (non rencontré avec RustFS 1.0.1) | Attendez la fin de la rétention, ou voyez la section sur la sauvegarde immuable |
À 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 jamais modifiés : chaque sauvegarde crée un snapshot que vous pouvez restaurer à tout moment. Il reste pourtant supprimable par quiconque détient une clé avec droit de suppression : voir la section sur la sauvegarde immuable.
- Rétention en deux temps :
forgetdécide quels snapshots disparaissent,prunelibère l'espace ;--pruneenchaîne les deux. - Secrets hors du script : mot de passe et clés d'accès vivent dans des fichiers en mode
600, jamais dans le script. - Clé de sauvegarde sans droit de suppression, ou Object Lock : sans l'un des deux, une machine compromise peut effacer ses propres sauvegardes.
- Object Lock et espace disque : un
forget --prunene pose qu'un marqueur de suppression, l'espace n'est libéré qu'à la fin de la rétention. - Vérifiez vos sauvegardes :
restic checkcontrôle la structure,--read-datarelit le contenu. --dry-runtoujours : prévisualisez les suppressions avecforget --dry-runavant de les appliquer.
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »Les sources de référence pour aller au-delà de ce guide, notamment sur les backends non couverts ici et les options avancées de backup :
- Site officiel : restic.net
- Documentation : restic.readthedocs.io
- GitHub : github.com/restic/restic
- Forum : forum.restic.net