"No module qla2300 found" o "No module qla2400 found"
Entorno
HARDWARE:
Servidor X8420
4 x AMD Dual Core 2,4Ghz
RAM 8 GB
2 x 73 GB
Tarjeta PCI Qlogic Dual Port SG-XPCIE2FC-QB4-Z
STORAGE — STORAGETEK FLX 380
SOFTWARE:
OS: Red Hat AS 4 Update 4 i386
Driver de Qlogic:
Author: QLogic Corporation
Description: QLogic Fibre Channel HBA Driver
Version: 8.02.08 D99C39AD843810FABC4857E
Síntomas:
Cuando queremos instalar el gestor de multipathing RDAC versión 09.01.B2.31 la respuesta del sistema es:
No module qla2300 found
ó
No module qla2400 found
Este problema esta reportado de forma similar con otro sistema operativo superior en un Bug de SUN:
Document ID: 6654423
Title: RDAC install fails. Rhel5_U1 with "No module qla2300 found" using out of box qla driver V8.01.07-k7
Copyright Notice: Copyright © 2008 Sun Microsystems, Inc. All Rights Reserved
Update Date: Mon Jan 28 00:00:00 MST 2008
Sin ninguna solución hasta el momento.
SOLUCIONES
Opciones alternativas
Actualizar Driver de Qlogic a la versión 8.02.14 superior a la nuestra. No nos sirvió de nada ya que nuestro sistema operativo no parece reconocer los dispositivos una vez implementado este driver.
Usar “device-mapper-multipathing” es una opción alternativa a RDAC, pero desgraciadamente no está soportado por la librería Sun Storagetek 6540 alias Storagetek FLX380
Workaround generado
En principio si miramos la salida del comando “lsmod”
Module Size Used by
hangcheck_timer 7641 0
md5 8001 1
ipv6 241761 28
oracleasm 48020 1
autofs4 22725 0
acpiphp 28245 0
sunrpc 143397 1
joydev 14209 0
dm_mirror 31645 0
dm_mod 60357 1 dm_mirror
sr_mod 20709 1
usb_storage 62217 1
button 10449 0
battery 12869 0
ac 8773 0
ohci_hcd 23889 0
ehci_hcd 32069 0
e1000 109113 0
ext3 118729 5
jbd 59609 1 ext3
mppVhba 108032 11
qla2xxx 969812 4
qla2xxx_conf 305924 1
lpfc 158269 0
scsi_transport_fc 12097 1 lpfc
mptsas 13389 6
mptscsi 44125 1 mptsas
mptbase 61345 2 mptsas,mptscsi
sg 38113 0
sd_mod 20545 29
scsi_mod 117709 11 sr_mod,usb_storage,qla2xxx,lpfc,scsi_transport_fc,mptsas,mptscsi,sg,sd_mod
Vemos que el driver está cargado como “qla2xxx” que incluye todos los modelos de qla2xxx en modo de alias, esto lo podemos ver en el fichero “/etc/modprobe.conf”:
alias scsi_hostadapter mptsas
alias scsi_hostadapter1 lpfc
alias usb-controller ehci-hcd
alias usb-controller1 ohci-hcd
install qla2xxx /sbin/modprobe qla2xxx_conf; /sbin/modprobe –ignore-install qla2xxx
remove qla2xxx /sbin/modprobe -r –first-time –ignore-remove qla2xxx && { /sbin/modprobe -r –ignore-remove qla2xxx_conf; }
options qla2xxx ql2xfailover=0
alias qla2100 qla2xxx
alias qla2200 qla2xxx
alias qla2300 qla2xxx
alias qla2322 qla2xxx
alias qla2400 qla2xxx
alias scsi_hostadapter2 qla2xxx_conf
alias scsi_hostadapter3 qla2xxx
Con esto cualquier cosa que preguntara al sistema por uno de estos módulos debería ser redirigido al modulo principal “qla2xxx”
Sin embargo la instalación de RDAC no parece aceptar este comportamiento y no da continuamente un error.
La solución es darle a RDAC lo que pide de manera que podamos engañarlo e instale porque al fin y al cabo los dispositivos y sus WWN son visibles.
ATENCIÓN: Realizar todos los pasos desconectando la fibra y reescaneando el sistema sin conexión a la SAN puesto que si no los reinicios con los discos sin sistema de fichero pueden llegar a tardar 2 horas.
- Para cargar los módulos “falsos” necesitamos encontrar los que nos ha generado la instalación del driver de qlogic. Para ello usamos los comandos “find” o “locate”. En mi caso:
# updatedb
# locate qla2300.ko
# locate qla2400.ko
Con el output de estos comandos sabremos donde se encuentran situados los ficheros que necesitamos.
- Con el comando “uname -r” vemos cual es la versión de kernel que usamos en mi caso “2.6.9-42.ELsmp”.
- Copiamos los ficheros “qla2300.ko” y “qla2400.ko” a un path para modulos de drivers del kernel que estamos usando desde el origen que encontramos en el paso 1.
En mi caso:
# cp qla2*.ko /lib/modules/2.6.9-42.EL/kernel/drivers/scsi/qla2xxx/
- Modificamos el fichero “/etc/modprobe.conf” para que el kernel intente cargar estos módulos. De la siguiente forma:
alias scsi_hostadapter mptsas
alias scsi_hostadapter1 lpfc
alias usb-controller ehci-hcd
alias usb-controller1 ohci-hcd
install qla2xxx /sbin/modprobe qla2xxx_conf; /sbin/modprobe –ignore-install qla2xxx
remove qla2xxx /sbin/modprobe -r –first-time –ignore-remove qla2xxx && { /sbin/modprobe -r –ignore-remove qla2xxx_conf; }
options qla2xxx ql2xfailover=0
alias qla2100 qla2xxx
alias qla2200 qla2xxx
alias qla2300 qla2xxx
alias qla2322 qla2xxx
alias qla2400 qla2xxx
alias scsi_hostadapter2 qla2xxx_conf
alias scsi_hostadapter3 qla2xxx
alias scsi_hostadapter4 qla2300
alias scsi_hostadapter5 qla2400
- Aplicamos los cambios a la imagen de arranque del kernel de Linux y reiniciamos para comprobar todo aunque podríamos cargar los módulos directamente:
cd /boot
cp -f initrd-2.6.9-42.ELsmp.img initrd-2.6.9-42.ELsmp.img.bak
mkinitrd -f initrd-2.6.9-42.ELsmp.img 2.6.9-42.ELsmp
init 6
- Veremos unos errores de estos módulos durante el arranque, normales ya que hemos puesto unos módulos inservibles y no tenemos que hacer caso. Nuestros módulos cargados y viéndolos por el comando “lsmod” serán:
Module Size Used by
hangcheck_timer 7641 0
md5 8001 1
ipv6 241761 28
oracleasm 48020 1
autofs4 22725 0
acpiphp 28245 0
sunrpc 143397 1
joydev 14209 0
dm_mirror 31645 0
dm_mod 60357 1 dm_mirror
sr_mod 20709 1
usb_storage 62217 1
button 10449 0
battery 12869 0
ac 8773 0
ohci_hcd 23889 0
ehci_hcd 32069 0
e1000 109113 0
ext3 118729 5
jbd 59609 1 ext3
mppVhba 108032 11
qla2xxx 969812 4
qla2xxx_conf 305924 1
lpfc 158269 0
scsi_transport_fc 12097 1 lpfc
mptsas 13389 6
mptscsi 44125 1 mptsas
mptbase 61345 2 mptsas,mptscsi
mppUpper 88384 1 mppVhba
sg 38113 0
sd_mod 20545 29
scsi_mod 117709 11 sr_mod,usb_storage,qla2xxx,lpfc,scsi_transport_fc,mptsas,mptscsi,sg,sd_mod
Por tanto vemos que sigue siendo igual que antes.
- Procedemos a instalar y comprobaremos que sin problemas RDAC con los comandos en orden:
# make clean
# make
# make uninstall
# make install
Veremos que aunque no tenemos los módulos cargados y la situación aparentemente en el OS es la misma, el error de “No module qla2???. found” desaparece.
- Ya tenemos el RDAC instalado. Tal como nos dice al final de la instalación debemos modificar el fichero “/boot/grub/grub.conf” tal como nos explica el instalador de RDAC y reiniciamos con “init 6”. El mio queda de la siguiente forma:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda1
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS with mpp (2.6.9-42.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.ELsmp ro root=LABEL=/ rhgb quiet
initrd /mpp-2.6.9-42.ELsmp.img
title Red Hat Enterprise Linux AS-up (2.6.9-42.EL)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.EL ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.9-42.EL.img
title Red Hat Enterprise Linux AS (2.6.9-42.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.ELsmp ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.9-42.ELsmp.img
- Una vez reiniciado el sistema se vemos que todos los módulos pertenecientes al RDAC están cargados correctamente. Para ello usamos el comando “lsmod”:
Module Size Used by
hangcheck_timer 7641 0
md5 8001 1
ipv6 241761 28
oracleasm 48020 1
autofs4 22725 0
acpiphp 28245 0
sunrpc 143397 1
joydev 14209 0
dm_mirror 31645 0
dm_mod 60357 1 dm_mirror
sr_mod 20709 1
usb_storage 62217 1
button 10449 0
battery 12869 0
ac 8773 0
ohci_hcd 23889 0
ehci_hcd 32069 0
e1000 109113 0
ext3 118729 5
jbd 59609 1 ext3
mppVhba 108032 11
qla2xxx 969812 4
qla2xxx_conf 305924 1
lpfc 158269 0
scsi_transport_fc 12097 1 lpfc
mptsas 13389 6
mptscsi 44125 1 mptsas
mptbase 61345 2 mptsas,mptscsi
mppUpper 88384 1 mppVhba
sg 38113 0
sd_mod 20545 29
scsi_mod 117709 11 sr_mod,usb_storage,mppVhba,qla2xxx,lpfc,scsi_transport_fc,mptsas,mptscsi,mppUpper,sg,sd_mod
Con estos pasos ya tenemos listo nuestro sistema con RDAC instalado. Ya solo nos quedaría darle las unidades redescubrirlas con comandos de qlogic y mapearlas con RDAC.
APÉNDICE 1 COMANDOS UTILES
mppBusRescan
Comando de RDAC para escanear los dispositivos de y asociar los WWN correspondientes de los multipathing
lsvdev
Comando de RDAC que nos da el hardware asociado a cada dispositivo del sistema en multipathing con su LUN correspondiente. Ejemplo:
Array Name Lun sd device
————————————-
FLX380SAAS 0 -> /dev/sdb
FLX380SAAS 1 -> /dev/sdc
FLX380SAAS 2 -> /dev/sdd
FLX380SAAS 3 -> /dev/sde
FLX380SAAS 4 -> /dev/sdf
mppUtil
Comando del paquete RDAC
-a
Muestra todos los arrays conectados
-g <id>
Muestra la información del array dado dado por el id y los path a el de cada LUN. Ejemplo:
Hostname = XXXXX
Domainname = (none)
Time = GMT 09/22/2008 08:13:30
MPP Information:
—————-
ModuleName: FLX380SAAS SingleController: N
VirtualTargetID: 0x000 ScanTriggered: N
ObjectCount: 0x000 AVTEnabled: Y
WWN: 600a0b8000119ade0000000045d51e51 RestoreCfg: N
ModuleHandle: none Page2CSubPage: Y
FirmwareVersion: 6.15.16.0
ScanTaskState: 0x00000000
Controller ‘A’ Status:
———————–
ControllerHandle: none ControllerPresent: Y
UTMLunExists: N Failed: N
NumberOfPaths: 1 FailoverInProg: N
ServiceMode: N
Path #1
———
DirectoryVertex: present Present: Y
PathState: OPTIMAL
hostId: 2, targetId: 0, channelId: 0
Controller ‘B’ Status:
———————–
ControllerHandle: none ControllerPresent: Y
UTMLunExists: N Failed: N
NumberOfPaths: 1 FailoverInProg: N
ServiceMode: N
Path #1
———
DirectoryVertex: present Present: Y
PathState: OPTIMAL
hostId: 1, targetId: 0, channelId: 0
Lun Information
—————
Lun #0 – WWN: 600a0b8000119ade00005d8048c0acd0
—————-
LunObject: present CurrentOwningPath: A
RemoveEligible: N BootOwningPath: A
NotConfigured: N PreferredPath: A
DevState: OPTIMAL ReportedPresent: Y
ReportedMissing: N
NeedsReservationCheck: N
NotReady: N
Busy: N
Quiescent: N
Controller ‘A’ Path
——————–
NumLunObjects: 1 RoundRobinIndex: 1
Path #1: LunPathDevice: present
IoCount: 0
DevState: OPTIMAL
RemoveState: 0x0 StartState: 0x1 PowerState: 0x0
Controller ‘B’ Path
——————–
NumLunObjects: 1 RoundRobinIndex: 0
Path #1: LunPathDevice: present
IoCount: 0
DevState: OPTIMAL
RemoveState: 0x0 StartState: 0x1 PowerState: 0x0
-g <id> | grep “Lun #”
Obtendremos solo los LUN y WWN de cada grupo de multipathing. Ejemplo:
Lun #0 – WWN: 600a0b8000119ade00005d8048c0acd0
Lun #1 – WWN: 600a0b8000119ade00005d8448c0acee
Lun #2 – WWN: 600a0b8000119ade00005d8748c0ad08
Lun #3 – WWN: 600a0b8000119ad80000da9e48c0ae89
Lun #4 – WWN: 600a0b8000119ad80000daa348c0aed7
Lun #5 – WWN: 600a0b8000119ade00005d8a48c0ad30
Lun #6 – WWN: 600a0b8000119ade00005d8d48c0ad48
Lun #7 – WWN: 600a0b8000119ade00005d9048c0ad8a
Lun #8 – WWN: 600a0b8000119ad80000da9948c0ae59
Lun #9 – WWN: 600a0b8000119ade00005d9648c0adb4
Lun #10 – WWN: 600a0b8000119ade00005d9c48c0adfe
-S
Muestra si algún camino ha fallado
-C
Escanea de nuevo el array
./ql-dynamic-tgt-lun-disc.sh -s -r
Alternativa al de QLogic a “scli” y “SANSurfer” con la sencillez de hacer todo en un paso. Antes tenemos que estar seguro que el sistema ve las HBA.
Si bien no compartimos la tecnología, tengo que decirte que da gusto ver artículos de este estilo, tan bien llevados a la práctica y en donde se nota la experiencia real en el producto.
Solo te falta venir para Argentina!
Saludos!