Il problema
Lo strumento mdadm è stato utilizzato per creare un mirror RAID software utilizzando due dispositivi device-mapper-multipath:
# /sbin/mdadm /dev/md0 --create --verbose --level=1 --raid-devices=2 /dev/mapper/ocrp1 /dev/mapper/ocrmirrorp1
La configurazione è stata quindi confermata:
# /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
Poiché vengono mostrati gli effettivi nomi dei dispositivi multipath (/dev/dm-N), vengono verificate anche le mappature dei nomi più descrittivi (/dev/mapped/ocrp1):
# /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
Poiché questi nomi convenienti vengono mappati sugli stessi dispositivi multipath, l'impostazione si è dimostrata corretta. Dopo un riavvio, mdadm mostra quanto segue:
# /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
Il RAID è attivo ma non utilizza i dispositivi multipath come previsto.
La soluzione
Questo è in realtà un problema di tempismo. Durante l'avvio del sistema, /etc/rcN.d gli script stanno avviando mdadm prima che i dispositivi multipath siano stati rilevati e pronti. Questa è essenzialmente una condizione di competizione perché un numero maggiore di dispositivi multipath impiega più tempo per essere riconosciuto e mdadm potrebbe essere eseguito prima che l'elaborazione multipath sia completata.
La soluzione consiste nell'aggiungere i necessari gestori e dispositivi del file system in /initrd file in modo che questi siano disponibili per il kernel al momento dell'avvio. Ciò consentirà al kernel di iniziare a elaborare i dispositivi multipath prima.
Nota :Il file /vmlinuz del kernel Linux è costruito con il supporto solo per alcuni dispositivi fondamentali. I gestori di file system e i driver di dispositivo comuni vengono compilati separatamente e inseriti nel file /initrd (ramdisk iniziale). Il bootloader GRUB o LILO deve prima mettere in memoria il contenuto del file /initrd e poi caricare il kernel. Il kernel utilizza quindi il ramdisk iniziale per ottenere i driver di dispositivo necessari per accedere al file system di root. Quindi il kernel passa all'utilizzo del filesystem root effettivo e libera la memoria utilizzata dall'immagine di memoria /initrd.Questo approccio intelligente consente a un'immagine del kernel di essere fornita con un set di driver di dispositivo su misura per ciascun sistema, senza sprecare memoria di sistema per contenere il codice del driver del dispositivo e del gestore del file system che non viene mai utilizzato.
Per creare un file /initrd personalizzato che includa il supporto multipath, usa la tecnica seguente:
1. Crea un nuovo file initrd che includa il driver multipath, device-mapper-multipath e HBA:
# /sbin/mkinitrd -v /root/initrd-mp.img 2.6.18-prep --with=multipath --with=dm-multipath --with=lpfc --omit-raid-modules
Per fare lo stesso su CentOS/RHEL 6 e 7, dai un'occhiata al post qui sotto.
Come ricostruire "initramfs" con Multipath in CentOS/RHEL 6 e 72. Verifica il file /etc/mdadm.conf è configurato per il dispositivo 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. Copia la nuova immagine ramdisk nella posizione di avvio prevista dal bootloader:
# /bin/cp /root/initrd-mp.img /boot/
4. Aggiungi una nuova voce al file di configurazione del bootloader /boot/grub/grub.conf per utilizzare la nuova immagine ramdisk:
title MDADM-MP root (hd0,0) kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-mp.imgNota :Modificare la stanza GRUB di esempio come appropriato. La versione del tuo kernel e il dispositivo root saranno sicuramente diversi da questo esempio.
Quando si utilizza CentOS/RHEL 7 e grub2, vedere il post di seguito per i passaggi esatti.
CentOS / RHEL 7:come modificare gli argomenti di GRUB2 con grubby5. Riavvia il sistema e seleziona la voce MDADM-MP dal menu di GRUB.
Suggerimento :Se ancora non vedi i dispositivi multipath in uso, dovrai aggiungere uno script di avvio per eseguire mdadm come ultimo passaggio di avvio. Un modo per farlo è aggiungere il comando necessario a /etc/rc.local se non vuoi scrivere uno script di servizio /etc/init.d/ completo.