El problema
La herramienta mdadm se usó para crear un espejo RAID de software usando dos dispositivos de mapeo de dispositivos de múltiples rutas:
# /sbin/mdadm /dev/md0 --create --verbose --level=1 --raid-devices=2 /dev/mapper/ocrp1 /dev/mapper/ocrmirrorp1
Luego se confirmó la configuración:
# /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
Dado que se muestran los nombres reales de los dispositivos de múltiples rutas (/dev/dm-N), también se verifican las asignaciones de los nombres más amigables (/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
Dado que estos nombres convenientes se asignan a los mismos dispositivos de rutas múltiples, se ha demostrado que la configuración es correcta. Después de reiniciar, mdadm muestra lo siguiente:
# /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
El RAID está activo pero no está utilizando los dispositivos de rutas múltiples como se esperaba.
La solución
Esto es en realidad un problema de tiempo. Durante el arranque del sistema, el /etc/rcN.d las secuencias de comandos están iniciando mdadm antes de que los dispositivos de rutas múltiples hayan sido detectados y listos. Esto es esencialmente una condición de carrera porque una gran cantidad de dispositivos de rutas múltiples tardan más en reconocerse y mdadm puede ejecutarse antes de que se complete el procesamiento de rutas múltiples.
La solución es agregar los controladores y dispositivos del sistema de archivos necesarios en /initrd archivo para que estos estén disponibles para el kernel en el momento del arranque. Esto permitirá que el kernel comience a procesar antes los dispositivos de rutas múltiples.
Nota :El archivo /vmlinuz del kernel de Linux está construido con soporte solo para algunos dispositivos muy fundamentales. Los controladores del sistema de archivos y los controladores de dispositivos comunes se compilan por separado y se empaquetan en el archivo /initrd (ramdisk inicial). El cargador de arranque GRUB o LILO primero debe colocar el contenido del archivo /initrd en la memoria y luego cargar el kernel. Luego, el kernel usa el ramdisk inicial para obtener los controladores de dispositivo necesarios para acceder al sistema de archivos raíz. Luego, el kernel cambia a usar el sistema de archivos raíz real y libera la memoria utilizada por la imagen de memoria /initrd.Este enfoque inteligente permite proporcionar una imagen de kernel con un conjunto de controladores de dispositivo adaptado a cada sistema, sin desperdiciar la memoria del sistema para almacenar el controlador del dispositivo y el código del controlador del sistema de archivos que nunca se utiliza.
Para crear un archivo /initrd personalizado que incluya la compatibilidad con rutas múltiples, utilice la siguiente técnica:
1. Cree un nuevo archivo initrd que incluya el controlador multirrutas, mapeador de dispositivos y HBA:
# /sbin/mkinitrd -v /root/initrd-mp.img 2.6.18-prep --with=multipath --with=dm-multipath --with=lpfc --omit-raid-modules
Para hacer lo mismo en CentOS/RHEL 6 y 7, consulte la publicación a continuación.
Cómo Reconstruir los “initramfs” con Multipath en CentOS/RHEL 6 y 72. Verifique el archivo /etc/mdadm.conf está configurado para el 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. Copie la nueva imagen ramdisk en la ubicación de arranque esperada por el gestor de arranque:
# /bin/cp /root/initrd-mp.img /boot/
4. Agregue una nueva entrada al archivo de configuración del cargador de arranque /boot/grub/grub.conf para usar la nueva imagen 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 :Cambie la estrofa de GRUB de ejemplo según corresponda. La versión de su kernel y el dispositivo raíz ciertamente serán diferentes a los de este ejemplo.
Cuando use CentOS/RHEL 7 y grub2, consulte la publicación a continuación para conocer los pasos exactos.
CentOS / RHEL 7:Cómo modificar los argumentos de GRUB2 con grubby5. Reinicie su sistema y seleccione la entrada MDADM-MP del menú de GRUB.
Sugerencia :Si aún no ve que se están utilizando los dispositivos de rutas múltiples, deberá agregar una secuencia de comandos de inicio para ejecutar mdadm como el último paso de arranque. Una forma de hacerlo es agregar el comando necesario a /etc/rc.local si no desea escribir un script de servicio /etc/init.d/ completo.