Restic - Présentation, installation et commandes de base
Présentation
Restic est un outil de sauvegarde/restauration proposant les fonctionnalités suivantes:
- Il fonctionne sur Linux, BSD, Mac et Windows;
- Peut utiliser différents type de supports de stockage (principalement de type “cloud”);
- Applique un chiffrement par cryptographie symétrique sur les données sauvegardées;
- Déduplique les données sauvegardées pour limiter l’espace disque utilisé;
- Facile à déployer (un simple binaire à copier);
- Est entièrement libre (les sources sont publiées sous licence “BSD 2-Clause “Simplified”).
Installation
L’installation est simple. Développé en Go, Restic se présente sous la forme d’un binaire compilé statiquement et n’a donc pas de dépendances particulière sur la machine cible.
L’installation peut se faire de la manière suivante:
-
Télécharger la version v0.13.0 de restic pour GNU/Linux, architecture amd64
wget https://github.com/restic/restic/releases/download/v0.13.0/restic_0.13.0_linux_amd64.bz2
Les liens de téléchargement des autres systèmes d’exploitation/architectures sont disponibles sur la page Release du projet.
-
Vérifier l’empreinte du fichier téléchargé
echo '514d0711317427f45d3ca23e66cf66e9f98caef660314d843f59b38511e94a2c restic_0.13.0_linux_amd64.bz2' | sha256sum -c
Vous trouverez l’empreinte de vérification dans le fichier
SHA256SUMS
présent sur la page des releases.Vous devriez avoir un résultat du type:
restic_0.13.0_linux_amd64.bz2: OK
-
Extraire le binaire et le déplacer dans le répertoire
/usr/local/bin
# Extraire les fichiers de l'archive bzip2 -d restic_0.13.0_linux_amd64.bz2 # Déplacer le binaire dans le répertoire des exécutables locaux mv restic_0.13.0_linux_amd64 /usr/local/bin/restic # Rendre exécutable le binaire chmod +x /usr/local/bin/restic
Si tout s’est bien passé, vous devriez désormais avoir le résultat suivant en entrant la commande restic
dans votre terminal:
root@3e1519a8ffcd:/# restic
restic is a backup program which allows saving multiple revisions of files and
directories in an encrypted repository stored on different backends.
Usage:
restic [command]
[...]
Commandes de base
Créer un dépôt
Restic organise les sauvegardes sous la forme de dépôts (“repositories”). Un dépôt peut être local ou plus généralement distant (notamment via les très nombreux supports de stockage disponibles via rclone
).
-
Initialiser un dépôt local
# Création du répertoire qui va accueillir le dépôt restic mkdir my-backup-repo # Initialisation du dépôt restic init --repo ./my-backup-repo
Exemple de sortie
root@3e1519a8ffcd:/: restic init --repo ./my-backup-repo enter password for new repository: enter password again: created restic repository e40061e5ad at ./my-backup-repo Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.
Le mot de passe définit ici est à conserver de manière pérenne. Sans celui ci les données sauvegardées seront irrémédiablement irrécupérables !
-
Vérifier que le dépôt est correctement initialisé en affichant les stats de celui ci:
restic stats -r ./my-backup-repo
Exemple de sortie
root@3e1519a8ffcd:/: restic stats -r ./my-backup-repo enter password for repository: repository e40061e5 opened successfully, password is correct scanning... Stats in restore-size mode: Snapshots processed: 0 Total Size: 0 B
Aucune donnée présente dans le dépôt. Nous sommes parés à faire une première sauvegarde !
Plus de détails sur la documentation officielle.
Créer une sauvegarde
Dans Restic, chaque sauvegarde va créer un nouveau cliché (“snapshot”) du ou des fichiers sauvegardés.
-
Générer un nouvelle sauvegarde d’un répertoire, ici le répertoire de configuration
/etc
dans notre dépôt préalablement créérestic backup -r ./my-backup-repo /etc
Exemple de sortie
root@3e1519a8ffcd:/: restic backup -r ./my-backup-repo /etc enter password for repository: repository e40061e5 opened successfully, password is correct no parent snapshot found, will read all files Files: 118 new, 0 changed, 0 unmodified Dirs: 47 new, 0 changed, 0 unmodified Added to the repo: 481.148 KiB processed 118 files, 334.664 KiB in 0:00 snapshot 1e881760 saved
-
Vérifier que le cliché du répertoire à bien été pris en listant ceux ci
restic -r ./my-backup-repo snapshots
Exemple de sortie
root@3e1519a8ffcd:/# restic -r ./my-backup-repo snapshots enter password for repository: repository e40061e5 opened successfully, password is correct ID Time Host Tags Paths -------------------------------------------------------------- 1e881760 2022-03-28 11:43:19 3e1519a8ffcd /etc -------------------------------------------------------------- 1 snapshots
Vérifier la fonctionnalité de déduplication
Vous pouvez essayer d’effectuer d’autres sauvegardes du répertoire
/etc
et relancer la commanderestic stats
. En l’absence de modifications dans le répertoire, la taille du dépôt ne devrait pas augmenter (mis à part potentiellement les quelques métadonnées associées au cliché).
Comment passer le mot de passe dans une sauvegarde automatique ?
Si on souhaite effectuer une sauvegarde en mode non interactif (dans une tâche programmée par exemple) il est possible de passer le mot de passe de chiffrement via la variable d’environnement
RESTIC_PASSWORD
.Plus d’informations sur la documentation officielle
Vérifier l’état des sauvegardes
Il est toujours important de s’assurer qu’une sauvegarde n’est pas corrompue et qu’elle pourra être restaurée.
Restic intègre une commande permettant de s’assurer que le dépôt est dans un état cohérent et que les clichés pourront être utilisé pour une restauration.
Ceci ne vous protège bien entendu pas contre les problèmes liés à l’état initial des données sauvegardées !
-
Vérifier la cohérence du dépôt
restic -r ./my-backup-repo check
Exemple de sortie
root@3e1519a8ffcd:/# restic -r ./my-backup-repo check using temporary cache in /tmp/restic-check-cache-2387724536 enter password for repository: repository e40061e5 opened successfully, password is correct created new cache in /tmp/restic-check-cache-2387724536 create exclusive lock for repository load indexes check all packs check snapshots, trees and blobs [0:00] 100.00% 1 / 1 snapshots... no errors were found
À titre d’exercice, nous pouvons essayer de corrompre arbitrairement des données du dépôt de sauvegarde pour tester la détection des incohérences.
-
On corrompt volontairement les clichés de notre dépôt
echo 'CORRUPT' > ./my-backup-repo/snapshots/*
-
On vérifie à nouveau l’état du dépôt
restic -r ./my-backup-repo check
Exemple de sortie
root@3e1519a8ffcd:/: restic -r ./my-backup-repo check using temporary cache in /tmp/restic-check-cache-1531687926 enter password for repository: repository e40061e5 opened successfully, password is correct created new cache in /tmp/restic-check-cache-1531687926 create exclusive lock for repository load indexes check all packs check snapshots, trees and blobs [0:00] 0 snapshots... error: load <snapshot/1e881760bd>: invalid data returned Fatal: repository contains errors
Restic détecte bien une erreur dans le cliché
1e881760bd
! -
Oublions définitivement ce cliché désormais défectueux
restic -r ./my-backup-repo forget 1e881760bd # Profitons en pour refaire une nouvelle sauvegarde ! restic -r ./my-backup-repo backup /etc
Lister les fichiers présents dans un cliché
Une fois l’identifiant du cliché ciblé retrouvé (via la commande restic snapshots
), lancer la commande suivante:
restic -r ./my-backup-repo ls 3c3f71d3 /etc/host*
Où 3c3f71d3
correspond ici à l’identifiant de mon cliché dans mon dépôt et /etc/host*
est un filtre de recherche des fichiers dans le cliché.
Exemple de sortie
root@3e1519a8ffcd:/: restic -r ./my-backup-repo ls 3c3f71d3 /etc/host*
enter password for repository:
repository e40061e5 opened successfully, password is correct
snapshot 3c3f71d3 of [/etc] filtered by [/etc/host.conf /etc/hostname /etc/hosts] at 2022-03-28 12:19:05.791008077 +0000 UTC):
/etc/host.conf
/etc/hostname
/etc/hosts
Afficher le contenu d’un fichier à partir d’un cliché
Il est très simple d’afficher l’état d’un fichier présent dans un cliché. Par exemple, pour afficher le contenu du fichier /etc/hosts
de mon cliché 3c3f71d3
:
restic -r ./my-backup-repo dump 3c3f71d3 /etc/hosts
Exemple de sortie
root@3e1519a8ffcd:/: restic -r ./my-backup-repo dump 3c3f71d3 /etc/hosts
enter password for repository:
repository e40061e5 opened successfully, password is correct
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 3e1519a8ffcd
Restaurer un ou plusieurs fichiers depuis une sauvegarde
La restauration des fichiers à partir d’un cliché s’effectue de la même manière que l’affichage du contenu d’un seul fichier. Pour ce faire, il nous faut d’abord récupére l’identifiant du cliché à utiliser comme source de restauration, puis
restic -r ./my-backup-repo restore 85e784e9 --verify --target ./etc-backup
Où 85e784e9
est l’identifiant de mon cliché sélectionné comme source de restauration et /etc-backup
le répertoire de destination de la restauration (le répertoire sera créé si il n’existe pas déjà).
Le drapeau --verify
est utilisé pour indiquer à Restic qu’il doit vérifier l’état des fichiers au moment de la restauration et nous indiquer les potentielles erreurs liées à celle ci.
Exemple de sortie
root@529d3c3ee8b9:/: restic -r ./my-backup-repo restore 85e784e9 --verify --target ./etc-backup
enter password for repository:
repository c2ac1647 opened successfully, password is correct
restoring <Snapshot 85e784e9 of [/etc] at 2022-03-28 19:47:20.783353984 +0000 UTC by root@529d3c3ee8b9> to ./etc-backup
verifying files in ./etc-backup
finished verifying 118 files in ./etc-backup (took 33ms)
Il est bien entendu possible de restaurer directement notre sauvegarde dans le répertoire d’origine /etc
, auquel cas nous aurons une sortie équivalente à:
root@529d3c3ee8b9:/: restic -r ./my-backup-repo restore 85e784e9 --verify --target /etc
enter password for repository:
repository c2ac1647 opened successfully, password is correct
restoring <Snapshot 85e784e9 of [/etc] at 2022-03-28 19:47:20.783353984 +0000 UTC by root@529d3c3ee8b9> to /etc
verifying files in /etc
finished verifying 118 files in /etc (took 37ms)
Enfin, nous pouvons également filtrer les fichiers à restaurer via l’utilisation du drapeau --include
. Par exemple pour restaurer uniquement le fichier /etc/hosts
:
root@529d3c3ee8b9:/: restic -r ./my-backup-repo restore 85e784e9 --verify --target /etc --include /etc/hosts
enter password for repository:
repository c2ac1647 opened successfully, password is correct
restoring <Snapshot 85e784e9 of [/etc] at 2022-03-28 19:47:20.783353984 +0000 UTC by root@529d3c3ee8b9> to /etc
verifying files in /etc
finished verifying 1 files in /etc (took 7ms)
Il est même possible de spécifier plusieurs fois le drapeau --include
afin de restaurer une liste de fichiers/répertoires à restaurer.