{{tag>sysadmin sauvegarde backup}}
====== Sauvegarder avec restic ======
**restic** un programme en ligne de commande permettant de sauvegarder ses données.
Principales caractéristiques de **restic** :
* **Agnostique** : il existe sur les principaux systèmes d'exploitation : Linux, BSD, Mac et Windows ;
* **Flexible** : il s'interface avec de nombreux systèmes de stockage auto-hébergés ou via les services en ligne ;
* **Simple** : exécutable autonome sans dépendances de services ou de serveurs ;
* **Efficace** : transfère uniquement les modifications ;
* **Sécurisé** : intègre le chiffrement de bout en bout ;
* **Auditable** : permet de vérifier que les fichiers seront restaurables au besoin ;
* Open source et libre d'accès.
===== Démarrage rapide =====
Dans cet exemple, pour se familiariser avec les principales commandes, on utilise un dépôt local.
restic intègre une aide en ligne :
restic help
==== Initialiser un dépôt ====
restic conserve les sauvegardes au sein d'un dépôt. On commence donc par en créer un via la commande ''init''.
restic --repo /home/yoann/backups/restic-repo init
A la création du dépôt un mot de passe est demandé. Ce mot de passe est important, il sera nécessaire pour toute interaction avec le dépôt.
Pour ne pas avoir à systématiquement préciser le dépôt à utiliser via l'argument ''%%--repo%%'', on pourra définir une variable d'environnement :
export RESTIC_REPOSITORY=/home/yoann/backups/restic-repo/
# Pour éviter de ressaisir le mot de passe
export RESTIC_PASSWORD=MyVeryGooooodPassWord
==== Sauvegarder ====
On peut à présent créer sa première sauvegarde :
restic backup ~/Documents
restic désigne par "snapshots" vos sauvegardes. Pour lister les snapshots présents dans le dépôt :
restic snapshots
Certaines commandes peuvent être exécutés "à blanc" via l'option ''%%--dry-run%%''. C'est le cas pour la sauvegarde.
On ajoute un nouveau fichier au dossier ''~/Documents'', puis on simule une sauvegarde (avec l' option ''%%--dry-run%%'')
echo "Hello World!" > ~/Documents/aNewFile.txt
# test la commande de sauvegarde
restic backup ~/Documents/ --dry-run
restic détecte bien le nouveau fichier et indique que seulement celui-ci sera copié. On peut effectivement exécuter la sauvegarde :
restic backup ~/Documents
==== Lister/rechercher dans le dépot ====
Pour lister l'ensemble des fichiers présents dans le snapshot le plus récent :
restic ls latest
Pour ne lister que le contenu d'un sous-dossier :
restic ls latest /home/yoann/Documents/factures
Pour rechercher un fichier dans les sauvegardes :
restic find "wishlist*"
# rechercher uniquement dans le dernier snapshot
resstic find "wishlist*" latest
# rechercher uniquement dans les snapshot désignés
restic find "wishlist*" 5e1ea3aa 4d22f100
La recherche est sensible à la casse de caractères mais on peut utiliser l'option ''%%--ignore-case%%'' pour changer ce comportement par défaut.
restic find --ignore-case "contrat*" latest
==== Restaurer ====
Par défaut la restauration reconstruit le chemin complet dans le répertoire de destination (cible) :
# le fichier et les dossiers parents sont recréés sur la destination (target)
restic restore latest --include /home/yoann/Documents/wishlist.txt --target /tmp
Dans le cas présenté ci-dessus le dossier ''/tmp'' contiendra après exécution de la restauration ''/tmp/home/yoann/Documents/wishlist.txt''.
Si l'on souhaite restaurer le fichier à son emplacement initial, on peut saisir :
restic restore latest --include /home/yoann/Documents/wishlist.txt --target /
Pour ne pas reconstruire l'ensemble de l’arborescence et restaurer seulement le fichier souhaité dans un répertoire cible différent, on peut utiliser la syntaxe :
restic restore latest:/home/yoann/Documents/ --include "wishlist.txt" --target /tmp
De la même manière, pour restaurer le dossier ''/home/yoann/Documents/factures'' et son contenu dans le répertoire cible ''/tmp'' sans recréer toute l'arborescence :
restic restore latest:/home/yoann/Documents --include factures --target /tmp/
Pour restaurer le dernier snapshot :
restic restore latest --target /
==== Supprimer un snapshot ====
La suppression s'effectue en deux temps via les commandes ''forget'' puis ''prune''.
* La commande forget supprime les références vers les données mais pas les données-elles même qui restent dans le dépôt. Cette opération est rapide.
* L'opération prune conduit à la suppression des données non référencées présentes dans le dépôt et la la libération de l'espace disque. Cette opération est plus longue et pendant qu'elle s'effectue, le dépôt n'est pas accessible.
''forget'' et ''prune'' ont également une option d'exécution à blanc via l'argument ''%%--dry-run%%''
restic forget latest --dry-run
restic forget latest
restic prune --dry-run
Après la commande ''prune'' on peut vouloir vérifier l'intégrité du dépôt.
==== Maintenance du dépôt ====
Il est recommandé de vérifier périodiquement l'état du dépôt :
restic check
restic check --read-data
===== Références =====
* https://restic.net/
* https://restic.readthedocs.io/en/stable/