Accueil > Informatique > De la gestion de RAID

De la gestion de RAID

MAJ 2015-09-12: Avant de penser à vous faire un RAID classique avec mdadm, je vous recommande fortement de regarder du côté de ZFS. J’avais — comme bien des gens familiers avec l’administration de systèmes POSIX — déjà entendu parler de ZFS, je savais que ça existait, mais ne m’étais jamais particulièrement arrêté à en connaître les avantages, étant heureux avec XFS que je trouvais ultra-performant dans tous ses aspects (pour l’avoir moi-même comparé dans des cas-types avec d’autres systèmes), et qui est en plus journalisé, et je m’imaginais ZFS comme simplement un autre système de fichier, sans plus. Mais voilà que dans une discussion récente sur Facebook à propos des systèmes de stockage redondants, j’ai appris que ZFS était bien plus qu’un simple système de fichier et permettait une panoplie de configurations, notamment la création de systèmes redondants de type RAID, avec le très gros avantage que l’intégralité des données est garantie en tout temps, ce qui est assez critique de nos jours avec des tailles de disques telles que l’apparition d’erreurs est statistiquement presque inévitable et des temps de reconstruction extrêmement longs en cas de remplacement d’un disque dans un RAID. Par contre, un avantage que je trouve encore au RAID est celui de pouvoir en augmenter la taille facilement et à volonté: on ajoute un nouveau disque et hop! on ajoute autant d’espace, et aussi d’après quelques lectures il semble que RAID+XFS soit moins gourmand en ressources (RAM+CPU) que ZFS. Mais si vous connaissez d’avance la taille que vous souhaitez et que votre machine est performante, alors ZFS me paraît tout indiqué.


 

Il y a maintenant quelques années que j’ai commencé à me bâtir un RAID personnalisé sous Linux à la maison. Parti avec 3 x 500 Go (= 1 To RAID 5), j’en suis maintenant à 11 x 500 Go (= 5 To RAID 5), plus 1 disque de secours inactif. Je m’en sers essentiellement pour stocker les «rip» de mes DVDs et Blu-Ray qui vont alimenter mon serveur multimédia XBMC. Évidemment, quand tout va bien, tout va bien, et un jour… ça ne va plus, et c’est là qu’on réalise qu’on n’avait pas nécessairement tout fait dans les règles de l’art, soit par excès de confiance, soit parce qu’il nous manquait des connaissances. Donc, pour ma propre gouverne, mais aussi pour toute autre personne intéressée, voici quelques trucs et conseils que j’ai appris au fil du temps.

Pour les curieux, voici une description de mon installation: j’ai 12 disques durs externes USB. Six d’entre eux étaient vendus comme tel (i.e. vendus comme disques externes montés en usine), alors que les autres sont des disques SATA internes manuellement insérés dans des boîtiers USB externes (la logique pour ces derniers étant que si jamais un disque pète, j’aurai juste le disque interne à remplacer, théoriquement à moindre coût). Les ports USB me sont fournis par 3 cartes PCI fournissant 4 ports chacune. Et le tout est branché à… (roulement de tambour!!!) un superbe PII 450MHz 128Mo RAM! 🙂 Eh oui, pas besoin de plus que ça! Et il ne sert qu’à ça (serveur de fichiers), donc c’est amplement suffisant. Oh, et il roule Debian (me souviens plus qu’elle version, mais c’est pas tellement pertinent au présent texte anyway).

Le wiki Linux RAID vous donnera toutes les informations de base pour créer et administrer un RAID; ce que je veux ici est préciser ou mettre en lumière certains points qui ne sont peut-être pas évidents pour quelqu’un qui commence et qui peuvent éventuellement nous sauver du pétrin.

Conseil 1: Table de partition GPT!!!

Si vous prévoyez partitionner votre RAID (ce qui n’est pas nécessaire, en passant: vous pouvez le formatter directement, et c’est ce que je recommande; à l’époque je n’y avais juste pas pensé…), épargnez-vous des larmes futures en créant une table de partition de type GPT.  J’étais rendu à ajouter mon 6e disque dur (pour avoir 2.5 To en RAID 5) lorsque j’ai eu la très mauvaise surprise de découvrir que je n’étais pas capable d’étirer ma partition à plus de 2 To, tout ça parce que j’avais une table de partition «standard» de type MD-DOS. La création se fera avec parted (et non fdisk, qui ne supporte pas la création de tables GPT) et la commande suivante:

(parted) mklabel gpt 

…ou utiliser LVM?

Sans doute qu’au lieu d’utiliser GPT (et de redimensionner la partition à chaque ajout de disque), on pourrait utiliser LVM (avec un simple pvresize après chaque ajout de disque?)… Mais LVM soulève la question d’une couche logicielle supplémentaire: je ne sais pas à quel point ça pourrait ajouter de l’instabilité ou diminuer la performance… Mais certainement que ça faciliterait la gestion de la croissance du RAID.

Conseil 2: Prenez en note la configuration de vos partitions!!!

(Ne s’applique pas seulement aux RAID…) Un «fdisk -ul» vous donnera les informations importantes à conserver si jamais vous deviez vous retrouver en situation de retrouver une partition perdue.

Pour ceux qui se demanderaient quel type de partition utiliser, personnellement j’utilise toujours XFS pour ses performances notoires, notamment avec de gros fichiers (comme des «rip» full-HD de Blu-Ray, p. ex.), mais c’est souvent une question de préférence personnelle.

Conseil 3: Identifiez vos disques!!!

D’un démarrage à l’autre, les disques ne reprendront pas nécessairement le même identifiant /dev/sd?; or, malheureusement, la commande de gestion mdadm ne travaille qu’avec les identifiants /dev/sd?… Donc, quand un disque devient défaillant (en passant, quand ça arrive, ça ne veut pas nécessairement dire que le disque est vraiment défectueux: il y a peut-être juste eu un «glitch» dans le contrôleur ou autre qui a fait débarquer le disque du RAID, sans qu’il soit pour autant endommagé), la commande «mdadm –detail» vous dira que sd? est défaillant, sans plus: alors physiquement, lequel est-ce…? Truc: étiquetez physiquement vos disques avec l’identifiant matériel tel que trouvé dans /dev/disk/by-id/, et ajoutez une ligne du genre dans /etc/rc.local pour toujours avoir une cartographie à jour de vos disques:

ls -l /dev/disk/by-id | grep sd[^a] > /root/disques.txt

Conseil 4: Surveillez!!!

Il est très important de savoir quand un disque se fait débarquer du RAID afin de prendre les mesures de restauration nécessaire; évidemment, vous pouvez manuellement exécuter régulièrement un «mdadm –detail», mais le mieux est définitivement d’ajouter une ligne de ce genre dans /etc/rc.local:

mdadm --monitor --daemonise -f [email protected] --delay=300 /dev/md0

Assurez-vous par contre que vous pouvez envoyer des courriels depuis l’hôte du RAID, sinon ça ne donnera pas grand-chose…

Conseil 5: Faites des «check»!!!

Fonction peu connue (et pourtant fortement recommandée!!): on peut demander au RAID de vérifier son intégrité et de faire les corrections nécessaires avec une commande du genre:

echo check >  /sys/block/md0/md/sync_action

Pour les plus vieilles versions de RAID (renseignez-vous), il est possible de devoir aussi entrer une commande du genre:

echo repair >/sys/block/md0/md/sync_action

Il est donc conseillé de faire ces vérifications régulièrement, p.ex. avec «cron».

Conseil 6: Disque de secours

Pas «essentiel», mais pratique: si vous pouvez vous permettre un disque supplémentaire de secours qui ne contribuera pas à l’espace disque disponible, c’est bien, car il prendra automatiquement la relève si jamais un disque devait se faire débarquer; quand vous faites un «mdadm –add», le disque est automatiquement ajouté en tant que disque de secours (vous pouvez en mettre autant que vous voulez), et il n’y a rien d’autre à faire.

Conseil 7: Copies de sécurité

Un RAID n’est pas infaillible, donc assurez-vous d’avoir des copies de sécurité de tous vos fichiers importants!

Conseil 8: En cas de défaillance de disques d’un RAID 5

Comme dit pour le conseil 3, ça ne veut pas dire que vos disques sont vraiment défectueux. La meilleure chose à faire est d’essayer quelque-chose du genre:

A) si un seul disque débarqué:

mdadm --re-add /dev/md0 /dev/sd?

B) si plusieurs disques débarqués (marchera avec un seul aussi):

mdadm --stop /dev/md0
 mdadm --assemble /dev/md0 --scan --force

Ce qui pourrait bien ressusciter votre RAID au moins temporairement, e.g. pour faire des copies de sécurité de dernière minute au besoin. (N’oubliez pas de démonter votre RAID avant de faire –stop, ou sinon ça ne marchera pas! 🙂

Conseil 9: En cas de défaillance physique réelle d’un disque

Si le disque tourne encore et semble en bonne condition mécanique de fonctionnement, la commande «badblocks» vous permet de déterminer si des blocs sont défectueux sur un disque, et si oui lesquels. Par contre, malheureusement, la commande ne les corrige pas. En fait, on ne peut généralement pas «corriger» des mauvais blocs; il peut parfois être possible de les éliminer en réécrivant par-dessus, mais ce n’est pas certain (Google vous dira comment faire si vous voulez essayer). La méthode généralement utilisée (à part changer le disque) consiste idéalement à indiquer au système de les contourner. Le «check» du conseil 5 est sensé faire exactement cela: s’il découvre des mauvais blocs sur un disque, il est sensé noter leurs positions et les éviter.

Conseil 10: En cas de défaillance de 2+ disques du RAID, dont au moins un est défaillant physiquement

Ça m’est arrivé. Voici ce qui s’est passé (et l’origine du présent article et de plusieurs conseils ci-dessus): je me suis rendu compte un moment donné avec un «mdadm –detail» que j’avais un disque débarqué, depuis je ne sais pas combien de temps. Je croyais avoir suivi le conseil 4 pourtant (mais pas le 6…), sauf que j’avais changé des configs dans mon smtp qui faisaient que le courriel ne fonctionnait plus, de sorte que je n’avais jamais reçu d’avertissement… Bon, alors, je fais un «mdadm –re-add» et tout va bien: le RAID se met en restauration. Sauf que… à 75% de restauration, le RAID s’arrête avec DEUX disques défaillants, soit celui de départ, plus un nouveau! Un «badblocks» sur le second me confirme le pire: il y a des mauvais blocs sur ce second disque, ce qui rend toute tentative de reconstruction impossible… Alors, ce que j’ai fait: je me suis procuré un nouveau disque, et j’ai fait un «dd_rescue» depuis le disque défectueux sur le nouveau disque, et j’ai remplacé le disque défectueux par le nouveau disque dans le RAID. Et… BINGO! 😀 (Ensuite j’ai suivi le conseil 6… 😉

Categories: Informatique Tags:
  1. Pas encore de commentaire
  1. Pas encore de trackbacks
Vous devez être identifié pour poster un commentaire