Введение

qla2xxx - драйвер поддержки адаптеров FibreChannel (HBA) компании QLogic для ОС Linux

Драйвер идущий в комплекте с оригинальным кернелом не поддерживает режим работы failover, т.е. случай, когда установлены два FC адаптера, но работает только один из них и в случае выхода из строя первого адаптера автоматически начинает работать второй адаптер.

За настройку failover отвечает опция модуля ql2xfailover равная 1 или 0 (включение и отключение соответственно). Поддержка этой опции исключена из оригинального кернела «по различным причинам»©LKML.

Требуется

Тем не менее поддержка failover режима требуется и поэтому придётся самостоятельно подготовить драйвер взятый с ftp сервера ftp://ftp.qlogic.com/outgoing/linux/beta/8.x/

На момент написания статьи я выбрал последнюю по дате версию драйвера ftp://ftp.qlogic.com/outgoing/linux/beta/8.x/qla2xxx-v8.01.07.11-dist.tgz

Для сборки драйвера помимо само собой разумеющихся программ (gcc, make и т.д) потребуются исходники ядра linux-source-2.6.20 (версия в моём случае)

На что обратить внимание

Драйвер компанией QLogic поддерживается для коммерческих дистрибутивов Linux компаний Novell (SLES) и Redhat (RHEL), это накладывает определённые требования на системное окружение.

  1. Интерпретатор sh всегда должен быть bash, в Ubuntu это не так, поэтому нужно явно указывать в скриптах в первой строке необходимый интерпретатор #!/bin/bash
  2. Необходимо наличие файла /etc/modprobe.conf, который отсутствует по умолчанию в Ubuntu, без него скрипт сборки драйвера будет выполнен с ошибками.
  3. Для сборки модуля intermodule.ko необходимо наличие исходных текстов ядра в пути /lib/modules/x.x.xx-xx-xxxxxxx/source, где x..x - текущая версия ядра. Это пожет быть и символическая ссылка на исходный код ядра в каталоге /usr/src. Убедитесь что модуль intermodule.ko собран, без него остальные модули qla2*** не смогут загрузиться.

Сборка драйвера

sudo apt-get install build-essential

gcc, make и прочие необходимые для сборки программы, я к сожалению не могу точно сказать что этого пакета достаточно, т.к. у меня уже настроена среда разработки и установлено множество *-dev пакетов не относящихся к данной статье.

sudo apt-get install linux-source-2.6.20

данный пакет только помещает архив linux-source-2.6.20.tar.bz2 в каталог /usr/src поэтому потребуется его распаковать.

cd /usr/src
tar jxvf linux-source-2.6.20.tar.bz2

Также для сборки драйвера потребуется символическая ссылка на исходники ядра следующего вида:

cd /lib/modules/2.6.20-15-generic/
sudo ln -s /usr/src/linux-source-2.6.20 source

Ещё нужно создать отсутствующий в Ubuntu файл /etc/modprobe.conf в который при сборке будут записаны команды загрузки модулей ядра.

sudo touch /etc/modprobe.conf

Распаковываем архив драйвера qla2xxx и внутренний архив.

tar zxvf qla2xxx-v8.01.07.11-dist.tgz
cd qlogic/
./drvrsetup

В README файле написано что сборка осуществляеся командой extras/build.sh, но в этом файле не верно указан интерпретатор #!/bin/sh, тогда как требуется #!/bin/bash, поэтому исправьте первую строчку файла extras/build.sh в удобном вам редакторе.

cd qla2xxx-8.01.07.11/
vim extras/build.sh

Теперь можно собрать драйвер как написано в README

sudo extras/build.sh install

Драйвер должен быть собран успешно и установлен в каталог /lib/modules/2.6.20-15-generic/kernel/drivers/scsi/qla2xxx/ убедитесь в этом

ls -l /lib/modules/2.6.20-15-generic/kernel/drivers/scsi/qla2xxx/
итого 6548
-rw-r--r-- 1 root root  222834 2007-05-09 14:16 qla2100.ko
-rw-r--r-- 1 root root  230514 2007-05-09 14:16 qla2200.ko
-rw-r--r-- 1 root root  269895 2007-05-09 14:16 qla2300.ko
-rw-r--r-- 1 root root  280891 2007-05-09 14:16 qla2322.ko
-rw-r--r-- 1 root root  350322 2007-05-09 14:16 qla2400.ko
-rw-r--r-- 1 root root  198417 2007-05-09 14:16 qla2xip.ko
-rw-r--r-- 1 root root  341307 2007-05-09 14:16 qla2xxx_conf.ko
-rw-r--r-- 1 root root 4755134 2007-05-09 14:16 qla2xxx.ko

Видим что все файлы с одним и тем же (сегодняшним) временем создания.

Можно принудительно указать опцию ql2xfailover=1 в файле /etc/modprobe.d/options, хотя в README указано, что по умолчанию она включена:

sudo vim /etc/modprobe.d/options
options qla2xxx ql2xfailover=1

Теперь удалите уже загруженный оригинальный драйвер из памяти:

sudo lsmod | grep qla
sudo rmmod qla2xxx
sudo lsmod | grep qla

Загрузите новый модуль и посмотрите как определились ваши диски командой dmesg:

sudo modprobe -v qla2300 (либо другой в зависимости от вашей версии адаптера)
dmesg
[81094.696702] QLogic Fibre Channel HBA Driver
[81094.709841] ACPI: PCI Interrupt 0000:03:03.0[A] -> GSI 72 (level, low) -> IRQ 72
[81094.710132] qla2300 0000:03:03.0: Found an ISP2312, irq 72, iobase 0xffffc20000016000
[81094.710553] qla2300 0000:03:03.0: Configuring PCI space...
[81094.710754] qla2300 0000:03:03.0: Configure NVRAM parameters...
[81094.796008] qla2300 0000:03:03.0: Verifying loaded RISC code...
[81094.859957] qla2300 0000:03:03.0: Allocated (412 KB) for firmware dump...
[81094.883845] qla2300 0000:03:03.0: Waiting for LIP to complete...
[81095.390266] qla2300 0000:03:03.0: LIP reset occured (f7f7).
[81095.398235] qla2300 0000:03:03.0: LIP occured (f7f7).
[81095.414186] qla2300 0000:03:03.0: LOOP UP detected (2 Gbps).
[81095.462060] qla2300 0000:03:03.0: Waiting for LIP to complete...
[81095.485984] qla2300 0000:03:03.0: Topology - (Loop), Host Loop address 0x7d
[81095.534688] scsi5 : qla2xxx
[81095.534781] qla2300 0000:03:03.0: 
[81095.534783]  QLogic Fibre Channel HBA Driver: 8.01.07.11-fo
[81095.534784]   QLogic QLA2340 - 133MHz PCI-X to 2Gb FC, Single Channel
[81095.534786]   ISP2312: PCI-X (133 MHz) @ 0000:03:03.0 hdma+, host#=5, fw=3.03.19 IPX
[81095.534863] ACPI: PCI Interrupt 0000:04:04.0[A] -> GSI 96 (level, low) -> IRQ 96
[81095.534971] qla2300 0000:04:04.0: Found an ISP2312, irq 96, iobase 0xffffc20000018000
[81095.535137] qla2300 0000:04:04.0: Configuring PCI space...
[81095.535363] scsi 5:0:0:0: Direct-Access     IBM      1722-600         0520 PQ: 0 ANSI: 3
[81095.535373] qla2300 0000:03:03.0: scsi(5:0:0:0): Enabled tagged queuing, queue depth 32.
[81095.535416] qla2300 0000:04:04.0: Configure NVRAM parameters...
[81095.537260] scsi 5:0:0:1: Direct-Access     IBM      1722-600         0520 PQ: 0 ANSI: 3
[81095.537266] qla2300 0000:03:03.0: scsi(5:0:0:1): Enabled tagged queuing, queue depth 32.
[81095.560186] SCSI device sda: 426975744 512-byte hdwr sectors (218612 MB)
[81095.560396] sda: Write Protect is off
[81095.560403] sda: Mode Sense: 6f 00 10 08
[81095.560774] SCSI device sda: write cache: enabled, read cache: enabled, supports DPO and FUA
[81095.561825] SCSI device sda: 426975744 512-byte hdwr sectors (218612 MB)
[81095.562005] sda: Write Protect is off
[81095.562009] sda: Mode Sense: 6f 00 10 08
[81095.562350] SCSI device sda: write cache: enabled, read cache: enabled, supports DPO and FUA
[81095.562360]  sda:<6>qla2300 0000:04:04.0: Verifying loaded RISC code...
[81095.681428] qla2300 0000:04:04.0: Allocated (412 KB) for firmware dump...
[81095.705304] qla2300 0000:04:04.0: Waiting for LIP to complete...
[81096.211722] qla2300 0000:04:04.0: LIP reset occured (f7f7).
[81096.211733] qla2300 0000:04:04.0: LIP occured (f7f7).
[81096.219693] qla2300 0000:04:04.0: LOOP UP detected (2 Gbps).
[81096.251614] qla2300 0000:04:04.0: Topology - (Loop), Host Loop address 0x2
[81096.300256] scsi6 : qla2xxx
[81096.300347] qla2300 0000:04:04.0: 
[81096.300349]  QLogic Fibre Channel HBA Driver: 8.01.07.11-fo
[81096.300350]   QLogic QLA2340 - 133MHz PCI-X to 2Gb FC, Single Channel
[81096.300352]   ISP2312: PCI-X (133 MHz) @ 0000:04:04.0 hdma+, host#=6, fw=3.03.19 IPX
[81097.529137]  unknown partition table
[81097.529243] sd 5:0:0:0: Attached scsi disk sda
[81097.529310] sd 5:0:0:0: Attached scsi generic sg0 type 0
[81097.531164] SCSI device sdb: 426975744 512-byte hdwr sectors (218612 MB)
[81097.531716] sdb: Write Protect is off
[81097.531722] sdb: Mode Sense: 6f 00 10 08
[81097.532772] SCSI device sdb: write cache: enabled, read cache: enabled, supports DPO and FUA
[81097.536472] SCSI device sdb: 426975744 512-byte hdwr sectors (218612 MB)
[81097.536665] sdb: Write Protect is off
[81097.536669] sdb: Mode Sense: 6f 00 10 08
[81097.537006] SCSI device sdb: write cache: enabled, read cache: enabled, supports DPO and FUA
[81097.537012]  sdb: sdb1
[81099.219023] sd 5:0:0:1: Attached scsi disk sdb
[81099.219090] sd 5:0:0:1: Attached scsi generic sg1 type 0

Как видим созданы только 2 диска sda и sdb, а не 4 (идентичных попарно) как было до установки драйвера.

ls /dev/sd*
/dev/sda  /dev/sdb  /dev/sdb1  /dev/sde  /dev/sde1  /dev/sde2  /dev/sde5

Фиксация изменений

Нужно собрать новый файл initrd, так как в старом находится старая версия драйвера.

sudo update-initramfs -u

Теперь после перезагрузки будет автоматически загружен установленный нами драйвер.

Советы по монтированию

Небольшой совет по монтированию жёстких дисков. Монтируйте диски по их udev идентификатору UUID, это позволит вам избежать проблем, которые могут возникнуть, если диски поменяют свою букву (с /dev/sde на /dev/sdc например) из-за добавления или удаления дополнительных дисков.

Узнать UUID раздела диска можно командой (для /dev/sda1)

sudo vol_id -u /dev/sda1

Строчка /etc/fstab может выглядеть следующим образом

UUID=d3dcf7c9-1c34-426c-ae1c-1abba7b29e02 /               ext3    defaults,errors=remount-ro 0       1

Заключение

Всё вышеуказанное было сделано в рамках переноса сервера Oracle с SLES9 на Ubuntu Feisty.

По сравнению с жутко платным и при этом кривым SLES9 (Oracle так и не заработал на нём в полном объёме из-за ошибок линковки, но это тема другого разговора) Ubuntu вызывает эстетическое наслаждение, посмотрим как оно будет в работе.


Персональные настройки
Яндекс цитирования