--- title: restic created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, backups, deduplication, encryption, cloud, s3, b2, sftp, s3, restic, snapshot, incremental, versionning, cli, docker, go] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Backups, https://github.com/restic/restic] --- # đŸ’Ÿ restic > **Le standard de facto des backups chiffrĂ©s et dĂ©dupliquĂ©s en ligne de commande** : rapide, sĂ©curisĂ©, multi-backend, et son format de repo ouvert a inspirĂ© toute une gĂ©nĂ©ration d'outils. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | [restic.net](https://restic.net) | | **GitHub** | [restic/restic](https://github.com/restic/restic) | | **License** | BSD-2-Clause | | **Langage** | Go | | **Étoiles GitHub** | 33,9k ⭐ | | **DerniĂšre MAJ** | 2026-06-05 | | **CatĂ©gorie** | [[cat-backups|Backups]] | ## 📝 Description **restic** est un programme de sauvegarde **open source**, Ă©crit en Go, conçu dĂšs l'origine pour ĂȘtre Ă  la fois **rapide**, **sĂ©curisĂ©** et **efficace**. Son auteur, Alexander Neumann, a voulu rĂ©soudre les trois dĂ©fauts majeurs des outils traditionnels (`tar`, `rsync`) : pas de chiffrement natif, pas de dĂ©duplication, et des restaurations complexes. Le secret de restic tient Ă  son architecture en **content-addressed storage** : chaque fichier sauvegardĂ© est dĂ©coupĂ© en **blobs** dĂ©coupĂ©s selon un algorithme CDC (Content-Defined Chunking, *buzhash* par dĂ©faut), puis chaque blob est identifiĂ© par son **hash SHA-256**. Deux fichiers identiques, ou deux versions d'un mĂȘme fichier qui partagent ne serait-ce qu'un seul bloc, ne stockent physiquement qu'**une seule copie** du blob en question. Le rĂ©sultat est une dĂ©duplication **transversale** (entre snapshots) extrĂȘmement efficace, particuliĂšrement sur les workloads de photos, bases de donnĂ©es ou arborescences de code source. CĂŽtĂ© sĂ©curitĂ©, **toutes les donnĂ©es sont chiffrĂ©es cĂŽtĂ© client** avec **AES-256-CTR** (mode *ctr*) avant d'ĂȘtre envoyĂ©es au backend. L'authentification et l'intĂ©gritĂ© reposent sur le hash **SHA-256** des chunks et une **authentification polynomiale** (Poly1305-AES) par fichier. Sans le **mot de passe du repository** (et Ă©ventuellement le *keyfile* ou les *key files* ajoutĂ©s Ă  un repo), les blobs sont mathĂ©matiquement irrĂ©cupĂ©rables. C'est une propriĂ©tĂ© essentielle : mĂȘme le fournisseur de stockage (S3, B2, SFTP
) n'a aucun accĂšs au contenu. restic supporte nativement une quantitĂ© impressionnante de **backends** : `local`, `sftp`, `s3` (et donc AWS S3, MinIO, Wasabi, Backblaze B2, Scaleway, OVH, etc.), `b2` (API native Backblaze B2), `azure`, `gs` (Google Cloud Storage), `rclone` (et donc tout ce que rclone supporte : WebDAV, S3-compatible, Google Drive, OneDrive, etc.), `rest` (son propre serveur HTTP), et mĂȘme un mode `stdio` pour les pipes. Cette polyvalence explique pourquoi il est devenu **le** backend d'orchestrateurs comme [[app-backrest]], [[app-kopia]] (en mode repo), ou des solutions SaaS comme [[app-borgbase]] (qui hĂ©berge des repos restic et Borg clĂ©-en-main). ComparĂ© Ă  ses principaux rivaux : - **vs [[app-borg|Borg]]** : restic est plus simple Ă  mettre en place, plus rapide Ă  froid (pas de cache local obligatoire), son format est **simple et ouvert** (on peut l'inspecter avec un peu de Python), mais Borg offre historiquement une compression et une vitesse de reconstitution supĂ©rieures. Voir [[app-borg]] pour les dĂ©tails. - **vs [[app-kopia|Kopia]]** : Kopia offre une **UI desktop** et des **snapshot policies** plus riches nativement, mais restic reste plus minimaliste, plus scriptable, et dispose d'un Ă©cosystĂšme d'orchestration plus large. - **vs [[app-duplicati|Duplicati]]** : Duplicati propose une UI web prĂȘte Ă  l'emploi, mais repose sur des technologies web plus lourdes (.NET / Mono) et souffre d'une base d'utilisateurs vieillissante ; restic est le choix des sysadmins qui aiment la ligne de commande et les **formats ouverts**. **Public cible** : **intermĂ©diaire Ă  avancĂ©**. DĂ©butants motivĂ©s acceptables (un `restic init && restic backup /home` suffit pour dĂ©marrer), mais la pleine puissance (pruning, hooks, `forget --keep-*`) demande un peu de lecture. ## 🚀 Installation ### Option 1 : Docker Compose (orchestrateur gĂ©nĂ©rique) restic n'a pas besoin d'ĂȘtre servi via Docker pour fonctionner — c'est un **binaire** qu'on invoque dans des cron, des scripts ou des conteneurs *one-shot*. On le dĂ©ploie souvent via un conteneur dĂ©diĂ© qui exĂ©cute les sauvegardes. ```yaml # docker-compose.yml version: '3.8' services: restic: image: restic/restic:latest container_name: restic-backup restart: unless-stopped environment: - RESTIC_REPOSITORY=s3:s3.eu-west-3.amazonaws.com/mon-bucket-backups - AWS_ACCESS_KEY_ID=AKIAxxxxxxxxxxxxxxxx - AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - RESTIC_PASSWORD_FILE=/run/secrets/restic_password secrets: - restic_password volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /mnt/data:/data:ro - restic-cache:/root/.cache/restic command: > sh -c "restic snapshots && restic check" labels: - "traefik.enable=false" restic-ui: # Backrest : interface web pour piloter plusieurs repos restic image: garethgeorge/backrest:latest container_name: backrest restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - backrest-data:/data - /mnt/backups:/mnt/backups ports: - "9898:9898" environment: - BACKREST_DATA=/data labels: - "traefik.enable=true" - "traefik.http.routers.backrest.rule=Host(`backrest.example.com`)" - "traefik.http.routers.backrest.entrypoints=websecure" - "traefik.http.routers.backrest.tls.certresolver=letsencrypt" secrets: restic_password: file: ./secrets/restic_password.txt volumes: restic-cache: backrest-data: ``` ### Option 2 : Binaire natif (recommandĂ© sur l'hĂŽte) ```bash # Linux (mĂ©thode officielle) sudo apt install restic # Debian/Ubuntu sudo dnf install restic # Fedora/RHEL brew install restic # macOS # VĂ©rification de l'installation restic version # Exemple d'init d'un repo S3 export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export RESTIC_REPOSITORY=s3:s3.eu-west-3.amazonaws.com/mon-bucket export RESTIC_PASSWORD='un-trĂšs-long-mot-de-passe-gĂ©nĂ©rĂ©-avec-passphrase-generator' restic init ``` ## ⚙ Configuration Initiale 1. **Choisir et prĂ©parer le backend** : crĂ©er un bucket S3, un bucket B2, ou un rĂ©pertoire local/SFTP. RĂ©cupĂ©rer les credentials (clĂ© d'accĂšs + secret) et noter le endpoint et la rĂ©gion. Le compte de stockage utilisĂ© par restic doit avoir un **droit de lecture + Ă©criture + list** (et `DeleteObject` pour le `prune`). 2. **GĂ©nĂ©rer un mot de passe de repo fort** : `pwgen -s 64 1` ou `gpg --gen-random --armor 1 32`. **Sauvegarder ce mot de passe ailleurs** (gestionnaire de mots de passe type Bitwarden/Vaultwarden, papier dans un coffre, etc.) — c'est le **seul moyen** de restaurer. 3. **Initialiser le repo** : `restic -r s3:bucket/chemin init`. VĂ©rifier qu'un fichier `config` est bien créé cĂŽtĂ© backend. 4. **Premier backup test** : `restic -r s3:bucket/chemin backup /chemin/important`. Inspecter la sortie, vĂ©rifier qu'aucune erreur n'apparaĂźt, et lister : `restic snapshots`. 5. **Automatiser** : ajouter un cron `0 3 * * * restic backup /home /etc /var/lib --tag daily && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune`. Le `--prune` libĂšre rĂ©ellement l'espace (sans lui, les blobs orphelins restent sur le backend). 6. **Tester la restauration** : sur une machine vierge ou un dossier temporaire, `restic restore latest --target /tmp/restore` puis comparer avec un diff. Les backups non testĂ©s ne sont **pas** des backups. ## 🔄 Alternatives ### Open Source - [[app-borg]] — Plus ancien (2010), format fermĂ©, compression lz4/zstd/lzma, plus rapide sur de gros volumes locaux, mais format non interopĂ©rable. - [[app-kopia]] — UI desktop intĂ©grĂ©e, snapshot policies dĂ©claratives, support multi-cloud, format propriĂ©taire (mais ouvert en lecture). - [[app-duplicati]] — UI web clĂ© en main, multi-backend, idĂ©al pour les non-techniciens, mais projet en perte de vitesse. - [[app-backrest]] — Orchestrateur web moderne **au-dessus de restic** : si vous aimez restic mais voulez une UI. - **rclone** — Pas un backup tool, mais le backend universel ; trĂšs complĂ©mentaire de restic via `rclone:`. ### Comparaison des outils CLI / orchestrables | CritĂšre | restic | [[app-borg]] | [[app-kopia]] | [[app-duplicati]] | | :--- | :--- | :--- | :--- | :--- | | Langage | Go | Python (C ext.) | Go | C# / Mono | | DĂ©duplication | Bloc (CDC) | Bloc (fixed + variable) | Bloc (CDC) | Bloc | | Chiffrement | AES-256-CTR + Poly1305 | AES-256-OCB | AES-256-GCM | AES-256 | | Compression | Non (dĂ©libĂ©rĂ©) | lz4 / zstd / lzma | Non (dĂ©libĂ©rĂ©) | zstd | | UI native | Non (CLI pur) | Non (BorgWeb / [[app-borg-ui]]) | UI desktop | UI web | | Backends | 12+ natifs | local, ssh, sftp, rclone | local, S3, B2, GCS, Azure, SFTP | 20+ (S3, B2, GCS, SSH, WebDAV
) | | Format du repo | Ouvert, simple | Borg (spĂ©cifique) | Kopia (propriĂ©taire) | Duplicati (propriĂ©taire) | | Licence | BSD-2-Clause | BSD-3-Clause | Apache-2.0 | LGPL-2.1 | | Pruning intĂ©grĂ© | `forget --prune` | `prune` | `policy` | IntĂ©grĂ© UI | **Verdict** : restic est le **couteau suisse** des backups modernes. Si vous ĂȘtes Ă  l'aise avec la CLI et que vous voulez un **format simple, ouvert et bien outillĂ©**, c'est le choix par dĂ©faut. Pour une UI prĂȘte Ă  l'emploi, regardez [[app-kopia]] (desktop) ou [[app-backrest]] (web au-dessus de restic). ### PropriĂ©taires (ce que restic remplace) - **BorgBase** — SaaS qui hĂ©berge des repos restic/Borg. Pas propriĂ©taire du moteur, mais propriĂ©taire de l'infrastructure. - **Arq Backup** — Outil macOS/Windows propriĂ©taire, excellent pour les postes捕äșș, mais pas self-hostable. - **Backblaze Personal** — Backup cloud infini clĂ© en main, mais chiffrĂ© cĂŽtĂ© serveur (pas E2E). - **Veeam** — Standard entreprise pour VM, mais licence hors de prix pour un homelab. - **Acronis True Image** — RĂ©fĂ©rence grand public, propriĂ©taire, fermĂ©. ### Backends de stockage (cĂŽtĂ© *oĂč* on stocke) | Service | CoĂ»t (~$ / To / mois) | Hot tier | Egress | IdĂ©al pour | | :--- | :--- | :--- | :--- | :--- | | **Backblaze B2** | 6 $ | Oui | 10 $ / To | Homelab, petits volumes | | **Wasabi** | 7 $ (pas d'egress) | Oui | 0 $ | Backups volumineux, lectures frĂ©quentes | | **AWS S3 Standard** | 23 $ | Oui | 90 $ / To | Pro, intĂ©gration AWS | | **AWS S3 Glacier IR** | 3,9 $ | Oui (latence ms) | 10 $ / To | Archives consultĂ©es rarement | | **AWS S3 Glacier Deep Archive** | 0,99 $ | Non (12h) | 0,10 $ / To | Cold storage long terme | | **Scaleway Object Storage** | 7,5 $ | Oui | 0,01 € / Go | EU, souverain | | **OVH Object Storage** | 7,2 € | Oui | trafic sortant facturĂ© | EU | | **MinIO** (self-hosted) | CoĂ»t serveur | Oui | 0 $ | 100% on-prem | ## 🔐 SĂ©curitĂ© - **Chiffrement at-rest et in-transit** : AES-256-CTR + Poly1305 cĂŽtĂ© client, TLS pour le transport vers le backend. Le fournisseur de stockage ne voit jamais les donnĂ©es en clair. - **Mot de passe du repository** : c'est la **clĂ© du royaume**. Le sauvegarder dans un gestionnaire de mots de passe (Bitwarden, KeePassXC, Vaultwarden self-hosted) **hors-ligne** sur au moins deux supports distincts. **Un repo dont on a perdu le mot de passe est une poubelle chiffrĂ©e**. - **RĂšgle 3-2-1** : 3 copies des donnĂ©es, sur **2 supports diffĂ©rents**, dont **1 offsite** (ex. : home NAS + disque USB local + B2/Wasabi dans le cloud). - **Test de restauration rĂ©gulier** : programmer un job mensuel qui restaure un snapshot au hasard sur un serveur de test et vĂ©rifie son intĂ©gritĂ© (`restic check` couvre la cohĂ©rence des blobs, mais pas leur *lisibilitĂ© applicative*). - **Air-gapped backup** : un disque USB branchĂ© une fois par mois pour un backup `local`, puis dĂ©branchĂ©. C'est l'ultime dĂ©fense contre un rançongiciel qui chiffrerait aussi les partages rĂ©seau et les credentials S3. - **RĂ©tention vĂ©rifiĂ©e** : `restic check` lit **tous** les blobs et vĂ©rifie leur intĂ©gritĂ© cryptographique. À lancer au moins une fois par mois (c'est lourd en I/O, ne pas le faire pendant la fenĂȘtre de backup). ## 📚 Ressources - [Site officiel restic.net](https://restic.net) - [Documentation officielle](https://restic.readthedocs.io/) - [GitHub restic/restic](https://github.com/restic/restic) - [Forum communautaire](https://forum.restic.net/) - [Design principles (lecture recommandĂ©e)](https://restic.readthedocs.io/en/latest/080_design.html) ## Pages LiĂ©es - [[cat-backups]] — CatĂ©gorie Backups - [[strategie-backup-321]] — La rĂšgle 3-2-1 expliquĂ©e - [[app-borg]] — Concurrent historique, format fermĂ© - [[app-kopia]] — Concurrent avec UI desktop - [[app-duplicati]] — Concurrent avec UI web - [[app-backrest]] — UI web moderne *au-dessus* de restic - [[app-borg-ui]] — UI web pour Borg - [[app-portainer]] — Pour visualiser les conteneurs qui tournent - [[app-traefik]] — Reverse-proxy pour exposer l'UI Backrest - [[securisation-home-lab]] — Bonnes pratiques de sĂ©curitĂ© - [[glossaire-homelab]] — DĂ©finitions (CAS, S3, B2, etc.)