Le problème
L'outil mdadm a été utilisé pour créer un miroir RAID logiciel à l'aide de deux périphériques device-mapper-multipath :
# /sbin/mdadm /dev/md0 --create --verbose --level=1 --raid-devices=2 /dev/mapper/ocrp1 /dev/mapper/ocrmirrorp1
La configuration a alors été validée :
# /sbin/mdadm --detail /dev/md0 ... Number Major Minor RaidDevice State 0 253 2 0 active sync /dev/dm-2 1 253 3 1 active sync /dev/dm-3
Étant donné que les noms réels des périphériques multipath (/dev/dm-N) sont affichés, les mappages des noms les plus conviviaux (/dev/mapped/ocrp1) sont également vérifiés :
# /bin/ls -l /dev/mpath/ lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrp1 -> ../dm-2 lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrmirrorp1 -> ../dm-3
# /bin/ls -l /dev/mapper/ brw-rw---- 1 root disk 253, 2 Apr 23 11:15 ocrp1 brw-rw---- 1 root disk 253, 3 Apr 23 11:15 ocrmirrorp1
Étant donné que ces noms pratiques correspondent aux mêmes périphériques multivoies, la configuration s'est avérée correcte. Après un redémarrage, mdadm affiche ce qui suit :
# /sbin/mdadm --detail /dev/md0 ... Number Major Minor RaidDevice State 0 8 97 0 active sync /dev/sdg1 1 8 113 1 active sync /dev/sdh1
Le RAID est actif mais n'utilise pas les périphériques multivoies comme prévu.
La solution
Il s'agit en fait d'un problème de timing. Lors du démarrage du système, le fichier /etc/rcN.d les scripts démarrent mdadm avant que les périphériques multivoies aient été détectés et prêts. Il s'agit essentiellement d'une condition de concurrence, car un plus grand nombre de périphériques multi-accès prend plus de temps à reconnaître et mdadm peut être exécuté avant la fin du traitement multi-accès.
La solution consiste à ajouter les gestionnaires et périphériques de système de fichiers requis dans le fichier /initrd fichier afin qu'ils soient disponibles pour le noyau au démarrage. Cela permettra au noyau de commencer à traiter les périphériques multivoies plus tôt.
Remarque :Le fichier /vmlinuz du noyau Linux est construit avec un support pour seulement quelques périphériques très fondamentaux. Les gestionnaires de système de fichiers et les pilotes de périphériques communs sont compilés séparément et regroupés dans le fichier /initrd (disque virtuel initial). Le chargeur de démarrage GRUB ou LILO doit d'abord placer le contenu du fichier /initrd en mémoire, puis charger le noyau. Le noyau utilise ensuite le disque virtuel initial pour obtenir les pilotes de périphériques nécessaires pour accéder au système de fichiers racine. Ensuite, le noyau passe à l'utilisation du système de fichiers racine réel et libère la mémoire utilisée par l'image mémoire /initrd.Cette approche intelligente permet à une image du noyau d'être fournie avec un ensemble de pilotes de périphériques adaptés à chaque système, sans gaspiller de mémoire système pour contenir le code du pilote de périphérique et du gestionnaire de système de fichiers qui n'est jamais utilisé.
Pour créer un fichier /initrd personnalisé incluant le support multipath, utilisez la technique ci-dessous :
1. Créez un nouveau fichier initrd comprenant le pilote multipath, device-mapper-multipath et HBA :
# /sbin/mkinitrd -v /root/initrd-mp.img 2.6.18-prep --with=multipath --with=dm-multipath --with=lpfc --omit-raid-modules
Pour faire la même chose sur CentOS/RHEL 6 et 7, veuillez consulter le message ci-dessous.
Comment reconstruire le "initramfs" avec Multipath dans CentOS/RHEL 6 et 72. Vérifiez le fichier /etc/mdadm.conf est configuré pour le périphérique RAID :
# /bin/cat /etc/mdadm.conf DEVICE /dev/mapper/* ARRAY /dev/md0 uuid=ccfe8a98:ea584ff2:2fad9d51:305ea2da devices=/dev/mapper/ocrp1,/dev/mapper/ocrmirrorp1 level=raid1
3. Copiez la nouvelle image du disque virtuel dans l'emplacement de démarrage attendu par le chargeur de démarrage :
# /bin/cp /root/initrd-mp.img /boot/
4. Ajoutez une nouvelle entrée au fichier de configuration du chargeur de démarrage /boot/grub/grub.conf pour utiliser la nouvelle image de disque virtuel :
title MDADM-MP root (hd0,0) kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-mp.imgRemarque :Modifiez l'exemple de strophe GRUB selon les besoins. Votre version de noyau et votre périphérique racine seront certainement différents de cet exemple.
Lorsque vous utilisez CentOS/RHEL 7 et grub2, veuillez consulter le message ci-dessous pour connaître les étapes exactes.
CentOS / RHEL 7 :Comment modifier les arguments GRUB2 avec grubby5. Redémarrez votre système et sélectionnez l'entrée MDADM-MP dans le menu GRUB.
Astuce :Si vous ne voyez toujours pas les périphériques multipath utilisés, vous devrez ajouter un script de démarrage pour exécuter mdadm comme dernière étape de démarrage. Une façon de procéder consiste à ajouter la commande nécessaire à /etc/rc.local si vous ne souhaitez pas écrire un script de service /etc/init.d/ complet.