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):

Nous créons ensuite le repository :

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:

Sauvegardons ce répertoire dans notre bucket via restic:

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

Et dans notre bucket:

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 :

Le snapshot est intègre.

3 – Restauration (complète ou partielle)

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

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

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.

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 :

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

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 :

Voici comment le supprimer :

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 😉