SnapRAID – Projet Voskos
Si vous arrivez directement sur cet article, je vous invite à lire les précédents à partir d’ici. Cet article présente l’outil SnapRAID, qui permet de faire des backups de disque avec un système de parité.

Qu’est-ce que SnapRaid ?
C’est une solution logicielle opensource de sauvegarde de données par calcul de parité. Pariquoi ?
L’idée est de calculer et stocker des informations supplémentaires (parité) qui permettent de reconstruire les données perdues si un disque tombe en panne. En pratique, si un disque dur du groupe échoue, les données qu’il contenait peuvent être recalculées à partir de la parité stockée sur le disque de parité et des disques restants.
⚠️ SnapRaid est une solution de protection contre la perte de données due à une défaillance disque, pas une sauvegarde complète. De plus, SnapRaid fonctionne avec n’importe quel type de système de fichier (ext4, xfs, …) mais ne chiffre pas les données. Tournez-vous vers des solutions comme LUKS, ZFS.

Pourquoi SnapRaid plutôt que RAID ?
Avec RAID, les disques doivent tous êtres de la même capacité (enfin, la taille est basée sur le plus petit disque) . Quand vous récupérez comme moi des disques de différentes sources et plus ou moins vieux, c’est une forte limitation (surtout quand vous voulez augmenter la taille de votre stockage). Avec SnapRaid, vous pouvez associer des disques de toute taille et tout type (HDD, SSD).
En RAID 5, vous perdez un disque de votre espace de stockage et la tolérance à la panne est d’un disque à la fois.
En RAID 6, vous perdez 2 disques de votre espace de stockage et la tolérance à la panne est de deux disques à la fois.
Avec SnapRAID, le disque de parité doit être au moins aussi grand que le plus gros des disques de données, ce qui représente un espace ‘sacrifié’ pour la parité. Mais vous pouvez tout à fait ajouter un deuxième disque de parité (qui ne sera pas utilisé pour le stockage) et augmenter la tolérance à deux disques.
Avec RAID, l’écriture est un peu plus lente (à cause de l’écriture des octets de parité) mais la lecture est plus rapide (car la donnée est lue de plusieurs disques à la fois).
Avec SnapRaid, l’écriture et la lecture ne dépendent que des performances de vos disques (le calcul de parité se fait dans un second temps).
Je vous conseille de lire la page complète de comparaison de SnapRaid à ce sujet.
Fonctionnalités et Limitations
SnapRaid fonctionne de manière logicielle et indépendamment des disques de données. C’est-à-dire que vos données sont présentes de manière complète sur les disques que vous utilisez.
L’ajout ou la suppression de disques (de n’importe quelle taille je le rappelle) se fait très simplement (ajout/suppression d’une ligne dans la configuration et une commande à lancer).
Si par malheur, plusieurs disques venaient à tomber en panne en même temps dans un système avec un seul disque de parité, vous ne perdez « que » la donnée présente sur ces disques.
Vous pouvez configurer SnapRaid pour exclure certains dossiers du calcul de parité. C’est le cas par exemple pour ma bibliothèque de films déjà vus.
Si vous supprimez un fichier/dossier et que la commande de calcul de parité n’est pas encore passée, vous pouvez récupérer ces données.
Avec RAID, vous n’avez pas à vous soucier du calcul de parité, il est fait à la volée lors de chaque écriture. Avec SnapRaid, c’est à vous de gérer ce calcul avec une commande à lancer régulièrement (1 fois par jour dans mon cas d’usage). Tant que cette commande n’est pas lancée, les données ne sont pas sauvegardées et la perte d’un disque implique la perte des données récentes. A vous de trouver la bonne fréquence de sauvegarde.
Installation
Pour installer SnapRaid, j’ai choisi de récupérer la dernière version disponible sur Github (ici https://github.com/amadvance/snapraid/archive/refs/tags/v12.4.tar.gz).
Viens ensuite la compilation (assez classique) avec les deux commandes configure
, make
et make install
. Vous aurez sûrement besoin des outils de développements de votre système d’exploitation. Pour Ubuntu, c’est avec le package build-essential
Je vous mets le script complet ici :
sudo apt-get install wget git build-essential
wget https://github.com/amadvance/snapraid/releases/download/v12.4/snapraid-12.4.tar.gz
tar xvzf snapraid-12.4.tar.gz
snapraid-12.4
./configure
make
make install
Et c’est tout 😎
Configuration
La configuration dépendra bien évidemment de votre pool de disques et de la manière dont vous voulez les gérer. Elle sera stockée sous Linux dans /etc/snapraid.conf
Mon installation est la suivante

Mon disque système NVME (SSD) n’est pas intégré directement dans ma configuration SnapRaid. Je sauvegarde régulièrement les données (voir article Backup) et le système et les logiciels peuvent être réinstallés très rapidement avec Ansible.
Pour rappel, le disque sur lequel vous allez stocker votre fichier de parité doit être égal ou plus gros en termes de taille que les autres. Pour moi, ce sera /dev/sda1
monté sur /media/datap-iw
. Il est donc indiqué dans la configuration comme lieu de stockage de mon fichier snapraid.parity
. Ce fichier grossira au fur et à mesure que les données à sauvegarder (avec le système de parité) augmentent.
Ensuite, il faudra stocker le fichier snapraid.content
dans chaque disque. Il contient les détails du backup, avec tous les checksums pour vérifier l’intégrité (100Mo chez moi).
Enfin, il faut indiquer les disques à sauvegarder avec le mot-clé data
.
parity /media/datap-iw/snapraid.parity
content /var/snapraid/snapraid.content
content /media/data1-wd/snapraid.content
content /media/data2-iw/snapraid.content
data d1 /media/data1-wd/
data d2 /media/data2-iw/
exclude *.unrecoverable
exclude *.db-wal
exclude *.sqlite3-wal
exclude /tmp/
exclude /lost+found/
exclude *.!sync
Vous voyez qu’il est possible d’exclure des dossiers, fichiers ou types de fichiers. Cela dépendra bien évidemment de votre besoin.
Pour initialiser le calcul de parité, vous devez lancer la commande suivante (⚠️ cette commande peut être très longue si vos disques sont déjà remplis) :
snapraid sync
Script d’exécution simplifié
La gestion des différentes commandes snapraid
à lancer pour vérifier, puis calculer la parité peut être complexe à gérer. J’ai décidé d’utiliser un script Python (assez utilisé dans la communauté SnapRaid) qui ajoute quelques fonctionnalités.
https://github.com/Chronial/snapraid-runner
Après avoir téléchargé la dernière version du script ici https://github.com/Chronial/snapraid-runner/archive/refs/tags/v0.5.zip
créez le fichier de configuration snapraid-runner.conf
à partir de l’exemple fourni snapraid-runner.conf.example
Modifier la configuration avec au moins :
executable
: lien de la commande snapraidconfig
: lien vers le fichier de configurationdeletethreshold
: Si ce nombre de fichiers ont été supprimés, le script ne se lancera pas. C’est une sécurité si vous avez supprimé par erreur un dossier.scrub
: cette partie permet de gérer le scrub
Lancez le script une première fois pour vérifier que tout fonctionne bien
python3 /opt/snapraid-runner/snapraid-runner.py -c /opt/snapraid-runner/snapraid-runner.conf
Si tout va bien, vous avez maintenant une sauvegarde locale. N’oubliez pas d’automatiser le lancement de ce script avec une ligne dans crontab (pour moi, tous les jours à 4h10). La fréquence dépend du volume de modifications et de votre tolérance à la perte de données.
10 4 * * * python3 /opt/snapraid-runner/snapraid-runner.py -c /opt/snapraid-runner/snapraid-runner.conf
Nous verrons dans un prochain article comment recevoir des notifications sur smartphone lors d’erreurs.
Comment réagir en cas de disque défaillant
Même si je ne vous le souhaite pas, il vaut mieux avoir dans un coin la procédure à suivre en cas de disque défaillant.
1 – Stopper le calcul de parité en désactivant le cron
2 – Vérifier le statut de SnapRaid avec la commande snapraid check
3 – Remplacer le disque défectueux par un nouveau disque (formaté et monté) au même emplacement logique que le défectueux
4 – Monter le disque et vérifier que la configuration snapraid inclus le nouveau disque
5 – Restaurer les fichiers avec la commande snapraid fix
-d <nom_du_disque> -l fix.log
6 – Vérifier que tout va bien avec la commande snapraid check
7 – Célébrer (et souffler)
[Sources]
1 réponse
[…] MergerFS / SnapRaid […]