{{tag>réseau internet cloud sauvegarde}}
{{ :logo:restic.png?130|Logo de Restic}}
====== Restic ======
**[[https://github.com/restic/restic|Restic]]** est un logiciel libre de [[:sauvegarde]] qui offre toutes les fonctionnalités qu'on attend d'un logiciel de sauvegarde moderne : incrémentation((la [[wpfr>Sauvegarde_(informatique)#Sauvegarde_incrémentielle_ou_incrémentale|sauvegarde incrémentielle]] permet de conserver les anciennes versions des fichiers sauvegardées, sans nécessiter de téléverser de nouveau les fichiers inchangés)), chiffrement((le chiffrement empêche tout tiers d'accéder à vos données, y compris le propriétaire de la solution de stockage)), compression, déduplication((la compression et la déduplication accélèrent les transferts et permettent aux sauvegardes d'occuper un minimum d'espace)), etc.
Il permet de sauvegarder sur :
* un système de fichiers local
* [[:ssh#monter_un_repertoire_distant_navigation_via_sftp_secure_file_transfer_protocol|SFTP]] ([[:SSH]])
* [[https://github.com/restic/rest-server|serveur HTTP REST]]
* OpenStack Swift
* Amazon S3
* BackBlaze B2
* Microsoft Azure Blob Storage
* Google Cloud Storage
* ... et surtout sur tout ce que supporte [[:Rclone]], ce qui le rend compatible avec à peu près [[https://github.com/rclone/rclone#storage-providers|tout ce qui existe]] en terme de stockage, local ou distant, avec les meilleures performances possibles dans chaque situation :
* [[:Samba|SMB / CIFS]] (partages locaux, Windows, Linux ou MacOS)
* [[:WebDAV]]
* [[:FTP]]
* [[:Nextcloud]], [[:ownCloud]]
* [[https://www.seafile.com|Seafile]]
* OVH
* Synology C2 Object Storage
* Dropbox
* Proton Drive
* Internet Archive
* put.io
* etc.
Il s'utilise initialement en ligne de commande mais il existe diverses [[#interfaces graphiques]].
Il est relativement proche de [[:borgbackup|Borg Backup]] d'un point de vue utilisation et performances, mais ne nécessite aucun logiciel côté dépôt (serveur), ce qui le rend particulièrement versatile. Il utilise aussi son propre format de fichier ce qui a l'inconvénient de ne pas rendre les fichiers stockés dans les dépôts accessibles avec n'importe quel outil, mais qui a aussi et surtout l'avantage de permettre le chiffrement, la compression, la déduplication, et la sauvegarde des permissions et dates des fichiers quel que soit le système de fichier sous-jacent ou le protocole d'échange utilisé.
Ni **restic**, ni **Restic Browser** ne sont malheureusement traduits en français pour le moment. Il est donc compliqué de les utiliser sans maîtriser un minimum l'anglais. N'hésitez pas à demander de l'aide sur le [[https://forum.ubuntu-fr.org|forum]] si besoin !
===== Installation =====
**Restic** est disponible dans les [[:depots#dépôts officiels]] d'Ubuntu.\\
Pour l'installer il suffit donc d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>restic]].**
==== Dernière version ====
Une fois installé, on peut mettre à jour le logiciel à sa dernière version stable très simplement grâce à la commande ''[[https://restic.readthedocs.io/en/stable/020_installation.html#packages|self-update]]'' :
sudo restic self-update
===== Utilisation =====
**Restic** ne s'utilise qu'en ligne de commande, et ne propose pas directement de configuration.\\
On peut tout de même automatiser son utilisation en configurant des tâches [[:systemd]] ou [[:cron]]\\
Il existe aussi de nombreux //[[#wrappers]]// qui permettent d'étendre les fonctionnalités de **restic**, par exemple justement en implémentant des fichiers de configuration pour faciliter son utilisation et automatiser les sauvegardes.
Dans le cadre de l'utilisation native de **restic**, on peut afficher la liste des commandes disponibles en tapant simplement ''restic'' dans un [[:terminal]].
**Restic** permet de réaliser toutes sortes d'opérations mais on utilisera principalement ''init'' la première configuration, puis régulièrement la commande ''backup'' pour déclencher les sauvegardes (ou instantanés / //snapshots//).
Le paramètre ''-r'' (ou ''%%--%%repo'' en version longue) est très important : il permet de spécifier le dépôt (//**R**epository// en anglais) sur lequel on souhaite travailler.
Voir aussi **//(en)//** [[https://restic.readthedocs.io/|le guide d'utilisation]], avec des instructions détaillées pour chaque fournisseur.
==== Initialisation ====
Pour commencer à utiliser **restic** il faut en premier lieu initialiser un dépôt avec la commande ''[[https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html|restic init]]''. C'est sur celui-ci qu'on effectuera les sauvegardes. Sur le dépôts les sauvegardes sont organisées par [[:chemins|chemin]] local (celui des données qu'on sauvegarde, sur la machine locale) et nom d'hôte (le nom de la machine locale). On peut donc sauvegarder plusieurs fois un chemin similaire depuis différentes machines sur un même dépôt sans risque de tout mélanger.
Entrez la commande suivante dans un [[:terminal]] :
restic -r sftp:serveur:/chemin/restic-repo init
Adaptez ''sftp:serveur:/chemin/restic-repo'' selon votre solution de stockage distant :
''sftp:'' selon le protocole choisi, ou ''rclone:'' pour un dépôt [[:rclone]], puis ''serveur:'' pour le nom d'hôte.
==== Sauvegarde ====
C'est la commande ''[[https://restic.readthedocs.io/en/stable/040_backup.html|restic backup]]'' qui permet de délencher une sauvegarde.
En ligne de commande, **restic** s'utilise un peu comme [[:rsync]] ou [[:rClone]].
restic -r sftp:serveur:/chemin/restic-repo backup /chemin
Commande à adapter comme ''init'' précédemment :
* ''-r'' pour spécifier le dépôt sur lequel on souhaite travailler.
* Le ''/chemin'' est celui du répertoire à sauvegarder.
* On peut utiliser l'option ''[[https://restic.readthedocs.io/en/stable/040_backup.html#excluding-files|--exclude]]'' pour exclure certains fichiers ou répertoires
* et l'option ''[[https://restic.readthedocs.io/en/stable/040_backup.html#dry-runs|--dry-run]]'' pour lancer un test sans effectuer réellement la sauvegarde.
La première fois qu'on lance cette commande, l'intégralité des données et compressée et sauvegardée. Par la suite avec la même commande on ne transfère que les données qui ont été modifiées, c'est donc beaucoup plus rapide.
==== Explorer les sauvegardes ====
La commande ''[[https://restic.readthedocs.io/en/stable/045_working_with_repos.html#listing-all-snapshots|snapshots]]'' permet de lister les instantanés :
restic -r sftp:serveur:/chemin/restic-repo snapshots
Cette commande retourne un tableau dont la première colonne affiche l'**identifiant** de chaque instantané.
On peut explorer les sauvegardes avec une [[#interfaces graphiques|interface graphique]] telle que [[https://github.com/emuell/restic-browser|Restic Browser]], ou avec la commande ''[[:tutoriel:console_ligne_de_commande#ls]]'' qu'implémente **restic** :
restic -r sftp:serveur:/chemin/restic-repo ls latest /
* On peut remplacer le mot clé ''latest'' (pour explorer le dernier instantané) par un identifiant récupéré grâce à la commande ''[[https://restic.readthedocs.io/en/stable/045_working_with_repos.html#listing-all-snapshots|snapshots]]'' précédente.
* ''/'' est le répertoire qu'on souhaite lister, ici la racine de cette sauvegarde. Ne pas indiquer de chemin permet de lister l'intégralité des fichiers sauvegardés où qu'ils se trouvent dans cet instantané.
À partir de la version **0.17** il est possible d'utiliser la commande ''[[:analyseur_usage_espace_disque#ncdu]]'' (après avoir [[:tutoriel:comment_installer_un_paquet|installé localement le paquet]] ''[[apt>ncdu]]'') pour explorer l'espace occupé par chaque répertoire dans un instantané :
restic -r sftp:serveur:/chemin/restic-repo ls latest --ncdu | ncdu -f -
==== Restauration ====
La commande ''[[https://restic.readthedocs.io/en/stable/050_restore.html|restic restore]]'' permet de restaurer n'importe quel instantané précis.
restic -r sftp:serveur:/chemin/restic-repo restore identifiant_instantané --target /chemin
* L%%'%%''identifiant_instantané'' est un numéro à 8 chiffres hexadécimaux, récupéré en listant les sauvegardes avec la commande ''[[https://restic.readthedocs.io/en/stable/045_working_with_repos.html#listing-all-snapshots|snapshots]]'' (voir chapitre précédent).
* Le ''/chemin'' n'est ici pas celui du contenu sauvegardé, mais celui vers lequel on veut restaurer la sauvegarde.
On peut ainsi restaurer n'importe quelle sauvegarde à l'emplacement de son choix.
===== Interfaces graphiques =====
Il existe de nombreuses interfaces graphiques permettant d'utiliser et d'explorer facilement les dépôts **restic** ;
* [[https://github.com/emuell/restic-browser|Restic Browser]] (GTK) permet d'explorer et de restaurer les instantanés, ou de télécharger indépendamment les répertoires et fichiers qui s'y trouvent.
* [[https://github.com/ad-on-is/resticity|Resticity]] est disponible en [[:Flatpak]] sur [[https://github.com/ad-on-is/resticity/releases|GitHub]]. Plus complet il permet en plus d'effectuer des sauvegardes, et de les programmer.
* [[https://github.com/netinvent/npbackup|NetPerfect Backup]] (version [[https://github.com/netinvent/npbackup/releases|npbackup-gui]]) est une interface [[:Python]] très complète.
* [[https://github.com/GPh83/resticterm|resticterm]] : une interface graphique en [[:terminal]] (particulièrement pratique pour les serveurs ou les machines distantes).
* [[https://github.com/swampapp/swamp|Swamp]] (GTK) : particulièrement bien intégré à [[:GNOME]] mais semble abandonné.
* [[https://github.com/garethgeorge/backrest|Backrest]] est une application [[:web]] très complète, qui permet d'automatiser les sauvegardes, gérer dépôts, instantanés et fichiers sauvegardés, etc. depuis un [[:navigateur]] (donc aussi particulièrement pratique pour les serveurs ou les machines distantes). Son installation peut s'avérer technique, c'est pourquoi il est recommandé d'utiliser l'image [[:docker]].
Voir [[https://github.com/rubiojr/awesome-restic?tab=readme-ov-file#apps|cette liste]] plus complète.
===== Wrappers =====
Les //wrappers//((pas de traduction tangible en français... emballage ?)) permettent d'étendre les fonctionnalités de **restic** en l'utilisant comme "moteur" sous-jacent plus ou moins visible.
* C'est le cas de **[[:deja-dup|Déjà Dup]]**, installé par défaut sur Ubuntu, dont les toutes dernières versions permettent de reposer sur **restic** plutôt que sur [[:Duplicity]], mais ceci reste très transparent pour l'utilisateur.
* **[[https://github.com/creativeprojects/resticprofile|Resticprofile]]** complète **restic** à la perfection, en implémentant un [[https://creativeprojects.github.io/resticprofile/configuration/index.html|fichier de configuration]] pour faciliter l'usage de la ligne de commande avec **restic**. Il permet aussi de [[https://creativeprojects.github.io/resticprofile/schedules/index.html|programmer]] très facilement des sauvegardes récurrentes aux moments de son choix (en utilisant [[:systemd]] en arrière-plan, ou [[:cron]] dans le cas étonnant ou celui-ci ne serait pas disponible). Sa [[https://creativeprojects.github.io/resticprofile/index.html|documentation]] n'existe malheureusement aussi qu'en anglais.
* **[[https://github.com/cupcakearmy/autorestic|Autorestic]]** propose à peu près les mêmes fonctionnalités que **resticprofile**, mais sans faciliter l'usage de **restic** en ligne de commande. Il ne fonctionne que de manière déclarative - par l'usage de fichiers de configuration, de manière un peu plus directive (avoir moins de choix à disposition peut aussi permettre de simplifier la [[https://autorestic.vercel.app|documentation]]). Il facilite si besoin la gestion de dépôts multiples (par ex. pour sauvegarder sur un disque dur en même temps que sur le [[:cloud]]).
Voir aussi [[https://github.com/rubiojr/awesome-restic?tab=readme-ov-file#wrappers|cette liste]] plus complète.
===== Voir aussi =====
* **//(en)//** [[https://github.com/restic/restic|sources et site officiel]]
* **//(en)//** [[https://restic.readthedocs.io/en/stable/|documentation]]
----
//Contributeur : [[:utilisateurs:krodelabestiole]]//