Page suivante Page précédente Table des matières
9. Information rapide et grossière sur le RAID
Par Eugene Blanchard mailto:blanchas@cadvision.com
_______________________________________________________________________________
Si vous pensez implémenter un logiciel Linux de Raid alors voici le lien le plus important que vous devriez visiter avant de commencer :
Les pages Raid de Linas Vepsta: http://linas.org/linux/raid.html
Cet envoi date du 29 Octobre 1998 et cette documentation sur le Raid est incomplète et confuse. Cet envoi est là pour élucider les problèmes que vous pourriez rencontrer en implémentant le raid0 et le raid1.
Je voulais implémenter un mirroring (mirroir d'un disque dur sur un autre) au-dessus d'un striping (répartition sur plusieurs disques). Le striping apporte une bonne augmentation des performances de lecture/écriture et le mirroring permet une sauvegarde et une amélioration des performances de lecture.
J'ai commencé avec un noyau 2.0.30 et implémenté le raid0 (striping). Puis j'ai fais la mise à jour de mon noyau en 2.0.35 et la partie de plaisir à commencé. Après m'être battu pour que le raid0 fonctionne en 2.0.35, je me suis attaqué au raid1. Bon, devinez quoi, jetez par la fenêtre tout ce que vous avez appris sur le Raid et commencez à partir de zéro ! La bonne idée, c'est de commencer simplement, installer et faire fonctionner le raid0 puis ajouter le raid1. L'histoire commence:
9.1 Raid0 (striping) avec un noyau 2.0.30
Le linéaire et le raid0 (striping) sont implémentés depuis le noyau 2.x. Vous devez recompiler le noyau avec les périphériques multiples (option multiple devices) installés. Je recommande de l'installer dans le noyau pour commencer. Vous aurez suffisamment de problèmes sans l'avoir implémenté en module.
Pour vérifier que vous avez les périphériques multiples installés :
dmesg |more
et regardez si vous avez le driver md chargé et le raid0 enregistré (me rappelle pas de la phrase exacte - tard dans la nuit ;-()
Ou tapez
cat /proc/mdstat/
pour voir l'état de vos périphériques md. Vous devriez voir /dev/md0 à /dev/md3 inactifs.
Bizarrement, les outils noyaux mdtools-0.35 ne sont habituellement pas fournis avec les distributions. Ce sont les outils requis pour mettre en place le raid, le lancer et l'arrêter.
Vous pouvez les trouver dans la distribution Slackware à (taille de 23k) :
http://sunsite.unc.edu/pub/Linux/distributions/slackware/slakware/ap1/md.tgz
Le télécharger dans /usr/local/src puis:
cd / tar -zxvf /usr/local/src/md.tgz
Les fichiers seront mis à l'endroit adéquat.
sbin/mdadd sbin/mdcreate usr/etc/mdtab install/doinst.sh usr/man/man5/mdtab.5.gz usr/man/man8/mdadd.8.gz usr/man/man8/mdcreate.8.gz usr/doc/md/COPYING usr/doc/md/ChangeLog usr/doc/md/README usr/doc/md/md_FAQParcourir le fichier README (ignorer les avertissements bien sûr). La documentation est plutôt correcte pour le noyau 2.0.30 et le mode linéaire/raid0. Dans le Linux Journal (de juin ou juillet 98) il y a un excellent article sur la manière d'implémenter le raid0 (striping). C'est ce qui a piqué ma curiosité.
Il y a dans la Linux Gazette un autre article qui peut vous aider:
http://www.ssc.com/lg/issue17/raid.html
Vous devez démarrer la baie (matrice) raid avant de faire
fsck -a
, se trouve habituellement dans /etc/rc.d/rc.s pour les distributions slackware. Vous devez aussi arrêtter la matrice raid à la fois dans /etc/rc.d/rc.0 et rc.6 (A propos, puisque ce sont des fichiers identiques en Slackware, ne peut on pas créer un lien symbolique de l'un sur l'autre et seulement en modifier un ?)
Pour vérifier si cela fonctionne, tapez
cat /proc/mdstat
, cela doit indiquer dans quel état se trouve le périphérique md (/dev/md0 raid0 utilise /dev/sda1 et /dev/sdb1).
Testez, testez, testez votre raid. Arrêtez, démarrez, regardez si cela fonctionne comme prévu.
J'ai fais quelques copies imaginaires en utilisant comme paramètres
cp -rap
pour copier une structure complète de répertoires sur la matrice raid. Puis j'ai modifié /etc/fstab pour inclure les nouveaux disques.
Les partitions de 'swap' n'ont pas besoin d'être en striping. Elles le sont automatiquement si une priorité est utilisée. Consultez le Software-RAID-mini-HOWTO et la section Questions Stupides pour des détails. C'est incroyablement simple.
9.2 Mettez en place un ONDULEUR MAINTENANT !
Si vous avez une coupure électrique, vous perdrez votre matrice raid et toutes les données qui s'y trouvent! Vous devez mettre en place un onduleur pour une alimentation de secours. Le but de l'onduleur est de maintenir votre système alimenté pendant une courte période de temps lors des baisses de tension et des coupures électriques. L'onduleur devra informer le système à travers un port série qu'une coupure a eu lieu . Il y a un démon qui tourne en tâche de fond et qui surveille le port série. Lorsqu'il est informé d' une panne électrique, il attend un laps de temps prédéfini (habituellement 5 mn) puis procède à l'arrêt du système. L'idée étant qu'après 5 mn sans alimentation, la coupure sera de longue durée.
Le démon de base de gestion des coupures d'alimentation powerd est fourni avec la plupart des distributions Linux. Essayez "man powerd" pour plus d'informations. C'est un simple démon dont l'action est paramétrée dans /etc/inittab à la rubrique : "que faire lors d'une panne électrique". Simplement, il s'agit d'un onduleur bête, qui ferme seulement un contact de relais connecté au port série. powerd vérifie en permanence si le contact s'est fermé. Si c'est le cas, il éteint le PC après une durée prédéterminée, averti les utilisateurs et peut envoyer un email à root.
J'utilise un onduleur APC intelligent qui communique à travers le port série. Il y a un démon excellent appelé apcupsd qui fonctionne comme un charme. Vous le trouverez là. Lire svp la notice et soyez sympathique avec l'auteur, il a fait un excellent travail (gloire à l'auteur !). L'installation se passe comme un charme et la documentation est excellente.
http://www.dyer.vanderbilt.edu/server/apcupsd/
9.3 RAID0 avec un noyau 2.0.31 à 2.0.34
Je n'en ai aucune idée. J'ai fais la mise à jour de 2.0.30 à 2.0.35 parce que le 2.0.35 est la dernière mise à jour stable.
9.4 RAID0 et le Noyau 2.0.35
Les mdtools se compilent parfaitement sur ma machine personnelle (testé avec un 2.0.30) mais ne se compilent pas sur ma machine de travail (mise à jour en 2.0.35). J'avais toujours une erreur à propos d'un MD_Version (je ne me rappelle pas du nom exact) non défini. Après m'être beaucoup gratté et creusé la tête, j'ai trouvé que /usr/src/include/md.h contenais le numéro de version du pilote md. Avec la version 2.0.30, c'était ver 0.35, avec la 2.0.35 c'est ver 0.36. Si vous faites un "mdadd -V" cela indiquera la version de md avec laquelle mdadd fonctionnera. Donc, j'avais la mauvaise version de mdtools. Vous trouverez ici l'emplacement de la version correcte:
ftp://ftp.kernel.org/pub/linux/daemons/raid/raidtools-0.41.tar.gz
Télécharger le fichier dans /usr/local/src puis faites
tar -zxvf raidtools-0.41.tar.gzun nouveau répertoire sera créé, /usr/local/src/raidtools-0.41
Allez dans ce nouveau répertoire et lisez le fichier INTALL, puis faites
./configure
Je ne me rappelle pas si j'ai eu alors à faire un
make
etmake install
après cela. Je ne peux plus le refaire maintenant que j'ai fais une mise à jour avec un nouveau patch raid.
Vous devriez avoir de nouveaux binaires mkraid et mdadd. Tapez
mdadd -v
pour vérifier que vos binaires ont été mis à jour. Cela devrait indiquer quelque chose commemdadd 0.3d compiled for raidtools-0.41
. Puis lisez le fichier QuickStart.RAID (Démarrage rapide du RAID) pour les dernières informations. Pour raid0, peu de changements depuis les versions précédentes.9.5 Le RAID1 et le noyau 2.0.35
Vous devez patcher le noyau pour valider le RAID 1,4 et 5. Vous trouverez le patch à :
ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/raid0145-19981005-c-2.0.35.tz
Le copier dans le répertoire /usr/src et décompresser le patch:
tar -zxvf raid0145-19981005-c-2.0.35.tz
Vous noterez que la patch cherchera le répertoire /usr/src/linux-2.0.35. Si votre source 2.0.35 est installé dans /usr/src/linux, vous devrez
mv /usr/src/linux /usr/src/linux-2.0.35
puis faire un lien symbolique /usr/src/linux dessus,ln -s /usr/src/linux-2.0.35 /usr/src/linux
Pour appliquer le patch, faire dans /usr/src:
patch -p0 <raid0145-19981005-C-2.0.35
Quelque part la lettre minuscule c est changée en un C majuscule dans mon système? Peut être après tar?)
Vous devez maintenant recompiler le noyau. Quand vous sélectionnez périphériques multiples (multiple devices), vous verrez les options pour le raid 1,4 et 5 disponibles. La démarche est alors :
make menuconfig (ou config ou xconfig) make clean make dep make zImage make modules (si vous utilisez les modules) make modules_installCopier le nouveau noyau à l'emplacement où votre distribution le cherche (/ ou /boot). Je vous suggère d'avoir un noyau de base qui fonctionne sans le raid, et un noyau raid. Vous pouvez modifier lilo.conf pour vous permettre de choisir le noyau avec lequel vous voulez démarrer. Ce n'est pas du tout difficile mais au premier coup d'oeil cela paraît terrifiant. Regardez dans /usr/lib/lilo pour de bons exemples et de la documentation.
Vérifiez par un
dmesg | more
si les pilotes md sont chargés et que le raid0 & 1 sont enregistrés. Tapezcat /proc/mdstat
pour vérifier que vous avez le nouveau pilote md. Vous devriez trouver 16 périphériques md au lieu de 4.Vous devrez mettre à jour votre raidtools. mdadd, /etc/mdtab et mdcreate sont obsolètes ainsi qu'un certain nombres d'autres. Les nouveaux outils sont raidstart, /etc/raidtab et mkraid. A ce niveau la documentation est complètement dépassée.
ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/raidtools-19981005-B-0.90.tar.gz
A télécharger dans /usr/local/src puis
tar -zxvf raidtools-19981005-B-0.90.tar.gz
Un nouveau répertoire, /usr/local/src/raidtools-0.90, sera créé. Se déplacer dedans puis :
./configureA nouveau, je ne me rappelle pas si je j'ai eu à faire
make
etmake install
après cela.9.6 Une nouvelle méthode simplifiée pour le RAID0 et le noyau 2.0.35
Démarche pour mettre en place une matrice raid0 /dev/md0 utilisant deux disques SCSI /dev/sda1 et /dev/sdb1
- Partitionner /dev/sda1 et /dev/sdb1 pour qu'ils aient des tailles de blocs identiques
- Mettre comme type de partition 0xfd. C'est utilisé par le nouveau noyau pour détecter automatiquement le raid au démarrage.
- Modifier le fichier /etc/raidtab comme dans cet exemple (les exemples fournis avec les raidtools oublient quelques informations importantes):
# Exemple de striping # /dev/md0 utilisant /dev/sda1 et /dev/sdb1 raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/sda1 raid-disk 0 device /dev/sdb1 raid-disk 1- Tapez
mkraid -f /dev/md0
IMPORTANT - lisez le message d'erreur et SUIVEZ les conseils à la lettre!- Faites un cat /proc/mdstat pour vérifier que le périphérique md est correct
- Formattez le nouveau périphérique raid par
mke2fs -c /dev/md0
- Créez un répertoire de montage (comme /raidtest) juste pour tester que cela fonctionne
mount /dev/md0 /raidtest
- Copiez un fichier dans /raidtest pour voir si vous pouvez. Si vous avez des LEDs individuelles sur vos disques durs, vous devriez voir l'ensemble des disques travailler.
- Redémarrez et regardez si le noyau arrête automatiquement la matrice raid md0. Vous devriez voir quelques messages défiler sur l'écran. (Tout le monde sait comment lire ces messages de mise en arrêt comme "dmesg" ?)
- Vérifiez, qu'en redémarrant l'ordinateur, le noyau détecte automatiquement les périphériques raid et que /dev/md0 apparaît comme matrice raid0. Si ce n'est pas le cas vérifiez que chacune des étapes précédentes a été suivie, plus particulièrement les étapes 2 et 4.
9.7 Un nouvelle méthode pour le RAID1 et le noyau 2.0.35
Les étapes pour mettre en place une matrice raid1 /dev/md2 utilisant deux paires en striping /dev/md0 (/dev/sda1 + /dev/sdb1) et /dev/md1 (/dev/sdc1 + /dev/sdd1):
- Suivre les étapes ci-dessus pour /dev/md0 et faire la même chose pour /dev/md1. IMPORTANT - Ne montez pas ou ne faites pas un mke2fs de /dev/md0 et /dev/md1. C'était seulement pour tester si le raid0 fonctionnait!
- Modifiez le fichier /etc/raidtab comme dans cet exemple (les exemples fournis avec les raidtools oublient quelques informations importantes):
# Exemple de striping # /dev/md0 utilisant /dev/sda1 et /dev/sdb1 raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/sda1 raid-disk 0 device /dev/sdb1 raid-disk 1 # /dev/md1 utilisant /dev/sdc1 et /dev/sdd1 raiddev /dev/md1 raid-level 0 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/sdc1 raid-disk 0 device /dev/sdd1 raid-disk 1 # Exemple de mirroir (mirroring) # /dev/md2 utilisant /dev/md0 et /dev/md1 raiddev /dev/md2 raid-level 1 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/md0 raid-disk 0 device /dev/md1 raid-disk 1- Tapez "mkraid -f /dev/md2" IMPORTANT - lisez le message d'erreur et SUIVEZ les conseils à la lettre! Cette étape prendra un peu de temps afin que les disques soient à jour l'un et l'autre (plus de 30 mn).
- Faites un cat /proc/mdstat pour vérifier que les périphériques md sont correct
- Formattez le nouveau périphérique raid par
mke2fs -c /dev/md2
- Créez un répertoire de montage (comme /raidtest_mirror)
mount /dev/md2 /raidtest_mirror
- Copiez un fichier dans /raidtest_mirror pour voir si vous pouvez. Si vous avez des LEDs individuelles sur vos disques durs, vous devriez voir tous les disques travailler.
- Ajoutez
raidstart /dev/md2
dans votre fichier /etc/rc.d/rc.s juste avantfsck -a
. Un bon endroit est juste aprèsswapon -a
. A ce moment, le noyau ne détecte pas automatiquement le raid1. Ce sera ajouté au prochain patch.- Modifiez /etc/fstab pout monter /dev/md2 sur /raidtest.
/dev/md2 /raidtest ext2 defaults 1 1- Redémarrez et regardez si le noyau arrête le périphérique raid md0, md1 et md2. Vous devriez voir quelques messages défiler sur l'écran. (Tout le monde sait comment lire ces messages de mise en arrêt comme "dmesg" ?)
- Vérifiez, qu'en redémarrant l'ordinateur, le noyau détecte automatiquement que les périphériques raid /dev/md0 et /dev/md1 apparaîssent comme matrice raid0. Vérifiez que /dev/md2 est détecté comme matrice raid1.
- cat /proc/mdstat pour vérifier que les périphériques md sont corrects.
Vous devriez avoir une matrice raid1 sur raid0 en fonctionnement.
D'autres ressources dont vous pourriez avoir besoin si vous rencontrez des problèmes:
- Les archives raid linux http://www.linuxhq.com/lnxlists/linux-raid/
- Postez un message de news dans comp.os.linux.setup
- Cherchez dans www.dejanews.com - site d'archive des 5 dernières années des envois de news.
- En dernier recours, si vous êtes vraiment coincé, envoyez un email à la liste de diffusion Linux RAID. Pour envoyer une requête, email à mailto:linux-raid@vger.rutgers.edu. Pour rejoindre la liste du noyau RAID, envoyer un email à mailto:majordomo@vger.rutgers.edu et indiquez dans le corps du message
subscribe linux-raid
- Ne m'écrivez pas, tout ce que je sais est indiqué ici!
Copyright © 1998, Eugene Blanchard - Publié dans le numéro 35 de la
Linux Gazette
- Décembre 1998Adaptation française : Frédéric Gacquer (Neuronnexion gacquer@neuronnexion.fr)
Page suivante Page précédente Table des matières