RAID logiciel : mdadm
De wikiGite
Un article de Le wiki de 2 noisettes - noisette.ch.
Mdadm est un logiciel de gestion de RAID logiciel. Il est très complet au point que je le conseille même pour un environnement de production.
Cet article explique comment créer un RAID, assembler plusieurs disques ayant déjà fait parti d'un array, ou comment réagir en cas de panne. Pour les commandes données en exemple, nous ferons du RAID1 avec 2 disques partitionnés en 4, respectivement /boot, swap, / et /home.
Sommaire
Création
Configurer les disques
Une fois le logiciel mdadm installé sur l'ordinateur, il faut configurer les disques
fdisk /dev/sda fdisk /dev/sdb
pour que les partitions qui vont accueillir du RAID soient de type Linux raid autodetect (fd). Puis on va les assembler avec mdadm pour finalement pouvoir les formater et installer le le system dessus.
La configuration des disques sera la suivante :
/dev/*1 --> /boot, 100MB /dev/*2 --> swap, 1-2GB
/ dev/*3 --> /, 20GB
/dev/*4 --> /home, le reste (bien que mettre /var serait plus judicieux sur une gentoo.
Noyau
Compilez le noyau avec les options suivantes (et sélectionner un autre mode de RAID si souhaité)
Device Drivers ---> Multi-device support (RAID and LVM) ---> [*] Multiple devices driver support (RAID and LVM) [*] RAID support [*] RAID-1 (mirroring) mode
Si vous démarrez d'un live CD, il faut charger le module (raid1 par exemple) :
modprobe raid1
Créer les nodes /dev/mdX
mknod /dev/md1 b 9 1 mknod /dev/md3 b 9 3 mknod /dev/md4 b 9 4
Création des arrays
Pour les assembler avec mdadm, la commande ressemble à la suivante
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3 mdadm --create /dev/md4 --level=1 --raid-devices=2 /dev/sda4 /dev/sdb4
Une fois l'array créé, reste les formatage et le montage à l'endroit voulu.
mke2fs /dev/md1 mkreiserfs /dev/md3 mkreiserfs /dev/md4 mkswap /dev/sda2 && mkswap /dev/sdb2 swapon /dev/sda2 && swapon /dev/sdb2 mount /dev/md3 /mnt mkdir -p /mnt/boot && mount /dev/md1 /mnt/boot mkdir -p /mnt/home && mount /dev/md4 /mnt/home
On peut maintenant consulter les informations sur les disques, et insérer ces informations dans /etc/mdadm.conf :
mdadm --detail --scan >> /etc/mdadm.conf
(Ré)Assemblage
Une fois le RAID créé et des données dessus, on ne veut plus nécessairement le reformater et le recréer quand on l'a démonté. La solution sera donc de le réassemblé avec mdadm.
La première étape conciste à examiner une partition pour contrôler si elle fait bien partie d'un RAID (pour ceux qui on une mauvaise mémoire à très court terme) :
mdadm --examine /dev/sda1
La sortie nous dit si oui ou non la partition fait partie d'un RAID, et si oui quels autres disques en font aussi partie. Une fois en possession de ces informations, il nous reste à assembler l'ARRAY :
mdadm --assemble /dev/md1 /dev/sda1 /dev/sdb1 mdadm --assemble /dev/md3 /dev/sda3 /dev/sdb3 mdadm --assemble /dev/md4 /dev/sda4 /dev/sdb4
Reste le montage à l'endroit voulu.
Reconstruction
J'ai fait des tests de tolérence sur le RAID logiciel. J'ai commencé par enlever des disques à chaud (et j'ai pu bien constater qu'IDE était hot-déswap mais pas hot-swap), puis en utilisant l'option --fail pour simuler une panne. Les résultat étaient assez intéressants, mais le problème était de reconstruire le raid après la panne simulée.
Une fois la panne détectée (une véritable panne ou une simulée), on identifie le disque défectueux (avec dmesg ou /proc/mdstat) et on le retire de l'array :
mdadm --manage /dev/md1 --remove /dev/sdb1
Si on n'a pas de SATA pour enlever et remettre un disque à chaud, on arrête la machine et on la redémarre avec le nouveau disque. Puis on ajoute le nouveau disque à l'array :
mdadm --manage /dev/md1 --add /dev/sdb1
Monitoring
Mdadm offre de plus une option de monitoring des arrays : --monitor. Il est dès lors possible de spéficier dans le fichier de configuration un script qui s'exécute en cas d'événement (bon ou mauvais).
Les arguments passés au script seront les suivants :
* $1 : une chaine de caractère qui décrit l'évènement qui s'est produit o 'SparesMissing' : une panne est détectée mais aucun disque de remplacement n'est présent o 'Fail' : un disque est détecté comme déféctueux o 'RebuildStarted' : un nouveau disque est ajouté à l'array et la reconstruction commence o 'Rebuild20' : la reconstruction est à 20% o 'Rebuild40' : la reconstruction est à 40% o 'Rebuild60' : la reconstruction est à 60% o 'Rebuild80' : la reconstruction est à 80% o 'RebuildFinished' : la reconstruction est terminée o 'SpareActive' : un disque de réserve est ajouté à un array * $2 : le nom de la device md : /dev/mdX
$1 et $2 étant le premier et le deuxième argument passé en paramètre.
Notes
- Vérifier d'avoir une version > 2.5.0, car elle souffre d'un gros memory leak quand mdadm est lancé en monitoring.