Restic est un projet Open Source qui a débuté en 2014 sous licence BSD.
Le projet Restic
Restic est une solution de sauvegarde qui se base sur les principes suivants :
- La déduplication à la source doit être optimisable entre plusieurs serveurs source et de disposer d’un référentiel commun entre toutes les sauvegardes.
- L’architecture doit pouvoir supporter des destinations de sauvegarde de technologie différentes : stockage Cloud (S3, Blob Azure, …), SFTP, NAS local, …
- Il doit être possible de naviguer simplement dans une sauvegarde via Restic pour aller récupérer un fichier .
- La restauration est aussi importante que la sauvegarde : il doit y avoir des mécanismes de vérification de l’intégrité de la sauvegarde.
- La rétrocompatibilité des sauvegardes et de tous les référentiels au sein d’une même version majeure de Restic.
- La solution doit être utilisable même quand la destination de sauvegarde n’est pas de confiance : toutes les données et les référentiels doivent pouvoir être chiffrées à la source.
- La solution offre un bon niveau de résistance aux menaces, par exemple si un fichier est supprimé ou modifié dans l’espace de stockage ceci est détecté lors des contrôles de cohérence, …
Restic fonctionne pour Linux, Mac, BSD et Windows (avec support des VSS).
Design Interne
D’un point de vue du design interne du produit, Restic s’appuie sur des mécanismes :
- D’instantané qui représente un répertoire avec tous les fichiers et sous-répertoires à un moment donné à un état défini.
- L’état signifie ici le contenu et les métadonnées comme le nom et l’heure de modification du répertoire et de son contenu.
- Pour chaque sauvegarde effectuée, un nouvel Instantané est créé.
- La sauvegarde intègre les attributs étendus des fichiers (comme les ACL)
- De Content Defined Chunking (CDC) utilisant l’implémentation Rabin :
- Lors de la sauvegarde initiale, les données de chaque fichier sont divisées en morceaux de longueur variable (entre 500 Ko et 8 Mo, en général autour de 1Mo)
- Pour les fichiers modifiés, seuls les morceaux modifiés doivent être enregistrés dans une sauvegarde ultérieure. Cela fonctionne même si des octets sont insérés ou supprimés à des positions arbitraires dans le fichier.
- De hachage SHA-256 pour :
- Identifier chaque fichier : un fichier a un hachage initial « ID de stockage » qui ne change jamais.
- Identifier chaque morceaux du référentiel
- D’un chiffrement des référentiels et des données basé de l’AES-256
- Plusieurs clefs de chiffrement peuvent être générées.
- De cache local qui conserve en cache certains fichiers du référentiel pour garder une trace des fichiers déjà copiés et l’utilise pour les sauvegardes ultérieures :
- Ce qui permet d’avoir des opérations de sauvegarde plus rapides car les métadonnées n’ont pas besoin d’être chargées à partir d’un référentiel distant.
Fonctionnement de Restic
C’est une solution de sauvegarde en mode push, c’est donc le client Restic qui se connecte au serveur de stockage pour y envoyer ses données.
Il n’y a pas de concepts de sauvegarde complète et différentielle, mais chaque sauvegarde est un instantané complet. Cela veut dire qu’il faut évidemment faire des tests d’intégrité et de restauration des sauvegardes à intervalle régulier.
La gestion des versions est prise en charge, cela veut dire que l’on sait mettre en œuvre une stratégie du type GFS : 7 dernière sauvegardes quotidiennes, 4 mensuelles, 5 annuelles.
Mais attention, cela ne signifie pas que les données vont être supprimées mais uniquement rendues inaccessibles. Il faudra ensuite des opérations d’élagages pour ensuite nettoyer les données inutiles.
La sauvegarde permet d’exclure des fichiers en spécifiant des modèles d’exclusion (un répertoire, un taille de fichier, un type de fichier, …)
Les fichiers ne sont pas récupérables directement via le système de fichiers et Il faut donc passer par Restic pour naviguer dans les sauvegardes, et il n’existe pas de GUI mais une interface de ligne de commande simple.
La suppression des instantanés de sauvegarde
Pour supprimer d’anciens instantanés, il faut mener deux actions :
- La notion d’oublier un instantané (forget) qui enlève l’instantané du référentiel mais ne supprime par les données inutiles.
- La notion d’élagage (prune) qui va supprimer réellement les données référencées par l’instantané du référentiel.
- Cette action peut prendre beaucoup de temps car elle va analyser chaque blob pour savoir s’il peut être supprimé et mettre à jour le référentiel.
- Si le référentiel est distant, cette action peut être faite directement depuis le stockage distant et n’impacte donc pas les serveurs d’origine. Néanmoins, cette action verrouille le référentiel et donc bloque toutes les sauvegardes.
- Il est recommandé de faire ensuite une vérification d’intégrité du référentiel (check) entre deux opérations d’élagage.
Les limites actuelles de Restic
- La solution est surtout orienté sauvegarde fichiers Linux et les retours d’expérience sont encore limitées sur de grandes infrastructures multi OS
- à part les retours d’expérience du CERN
- Pas de prise en compte native des mécanismes de stockage froid (et de processus de réchauffage d’archives)
- fait partie du projet Rustic qui utilise les mêmes répository que Restic mais est développé en Rust pour plus de performances et de sécurité.
Si la solution de sauvegarde Restic vous intéresse, contactez-nous.
D’autres solutions de sauvegarde utilisant du Content Defined Chunking (CDC)
Borg Backup
Ce logiciel s’appuie sur des mécanismes assez identiques que Restic. Les principales différences sont :
- Etant écrit en Python, il nécessite d’installer des dépendances : cela peut poser des soucis sur des anciennes versions d’OS.
- Uniquement utilisable en SSH et pas de support natif du stockage Objet (nécessite de passer par un espace tampon ou un serveur dans le Cloud).
- Il nécessite dans la pratique un référentiel pour chaque serveur ce qui diminue d’autant la capacité de déduplication quand on a de nombreux serveurs basés sur les mêmes OS.
- Cela peut être vu comme un avantage en limitant les impacts d’un souci d’intégrité à une sauvegarde et pas à un ensemble de sauvegardes.
- L’utilisation de plusieurs solutions de compression de données (lz4, zstd, zlib, lzma)
Kopia
Ce logiciel s’appuie sur des mécanismes assez identiques que Restic, il est notamment écrit en GO. Même si le projet est assez récent, il a connu une accélération importante en 2020 et 2021.
Les principales différences sont :
- Disponibilité d’une Interface utilisateur graphique (GUI)
- Compression des données (pgzip, zstd, S2)