ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Sécurité, Mise en place et gestion d'un volume Software RAID5

Author : O.Romain.Jaillet-ramey

Introduction

RAID est un acronyme signifiant Redundant Array of Inexpensive Disks. Très globalement, le RAID est un moyen de combiner plusieurs disques durs en un seul disque virtuel, et d'assurer la sécurité des données en cas de perte d'un (ou plusieurs, selon le type d'installation) disque.

Pourquoi est ce que le RAID m'interesserait?

Avantages et inconvénients du RAID

Mettre en place un système RAID permet d'assurer une redondance de données, et donc de ne pas tout perdre si un disque décide qu'il en a marre d'être un disque. Par exemple, avec un setup RAID-1 (explications de la dénomination plus tard), si un disque rend l'âme, vous avez toujours une copie de l'intégralité des données sur un deuxième disque. Encore mieux, ce n'est pas comme un système de backup quotidien: les copies sont en permanence synchrones, et si jamais une des deux rend l'âme, l'autre prend le relais sans que le système ne s'arrête. Aux yeux de tout ce qui utilise ces données, il ne s'est rien passé, le RAID a basculé automagiquement sur la copie de sauvegarde.

Mettre en place un système RAID permet également de regrouper beaucoup de disques de petite capacité (des vieux 2/4Go qui trainent peut être?) et de les regrouper en un seul grand disque ayant la capacité cumulée de toutes ses composantes. Bien sur, si en plus de cela il vous faut une redondance comme ci dessus, c'est très possible.

D'un autre coté, la mise en place d'un système RAID n'est pas toute rose: pour les mises en place garantissant une redondance des données, le risque de perte n'est pas éliminé, simplement repoussé, c'est a dire que vous pouvez vous permettre de perdre N disques de votre ensemble, mais si vous en perdez N+1, toutes vos données sont perdues. De plus, cette redondance n'est pas gratuite: il faut sacrifier un certain nombre de disques de l'ensemble pour la redondance (ben oui, les copies des données, elles sont pas stockées dans un disque magique qu'on vous avait caché). Enfin, la redondance implique un ralentissement au niveau de l'I/O, pas tant au niveau de la lecture, mais surtout au niveau de l'écriture, puisqu'il faut a chaque fois écrire de multiples copies des données.

De plus, il faut se rendre compte d'une chose: un système RAID protège vos données contre une défaillance de disque. Elle ne protège absolument pas des coupures de courant (au contraire, un RAID peut être gravement endommagé s'il est interrompu en pleine écriture, bien plus qu'une partition classique), ni contre la corruption de données accidentelle (un disque qui écrit des données corrompues) ou intentionelle (un effacement criminel de fichiers ne pourra être contré avec un RAID).

La morale? A vous de voir si la protection de vos données vaut les sacrifices que cela implique. Mais surtout ne pas oublier que le RAID ne dispense ABSOLUMENT PAS d'une politique de sauvegarde et d'archivage de données efficace (pour preuve, anecdote personelle: a la suite d'une coupure de courant, mon RAID refusait de fonctionner, a cause d'une corruption de ses structures de controle... J'avais l'air bien malin sans sauvegardes!)

Les différents types de RAID

Sous la dénomination RAID plusieurs variantes ont été regroupées. Selon les variantes, le RAID offre la concaténation de disques, la redondance, ou les deux, avec plus ou moins de disques. Aujourd'hui, 6 types de RAID sont utilisés courament:

RAID-Linear

Le mode le plus simple de fonctionnement RAID: plusieurs disques sont mis bout a bout, et lorsqu'on arrive a la fin d'un disque, on continue d'écrire au début du disque suivant. Cela permet de concatener plusieurs disques en un seul volume virtuel. Néanmoins, un inconvénient est justement que ce type de RAID est totalement linéaire: si l'espace occupé ne dépasse jamais la taille du premier disque, les autres ne seront jamais utilisés, ce qui est un peu bête.

RAID-0 : Striping

Ce mode opère de la même manière que le RAID-Linear, sauf qu'au lieu d'écrire de manière linéaire sur les disques, les données sont réparties équitablement sur tous les disques du volume. cela permet d'uniformiser l'utilisation des disques et d'augmenter légèrement les performances de lecture/ecriture. Il est a noter qu'avec ces deux modes, aucune redondance n'est présente. Si un disque lache, il y a des grandes chances de tout perdre.

RAID-1 : Mirroring

Ce mode, comme son nom l'indique, utilise deux disques (de même capacité) et synchronise en permanence le contenu de l'un et de l'autre. Au final, vous perdez l'équivalent d'un des deux disques en terme de stockage (soit 50%), mais vos données sont en permanence doublées. Si l'un des deux disques subit une défaillance, l'autre peut continuer comme si de rien n'était. Ce mode offre de manière évidente une redondance (au prix de la perte de 50% d'espace de stockage), ainsi qu'une légère amélioration des performances en lecture (on peut utiliser les deux disques en parallèle). Par contre, les performances en écriture sont dégradées, car tout doit être écrit en double.

RAID-0+1 : Striping+Mirroring

Ce mode combine le RAID-0 et le RAID-1 en combinant deux volumes RAID-0 de même capacité en un volume RAID-1. Ce montage fait effectivement perdre 50% de l'espace de stockage, mais donne également une tolérance aux pannes accrue: il est a présent possible de se passer de la moitié des disques. Par contre, si un disque lache dans chaque volume RAID-0, tout est perdu.

RAID-4 : Parity

Ce mode requiert au moins trois disques: deux qui stockeront des données, et le troisième qui stockera un bit de parité. Ainsi, toutes les données sont récupérables a partir de deux des trois disques (ou a partir de (N-1) des N disques). Cette méthode permet de minimiser la perte effective d'espace disque (on ne perd plus que 33% d'espace), mais crée un goulot d'étranglement au niveau du disque de parité.

RAID-5 : Distributed Parity

Le RAID-5 fonctionne de manière similaire au RAID-4, sauf qu'il n'y a plus un disque de parité bien précis: les données de parité sont réparties entre tous les disques de la même manière que les données, éliminant le problème du goulot d'étranglement.

Mise en place d'un volume RAID

Dans cette section je ne vais décrire que la mise en place d'un volume RAID-5, puisque c'est le seul avec lequel je suis familier. J'invite d'autres ayant des volumes d'un autre type à completer cette section.

Préparation

Tout d'abord, il faut vérifier que le support RAID est actif dans le kernel. Dans la section ad hoc de la configuration du noyau, veillez a activer le support RAID, puis à intégrer le pilote RAID-5 (ou le pilote d'un autre niveau RAID si vous le souhaitez).

Ensuite, il faut installer les outils de gestion RAID. apt-get install raidtools2 mdadm. Raidtools2 regroupe les outils d'administration "officiels", et mdadm apporte des compléments interessants, notamment la possibilité de surveiller les volumes et de signaler la défaillance éventuelle d'un disque.

Mise en place

A présent, nous sommes prêts. Branchez les trois (ou plus) disques que vous voulez utiliser et editez le fichier /etc/raidtab. Dedans, mettez (ignorez ce qui se situe après les #, ce sont mes commentaires):

Script avec 15 lignes

001raiddev /dev/md0 # Le nom du device qui sera notre volume <acronym title="Redundant Array of Independent Disks" lang=en">RAID</acronym>
002raid-level 5 # Le niveau de RAID désiré
003nr-raid-disks 3 # Le nombre de disques composant le volume
004nr-spare-disks 0 # Le nombre de disques de secours
005# (normalement inutilisés, mais le sont si un disque principal lache)
006persistent-superblock 1 # Si les informations de controle RAID sont stockées sur le disque
007# (très vivement recommandé)
008parity-algorithm left-symmetric # on touche pas, c'est bien comme ca ;)
009chunk-size 32 # une bonne taille élémentaire pour la plupart des utilisations
010device /dev/sdb # Le nom du premier disque qu'on va insérer dans le lot
011raid-disk 0 # Dans quelle position dans le volume le disque se trouve
012device /dev/sdc # itou
013raid-disk 1
014device /dev/sdd
015failed-disk 2 # Non, ce n'est pas une erreur!
Retirer les numéros de lignes

Une fois ce fichier défini (remplacez bien évidemment les noms des disques par les votres, mais si vous n'aviez pas compris ca, je ne pense pas que monter un volume RAID soit une très bonne idée!), il vous suffit de créer le volume raid en tapant mkraid /dev/md0. Il ne devrait normalement pas se passer grand chose, et mkraid devrait rapidement vous rendre la main.

Mais pourquoi avoir écrit failed-disk 2 au lieu de raid-disk 2 dans la config, je vous entends hurler ? Justement pour empêcher le volume RAID de fonctionner correctement, pour l'instant. Si j'avais mis directement raid-disk 2, mkraid aurait immédiatement construit un volume de trois disques et aurait commencé a synchroniser le troisième disque avec les données des deux premiers. Mais vu que pour l'instant ces disques ne sont ni formatés ni rien (mkraid détruit toutes les données sur les disques au fait... Comment ca, c'est un peu tard pour le dire? :P ), cela ne sert pas a grand chose. Alors on commence par créer un volume RAID avec deux disques sur trois, ce qui s'apelle le mode dégradé (mkraid a du vous le sortir). Une fois que nous aurons bien partitionné et formaté le volume raid, nous insererons alors le troisième disque, et la synchronisation se fera.

Donc, étape suivante, formattez /dev/md0 comme si c'était une partition tout ce qu'il y a de plus banal. Une fois toute la création terminée, et avant de commencer a l'utiliser, réeditez /etc/raidtab, remplacez failed-disk par raid-disk et executez la commande raidhotadd /dev/md0 /dev/sdd (ou sdd est le disque qui était marqué comme défaillant). Le pilote RAID va alors intégrer le troisième disque et commencer la resynchronisation. Comme le pilote RAID est intelligent, il va synchroniser en arrière plan en utilisant la bande passante I/O inutilisée. En théorie donc, vous pouvez toujours accéder et utiliser le RAID sans constater le moindre ralentissement pendant la reconstruction.

Pendant que la reconstruction se fait, cat /proc/mdstat. Cela vous affichera toutes les informations sur les pilotes RAID et les volumes RAID actifs dans votre système, ainsi qu'une barre de progression de la reconstruction. En temps normal, c'est ici que vous venez voir si votre volume RAID est encore a 100% fonctionnel : si un disque est défaillant, c'est ici que vous le saurez en premier.

Utilisation

Si vous avez activé l'option persistent superblock dans votre volume RAID (comme je vous l'ai indiqué), il n'y a aucun besoin d'executer de commande spéciale au boot pour activer le RAID, il sera autodétecté et activé. Vous pouvez alors utiliser votre volume RAID comme une partition normale dans le fstab (par exemple, pour ma part le /dev/md0 est mounté sur /var).

Défaillances

Le RAID est censé protéger contre les défaillances disque, encore faut il savoir comment les gérer quand elles surviennent.

Gestion d'une défaillance d'un disque

C'est ce que le RAID-5 est censé faire : protéger d'une défaillance d'un disque. Lorsque cela arrive, le pilote RAID-5 détecte qu'un disque du volume est mort, et passe en mode dégradé, c'est a dire que le volume continue de fonctionner sur deux disques, mais qu'il n'y a plus de redondance. C'est assez précaire comme situation, et il convient donc de rapidement remplacer le disque défaillant.

Pour ce faire, éteignez la machine (à moins d'avoir un système de hotplug Un VRAI hotplug, pas juste débrancher un disque pas hotplug pendant que l'ordi tourne reconnu sous linux), remplacez le disque qui a rendu l'ame (consultez /proc/mdstat pour savoir quel disque a été jeté du volume), et rebootez la machine. Le pilote RAID, lisant le superblock RAID, va constater qu'il y a un disque défaillant, et repasser en mode dégradé avec les deux disques qui n'ont pas laché.

Pour signaler au pilote RAID que le disque est a nouveau utilisable, raidhotadd /dev/md0 /dev/sdd (ou /dev/sdd est le disque qui a laché). La reconstruction commencera en arrière plan, et tout sera bientot pour le mieux dans le meilleur des mondes possibles.

Gestion d'une défaillance temporaire d'un disque

Il peut arriver, pour diverses raisons, que le pilote RAID croie qu'un disque est défaillant alors qu'il n'en est rien. Par exemple, chez moi, le graveur sur mon serveur plante assez souvent (il est vieux), et il entraine avec lui toute la chaine SCSI, sur laquelle se trouve un disque du volume RAID. Dans ces cas de défaillances temporaires, il n'est pas nécéssaire de rebooter la machine: corrigez simplement la défaillance temporaire (dans mon cas, réinitialisation de la chaine SCSI plantée) et raidhotadd /dev/md0 /dev/sdd pour commencer la reconstruction.

Gestion d'une défaillance temporaire de plusieurs disques

Il peut également arriver que le pilote RAID croie que plusieurs disques du volume sont défaillants. Exemple d'un scénario catastrophe: la chaine SCSI sur laquelle se trouve un des trois disques lache, entrainant avec elle le disque en question. Le volume raid commence a passer en mode dégradé, et a ce moment la, une deuxième chaine plante (bug, coupure de courant, ce que vous voulez). Le résultat est qu'un des trois disques est marqué comme défaillant dans le superblock RAID, et que les deux autres y sont marqués comme désynchronisés. Au reboot, le pilote RAID va alors sauter le disque marqué défaillant, constater qu'il y a désynchronisation, et tenter d'entamer une reconstruction. Mais comme il n'y a que deux disques, il ne peut pas reconstruire, et refuse alors d'activer le volume RAID.

Dans cette situation, il parait evident qu'il devrait être possible d'activer le volume, mais en raison d'une désynchronisation, le pilote refuse. La seule solution dans ce cas la est de forcer, et de prier :)

Pour ce faire, il faut tout d'abord établir un diagnostic du système. Tapez raidstart /dev/md0 et cherchez, dans le syslog, un endroit ou le pilote RAID affiche les event counter de chaque disque. Chaque compteur est un nombre hexadécimal, et les trois devraient être différents (c'est pour cela que vous n'arrivez pas a activer le volume). Notez quel disque a la plus petite valeur: il s'agit du plus en retard des trois, et c'est celui la que nous allons marquer comme étant défaillant. Editez /etc/raidtab, marquez ledit disque comme failed-disk.

Ensuite, priez encore une fois et tapez mkraid --force /dev/md0. Cette commande écrasera les superblocks raid actuels par un nouveau superblock, qui sera le reflet des informations fournies par le raidtab. Vous voyez a présent pourquoi il est important que le raidtab soit le reflet le plus exact possible de l'état actuel du volume! Une fois mkraid executé, vous devriez pouvoir réactiver le volume en mode dégradé avec raidstart /dev/md0.

Notez qu'a cet instant, le volume est réactivé, mais les deux disques sont encore mal synchronisés, ce qui se traduit concrètement par un système de fichiers endommagé. Donc, avant de mounter ou de resynchroniser votre volume, fsck /dev/md0 pour réparer le système de fichiers (vous perdrez peut être les dernières choses qui avaient été écrites... Un système de fichier journalé pourrait ici vous sauver, je ne sais pas). Une fois le fsck fini, rechangez failed-disk en raid-disk dans le raidtab et raidhotadd /dev/md0 /dev/sdd pour resynchroniser le dernier disque du volume. Félicitations, vous venez de vous relever d'un crash assez désastreux !

Conclusion

Le RAID n'est pas une excuse pour l'absence de backups !

Ca serait trop simple si le RAID éliminait tout besoin de sauvegardes. Mais au vu du scénario catastrophe ci dessus (qui m'est réellement arrivé!), et du fait qu'il n'y a pas de protection contre une attaque malicieuse du style rm -rf, les sauvegardes deviennent encore plus indispensables avec le RAID que sans !

Compléments d'informations :

Pour plus de renseignements, consultez le Software-RAID-HOWTO sur le site du Linux Documentation Project .