Comment construire un RAID 5 logiciel ?
Nous allons ici construire une RAID 5 logiciel, et aborder son administration (surveillance, maintenance, ...).
Cet article a été mis en pratique dans l'installation d'un serveur de fichier, les exemples en sont tirés et notamment de cet article-ci.
1 - Le paquetage logiciel nécessaire (mdadm)
Le RAID logiciel se gère à l'aide du paquetage mdadm. Il nous faut donc l'installer si ce n'est pas déjà fait.
L'installation via l'interface graphique est le plus simple, mais lorsqu'on sait exactement ce que l'on doit installer, la ligne de commande (en administrateur) est toute aussi simple. Ici, il s'agit de la commande sous Mandriva, vous l'adapterez selon votre distribution (apt-get pour Debian, emerge pour Gentoo, etc.) :
# urpmi mdadm
2 - Construire le RAID 5
Construire un RAID avec l'interface graphique de CCM (Centre de Contrôle Mandriva) est faisable dans les cas simples. J'ai essayé, pour mon RAID 5, et outre des pages d'erreurs que je n'aime pas trop (mais qui à priori n'empêche pas la construction), je n'ai pas su comment monter le "spare" (disque de secours), mais est-ce possible ?
Je suis donc retourné à ma console et ses lignes de commande (toujours en administrateur).
Avant de créer la matrice RAID, il faut créer les partitions qui vont servir à créer la matrice. Ces partitions doivent être du type FD (en hexadécimal, noté également 0xFD), c.a.d "Linux RAID auto". Bien sûr, pour cela nous utiliserons la commande fdisk. Mais avant nous allons bien repérer nos disques durs :
# ls -al /dev/sd* brw-rw---- 1 root disk 8, 0 2010-01-16 15:09 /dev/sda brw-rw---- 1 root disk 8, 1 2010-01-16 09:11 /dev/sda1 brw-rw---- 1 root disk 8, 2 2010-01-16 09:11 /dev/sda2 brw-rw---- 1 root disk 8, 5 2010-01-16 09:11 /dev/sda5 brw-rw---- 1 root disk 8, 6 2010-01-16 09:11 /dev/sda6 brw-rw---- 1 root disk 8, 16 2010-01-16 15:09 /dev/sdb brw-rw---- 1 root disk 8, 32 2010-01-16 15:09 /dev/sdc brw-rw---- 1 root disk 8, 48 2010-01-16 15:09 /dev/sdd brw-rw---- 1 root disk 8, 64 2010-01-16 15:09 /dev/sde
Nota : nous avons sd* car je n'ai que des disques SATA, si vous avez des disques PATA/IDE remplacer sd* par hd*
Je retrouve bien ma partition sda sur laquelle j'ai installé mon système, et mes 4 disques durs qui attendent d'être mis en RAID 5.
Les 4 disques du futur RAID 5, sont donc sdb, sdc, sdd et sde en tant que "spare". Nous les "typons" en FD:
# fdisk /dev/sdb Le périphérique ne contient pas une table de partitions DOS ou Sun, SGI, OSF valide Création d'une nouvelle étiquette DOS avec id de disque 0x2c0e51a5. Les modifications restent en mémoire jusqu'à ce que vous les écriviez. Après quoi, bien sûr, le contenu précédent sera irrécupérable. Le nombre de cylindres pour ce disque est fixé à 121601. Il n'y a rien d''incorrect avec cela, mais c'est plus grand que 1024, et cela pourrait causer des problèmes pour certaines installations: 1) logiciels qui sont exécutés à l'amorçage (i.e., vieilles versions de LILO) 2) logiciels d'amorçage et de partitionnement pour d'autres OS (i.e., DOS FDISK, OS/2 FDISK) AVERTISSEMENT: fanion 0x0000 non valide dans la table de partitions 4, sera corrigé par w(écriture) Commande (m pour l'aide) : n Commande d'action e étendue p partition primaire (1-4) p Numéro de partition (1-4): 1 Premier cylindre (1-121601, par défaut 1): Utilisation de la valeur par défaut 1 Dernier cylindre, +cylindres or +taille{K,M,G} (1-121601, par défaut 121601): Utilisation de la valeur par défaut 121601 Commande (m pour l'aide) : t Partition sélectionnée 1 Code Hexa (taper L pour lister les codes): fd
Type système de partition modifié de 1 à fd (Linux raid autodetect) Commande (m pour l'aide) : w La table de partition a été altérée ! Appel de ioctl() pour relire la table de partitions. Synchronisation des disques
Ne vous inquiétez pas des avertissements initiaux, ils ne nous concernent pas ici.
Il faut bien sûr refaire cette commande pour tous les disques du RAID. Nous avons maintenant :
# ls -al /dev/sd* brw-rw---- 1 root disk 8, 0 2010-01-16 15:09 /dev/sda brw-rw---- 1 root disk 8, 1 2010-01-16 09:11 /dev/sda1 brw-rw---- 1 root disk 8, 2 2010-01-16 09:11 /dev/sda2 brw-rw---- 1 root disk 8, 5 2010-01-16 09:11 /dev/sda5 brw-rw---- 1 root disk 8, 6 2010-01-16 09:11 /dev/sda6 brw-rw---- 1 root disk 8, 16 2010-01-16 15:30 /dev/sdb brw-rw---- 1 root disk 8, 17 2010-01-16 15:30 /dev/sdb1 brw-rw---- 1 root disk 8, 32 2010-01-16 15:31 /dev/sdc brw-rw---- 1 root disk 8, 33 2010-01-16 15:31 /dev/sdc1 brw-rw---- 1 root disk 8, 48 2010-01-16 15:59 /dev/sdd brw-rw---- 1 root disk 8, 49 2010-01-16 16:00 /dev/sdd1 brw-rw---- 1 root disk 8, 64 2010-01-16 16:10 /dev/sde brw-rw---- 1 root disk 8, 65 2010-01-16 16:10 /dev/sde1
Nous pouvons passer maintenant à la construction du RAID 5 proprement dite, qui tient maintenant en 1 ligne :
# mdadm --create /dev/md0 --level=raid5 \ --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 \ --pare-devices=1 /dev/sde1
Les \ ne sont là que pour indiquer que la ligne continue, ils ne sont pas à mettre, il faut écrire une seule ligne.
Votre 'array is started' ? Hé oui, votre RAID 5 est créé mais il est en train de se construire, c.a.d de faire ses calculs de redondance (même si vos disques étaient vides). Vous pouvez suivre cette construction par un :
# watch cat /proc/mdstat
Ce qui vous renvoie ceci, actualisé toutes les 2 secondes.
Notez :
- Le temps de reconstruction, un peu plus de 4H 30'! (ce temps dépend de la capacité disque, ici 1To, et de la puissance de votre machine, ici à base d'un processeur i7) Normalement il est dit que l'on peut continuer de travailler pendant cette phase, le système est seulement un peu ralenti.
- L'ordre un peu curieux sdd1[3] sde1[4](S) sdc1[1] sdb1[0]. Avant mise en production, il faudra s'assurer de la bonne correspondance entre l'appellation des disques et de leur position dans l'ordinateur. Car ce n'est pas le jour où un disque tombera en panne qu'il faudra se poser la question.
- Le 'spare disk' est bien topé avec un (S)
Pour parachever la construction du RAID, il faut lui assigner un 'file system', comme ceci (ici ext4, mais si vous avez une autre préférence ...) :
# mkfs -t ext4 /dev/md0
Et le voilà prêt à l'emploi, c.a.d à être 'monté'
3 - Quelques commandes d'administration (mdadm)
3.1 - Sauvegarder la configuration
Ce n'est pas obligatoire, mais cela facilite la tâche à mdadm. Donc après la création de votre matrice RAID vous pouvez créer le fichier /etc/mdadm.conf comme ceci :
# echo "DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1" > /etc/mdadm.conf # mdadm --detail --scan >> /etc/mdadm.conf
Nota 1 : Pour la première ligne, mettez VOS partitions. De plus si vous avez déjà un fichier /etc/mdadm.conf mais non configuré (c.a.d avec que des commentaires explicatifs - lignes commençant par #) il vaut peut-être mieux ne pas l'écraser et donc de remplacer > par >>.
Nota 2 :si vous avez utilisé l'interface graphique pour créer votre RAID, mdadm.conf a du être généré, les commandes précédentes ne sont donc pas utiles.
3.2 - Surveiller l'état du RAID
Nous avons déjà vu précédemment la commande cat /proc/mdstat associée à watch qui permet une vérification en continu.
Mais on peut avoir une vision plus détaillée avec :
# mdadm --detail /dev/md0
3.3 - Simuler une panne sur un RAID redondant
# mdadm /dev/md0 -f /dev/sdd1
simule une panne sur le disque dur sdd. Avec les commandes de surveillance, vous verrez :
- le disque "faulty" (F)
- la reconstruction sur l'ancien disque 'spare' (s'il existait bien sûr)
3.4 - Remplacer un disque
N'oubliez pas qu'en cas de panne, votre système est fragilisé et que la reconstruction est longue. Il vaut donc mieux remplacer le disque défectueux le plus rapidement possible. Certains vous diront que la probabilité de 2 pannes disques est faible, c'est vrai ... dans l'absolu ! Moi-même je n'ai jamais eu de problème de disques dur, (enfin si, une fois sur un disque externe !) et je me demande pourquoi je monte un RAID5. Cependant si vous avez la malchance d'avoir un disque en panne, la probabilité d'une 2ième panne est ici plus élevée car :
- la panne peut trouver son origine dans un problème d'alimentation et dans ce cas les autres disques ont pu en pâtir aussi;
- la panne elle-même peut avoir généré des problèmes sur l'alimentation;
- la panne provient d'une "fatigue" du disque, et comme les autres disques ont eu la même charge de travail, et qu'ils ont de grande chance d'avoir le même âge et d'être de la même marque ... (vous les aviez achetés en même temps, non ?)
- plus, tout ce que l'on ne maîtrise pas lors d'une panne.
Donc ne traînons pas (il n'y a pas non plus urgence, vous avez bien fait des sauvegardes n'est-ce pas ?). Supposons le disque /dev/sdd en panne (F). Il faut d'abord le "retirer" :
# mdadm /dev/md0 -r /dev/sdd mdadm hot removed /dev/sdd
Un 'cat /proc/mdstat' vous rassurera, /dev/sdd a bien disparu. Il ne reste plus qu'à éteindre la machine (si, si il vaut mieux !), remplacer le disque défaillant, rallumer la machine, repartitionner le disque et le rajouter à la matrice RAID par :
# mdadm /dev/md0 -a /dev/sdd
Nota : dans le cas d'un RAID avec un 'spare disk', cette commande fonctionne aussi, elle l'ajoutera comme étant le nouveau 'spare disk' puisque le précédent a pris la relève du disque défaillant.
Les 2 commandes de surveillance vous montreront bien sa réintégration.
Voilà, j'arrête là, vous avez l'essentiel. Il y a encore plein d'autres commandes que vous pouvez découvrir en lisant le man (# man mdadm), et que j'expliciterai peut-être plus tard sur un article d'administration avancée d'un RAID (notamment l'alerte en cas de panne).