De RAID-1 en RAID-5, sans les mains !
Par Sid,
jeudi 26 juillet 2007 à 13:22 :: Libre
:: lu 8252 fois :: #205
:: rss
:: atom
::
English

otivé par toutes ces histoires de stockage et de backup, disposant des moyens de stockage nécessaires et d'un peu de temps pendant que d'autres optimisent à mort, je me suis enfin lancé dans la conversion d'une grappe RAID-1 en RAID-5, le tout sur fond de driver logiciel sous Linux. J'ai en effet à ma disposition une station initialement équipée de deux disques SATA identiques de 250Go qui m'ont permis d'installer un système complet en miroir. Ayant entre temps récupéré un troisième exemplaire, je caressais doucement l'espoir de récupérer 250 Go de plus en étendant le RAID.
Seulement voilà, pour passer de RAID-1 en RAID-5, il allait falloir tout exploser pour tout refaire, ce qui veut dire tout sauvegarder, refaire les grappes proprement et tout redescendre. Autant d'opérations qui demandent de la capacité de stockage d'une part et du temps d'autre part, deux facteurs qui me faisaient cruellement défaut jusqu'alors. Mes nouveaux disques et les vacances aidant, j'allais pouvoir me lancer. Mais Google aidant, je me suis aperçu qu'il y existait un heureux raccourci...
Cherchant à tout hasard une procédure ou un outil comme raidreconf permettant d'automatiser le maximum d'opérations, je suis tombé sur deux billets notables. Dans le premier, Nathan Gray se prend à jouer avec EVMS, mdadm et des loopbacks pour faire exactement ce que je cherche à faire, c'est à dire passer d'un RAID1 à deux disques à un RAID5 à trois disques. Diantre ! Dans le second, Scott Wallace confirme les affirmations du premier, mais sur un vrai système de fichiers, de taille conséquente. Il se pourrait donc que je puisse obtenir le résultat attendu sans avoir à passer par la descente d'un backup, et surtout sans forcément devoir réaliser l'intégralité de l'opération avec un système de secours. Prometteur...
Les avantages de cette technique, si elle marche, sont clairs. D'abord elle va me dispenses des phases de destruction complète et de reconstruction des systèmes de fichiers impactés. Ensuite, parce qu'elle est entièrement basée sur des fonctions de maintenance de mdadm, la plupart des opération seront réalisées en tâche de fond par le driver RAID et laisseront le système de fichiers utilisable. Point d'interrogation majeur, il semble falloir passer par une configuration surprenante, à savoir la construction d'une grappe RAID5 à seulement deux disques, au lieu des trois attendus. Surprenant, non ?
Pour comprendre comment et pourquoi ça marche, je suis allé voir comment étaient calculées les sommes de contrôle de chaque bande dans une grappe RAID-5. Considérons l'illustration[1] suivante d'une grappe RAID-5.
Le chunck de contrôle de la première bande est stocké sur le quatrième disque. Il contient une somme calculée sur les trois chunks de données de cette même bande, 1a, 2a et 3a. Pour la calculer, on utilise un algorithme qui commence par prendre la valeur du premier chunk de données, 1a, puis entre dans une boucle dans laquelle il fait un XOR incrémental avec chaque chunk de données supplémentaire, 2a puis 3a. Si on appelle Ca la somme de contrôle de la première bande a et N le nombre de disques dans la grappe, il semblerait qu'on ait quelque chose qui ressemble à cela :
i=1
Ca = $ia
While (i < N-1) {
i++
Ca = XOR(Ca, $ia)
}
Si on veut la formule générique et l'algorithme qui fonctionnent pour toutes les bandes, il faut ajouter des tests pour gérer l'entrelacement des chunks de contrôle, c'est dire à les identifier et les sauter lors du calcul. Mais je voulais juste donner l'idée générale qui permet de relever les points de l'algorithme qui m'intéressent, à savoir :
- son fonctionnement quand N=2 ;
- le résultat retourné.
Quand N=2, on s'aperçoit qu'il fonctionne encore. C'est une bonne chose. Les chunks de contrôle se trouvent alternés sur chaque disque comme suit.
L'algorithme n'entre alors jamais dans la boucle et se borne à produire des répliques du seul chunk de données de la bande. Ce RAID-5 à deux disques n'est en fait qu'un bon vieux RAID-1.
La différence entre un RAID-1 et un RAID-5 à deux disques sous Linux ne tient donc qu'au contenu du superbloc. Tout le reste est parfaitement identique. D'où l'idée de passer directement du RAID-1 au RAID-5 en arrêtant d'abord l'instance RAID à modifier et en la recréant ensuite avec un superbloc RAID-5 :
# mdamd --stop /dev/md0 # mdadm --create /dev/md0 -l5 -n2 /dev/sda1 /dev/sdb1
La grappe obtenue est fonctionnelle et tout à fait utilisable. Je peux ensuite ajouter à cette grappe le nouveau volume qui va se retrouver en spare :
# mdadm --add /dev/md0 /dev/sdc1
La dernière étape, celle qui prend beaucoup de temps[2], consiste à activer ce nouveau disque et à étendre le volume RAID-5 sur l'ensemble de l'espace maintenant disponible, chose possible depuis les noyaux 2.6.17 :
# mdadm --grow /dev/md0 -n3 --backup-file=/mnt/backup
Une fois cette très longue opération achevée, mon nouveau volume a doublé de taille, passant de 250Go à 500Go. Il ne reste plus qu'à répercuter ce changement au niveau du système de fichiers en utilisant resize2fs, opération qui prend certes du temps, mais nettement moins que l'extension de la grappe RAID :
# e2fsck -f /dev/md0 # resize2fs -p /dev/md0
Et voilà. Est-ce que je me sens plus en sécurité maintenant ? Même pas. Un jour, quelque chose va se passer que le RAID-5 ne pourra pas récupérer, sans parler des problèmes imputables au driver Linux lui-même. Je devrais peut-être me mettre en quête d'un quatrième disque à monter en spare. Au cas où...
Ah oui. J'ai oublié de vous dire qu'avant de me lancer là-dedans, j'ai tout de même fait une sauvegarde de tous les systèmes de fichiers impactés, forcément. Ça doit être devenu une habitude ;)
Notes
[1] Les illustrations viennent, ou sont inspirées, de http://www.prepressure.com/techno/raid.htm.
[2] Genre plusieurs heures.



Commentaires
1. Le jeudi 26 juillet 2007 à 19:46, par jme
2. Le vendredi 27 juillet 2007 à 00:22, par CaptainPatate
Réponse de Sid
3. Le vendredi 27 juillet 2007 à 23:44, par CaptainPatate
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.