Mark Haney wrote:
I just rebooted one of my SAN hosts, running FC6, and had it boot
into
the latest FC6 kernel 2.6.22-9. After the boot, the primary SAN
partitions it mounts weren't available. A check through
/var/log/messages revealed this little nugget:
Nov 9 10:01:04 blowingrock kernel: QLogic Fibre Channel HBA Driver
Nov 9 10:01:04 blowingrock kernel: e1000: eth0: e1000_probe: Intel(R)
PRO/1000 Network Connection
Nov 9 10:01:04 blowingrock kernel: ACPI: PCI Interrupt 0000:01:01.0[A]
-> GSI 28 (level, low) -> IRQ 28
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Found an
ISP2300, irq 28, iobase 0xffffc20001438000
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Configuring
PCI space...
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Configure
NVRAM parameters...
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Verifying
loaded RISC code...
Nov 9 10:01:04 blowingrock kernel: ACPI: PCI Interrupt 0000:02:04.1[B]
-> GSI 26 (level, low) -> IRQ 26
Nov 9 10:01:04 blowingrock kernel: e1000: 0000:02:04.1: e1000_probe:
(PCI:33MHz:64-bit) 00:04:23:a8:96:d7
Nov 9 10:01:04 blowingrock kernel: Floppy drive(s): fd0 is 1.44M
Nov 9 10:01:04 blowingrock kernel: FDC 0 is a post-1991 82077
Nov 9 10:01:04 blowingrock kernel: e1000: eth1: e1000_probe: Intel(R)
PRO/1000 Network Connection
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Firmware image
unavailable.
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Firmware
images can be retrieved from:
ftp://ftp.qlogic.com/outgoing/linux/firmware/.
Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Failed to
initialize adapter
So, in my panic, I reset grub to point back to the existing .20 kernel
and all came up just fine:
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Found an
ISP2300, irq 28, iobase 0xffffc20000022000
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Configuring
PCI space...
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Configure
NVRAM parameters...
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Verifying
loaded RISC code...
Nov 9 10:31:06 blowingrock kernel: Intel(R) PRO/1000 Network Driver -
version 7.3.15-k2-NAPI
Nov 9 10:31:06 blowingrock kernel: Copyright (c) 1999-2006 Intel
Corporation.
Nov 9 10:31:06 blowingrock kernel: input: PC Speaker as /class/input/input3
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Allocated (412
KB) for firmware dump...
Nov 9 10:31:06 blowingrock kernel: scsi2 : qla2xxx
Nov 9 10:31:06 blowingrock kernel: hdc: ATAPI 52X CD-ROM drive, 128kB
Cache, UDMA(33)
Nov 9 10:31:06 blowingrock kernel: Uniform CD-ROM driver Revision: 3.20
Nov 9 10:31:06 blowingrock kernel: Floppy drive(s): fd0 is 1.44M
Nov 9 10:31:06 blowingrock kernel: FDC 0 is a post-1991 82077
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: LOOP UP
detected (2 Gbps).
So my question, WTH is going on here? I've obviously missed a memo or
something.
Well.. what's going on is that the kernel is trying to load the firmware
for the qla2xxx driver from the initrd, but it cannot find it.
It seems that the firmware is not inside the initrd (unlike your other
kernel, which does have this firmware in its initrd).
Why this is happening is unclear to me, because the firmware should be
present inside the initrd, however you can create an initrd yourself for
the new kernel (initrd-2.6.22.7-57.fc6.img should be replaced by your
initrd of the new kernel):
mkdir /root/new_initrd
cp /boot/initrd-2.6.22.7-57.fc6.img
/root/new_initrd/initrd-2.6.22.7-57.fc6.img.gz
cd /root/new_initrd
gunzip initrd-2.6.22.7-57.fc6.img.gz
mkdir img
cd img
cat ../initrd-2.6.22.7-57.fc6.img | cpio -iv
You should now have the contents of the initrd in the directory
/root/new_initrd/img/
You can get the firmware from the website, which is located inside your
logfiles or use one you might already have in /lib/firmware/. Now let's
put the firmware into the initrd and put it back together:
mkdir /root/new_initrd/img/lib/firmware
cp the-firmware /root/new_initrd/img/lib/firmware
cd /root/new_initrd/img/
find . -depth -print | cpio -oc > ../initrd-2.6.22.7-57.fc6.fixed.img ;
cd .. ; gzip initrd-2.6.22.7-57.fc6.fixed.img
cd ..
mv initrd-2.6.22.7-57.fc6.fixed.img.gz initrd-2.6.22.7-57.fc6.fixed.img
cp initrd-2.6.22.7-57.fc6.fixed.img /boot/
You should now have a new initrd with the correct firmware. It's a bit
of a hassle, and there should be a better solution to this
problem, but it *is* a solution :)
After changing your initrd in /etc/grub.conf, it should work again.
Hope it all works out.