Home Tags Anciens articles Mon CV

restic : le backup pratique

Restic, backups done right

Dans le quotidien du devops, que ce soit dans un contexte de production ou non, il y a un élément critique parmi les éléments critiques : les sauvegardes. Il faut constamment en faire, les avoir à disposition, pouvoir vérifier leur intégrité, restaurer rapidement les données et enfin, y accéder facilement. C’est souvent comme cela qu’on dort le mieux (et encore mieux si la sauvegarde est dupliquée et distante).

De nombreux softwares de backup existent sur le marché, gratuits ou non, plus ou moins agiles et dotés de différentes fonctionnalités: BackupPC, VEEAM sont deux exemples populaires.

Restic est un outil de backup écrit en go, qui offre la possibilité de sauvegarder, restaurer et stocker les données en local ou distant, offrant différents backends de stockage et différents modes de transfert. J’ajouterais (mais je reviendrais dessus) que les backups sont chiffrés et compressés.

1 – Démarrage

L’installation est assez simple et bien documentée, je la passerais donc. La première étape est de créer le repository de sauvegarde. Restic met plusieurs backends à disposition, à savoir :

  • SFTP
  • S3
  • Openstack Swift
  • Microsoft Azure Blob Storage
  • Google Cloud Storage
  • Minio, REST Server, Backblaze…
  • Et évidemment, local!

Dans cet exemple, nous allons faire un backup/check/restore dans S3. Oui, j’aime et je suis toujours autant partisan d’AWS 🙂

En premier lieu, sachez que Restic récupère vos credentials AWS depuis les variables d’environnements AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Il faut donc les exporter dans notre session (il va de soit que je me sers de chaînes aléatoires pour cet exemple):

$ export AWS_ACCESS_KEY_ID=AJFHFZI488FC29
$ export AWS_SECRET_ACCESS_KEY=FfqT443cjdkslqhfiff342

Nous créons ensuite le repository :

$ restic -r s3:s3.amazonaws.com/backup-testarticle init
enter password for new repository: 
enter password again: 
created restic repository 1c43d7cf82 at s3:s3.amazonaws.com/backup-testarticle

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Il nous a demandé un mot de passe. Il s’agit de la clé de chiffrement des sauvegardes ainsi que du mot de passe d’accès au repository. Je ne vais pas traduire mot à mot, mais en gros si vous le perdez, vous perdez l’accès à vos backups.

Le nom de notre bucket est donc backup-testarticle :

Notre bucket dans S3

Tout est prêt.

2 – Backup

Nous allons prendre le répertoire suivant pour nos tests:

Il contient 3 répertoires contenant chacun un fichier vide.

Sauvegardons ce répertoire dans notre bucket via restic:

$ restic -r s3:s3.amazonaws.com/backup-testarticle --verbose backup test/
open repository
enter password for repository: 
repository 1c43d7cf opened successfully, password is correct
created new cache in /home/kharec/.cache/restic
lock repository
load index files
start scan on [test/]
start backup on [test/]
scan finished in 1.266s: 3 files, 0 B

Files:           3 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 379 B

processed 3 files, 0 B in 0:02
snapshot 4dbf2acb saved

OK ! Nous pouvons vérifier et lister les backups via :

$ restic -r s3:s3.amazonaws.com/backup-testarticle snapshots             
enter password for repository: 
repository 1c43d7cf opened successfully, password is correct
ID        Time                 Host        Tags        Paths
-------------------------------------------------------------------------------
4dbf2acb  2019-05-02 13:40:38  matty                   /home/kharec/Bureau/test
-------------------------------------------------------------------------------
1 snapshots

Et dans notre bucket:

Un repository Restic

Il est à noter que les fichiers ne sont pas en clair dans le repository, vous ne trouverez que des morceaux de données illisibles. Pourtant, vos données sont bien ici, nous le verrons après.

Afin d’être totalement serein avant le test classique de destruction/restauration, nous allons vérifier l’intégrité du snapshot :

$ restic -r s3:s3.amazonaws.com/backup-testarticle check    
using temporary cache in /tmp/restic-check-cache-575861266
enter password for repository: 
repository 1c43d7cf opened successfully, password is correct
created new cache in /tmp/restic-check-cache-575861266
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
no errors were found

Le snapshot est intègre.

3 – Restauration (complète ou partielle)

Pour bien commencer, on détruit les données en local:

$ rm -rf test/*
zsh: sure you want to delete all 3 files in /home/kharec/Bureau/test [yn]? y
$ ls test
$ 

Voici comment effectuer une restauration complète depuis notre repository :

$ restic -r s3:s3.amazonaws.com/backup-testarticle restore 4dbf2acb --target restauration
enter password for repository: 
repository 1c43d7cf opened successfully, password is correct
restoring <Snapshot 4dbf2acb of [/home/kharec/Bureau/test] at 2019-05-02 13:40:38.356999657 +0200 CEST by kharec@matty> to restauration

Il est à noter que 4dbf2acb est l’id du snapshot, restauration quant à lui est le répertoire au sein duquel nos données vont être restaurées.

$ ls -R restauration 
restauration:
test

restauration/test:
rep1  rep2  rep3

restauration/test/rep1:
fic2

restauration/test/rep2:
fic3

restauration/test/rep3:
fic2

Si on avait voulu faire une restauration partielle, Restic offre un mécanisme de « montage » d’un repository de sauvegarde. C’est à dire que l’on va monter le dossier, Restic va décrypter les données pour le temps du montage, et nous allons pouvoir le parcourir comme un dossier en local. Voici la commande :

$ restic -r s3:s3.amazonaws.com/backup-testarticle mount mount_point                     
enter password for repository: 
repository 1c43d7cf opened successfully, password is correct
Now serving the repository at mount_point
Don't forget to umount after quitting!

Dans notre répertoire _mountpoint sur notre système local :

Le répertoire contient les snapshots par date ou id.

N’oubliez pas de démonter le volume après utilisation.

4 – Purge des anciens snapshots

Enfin, Restic propose une fonction pour supprimer les anciens snapshots. Je rappelle que l’id de notre snapshot est :

ID        Time                 Host        Tags        Paths
-------------------------------------------------------------------------------
4dbf2acb  2019-05-02 13:40:38  matty                   /home/kharec/Bureau/test
-------------------------------------------------------------------------------

Voici comment le supprimer :

$ restic -r s3:s3.amazonaws.com/backup-testarticle forget 4dbf2acb
enter password for repository: 
repository 1c43d7cf opened successfully, password is correct
removed snapshot 4dbf2acb
5 – Conclusion

Voilà, j’espère que j’aurais pu vous convaincre de tester ce soft, simple et efficace, si ce n’est de l’utiliser en production.

Pour ma part, je m’en vais refaire mon système de sauvegarde avec 😉