Установка Linux Gentoo на Intel® RAID Controller SASMF8I
Желание написать данный howto возникло после потраченных 6-ти часов на запуск сего чуда под Linux Gentoo.
Описание проблемы
Описание контроллера можно найти на http://www.intel.com/Products/Server/RAID-controllers/SASMF8I/SASMF8I-overview.htm сайте Intel* Первая проблема заключается в том, что драйвер к контроллеру не является частью ядра, а распространяется в бинарном виде, и в списке поддерживаемых систем gentoo не наблюдается.
- Вторая проблема лежит в идентификации контроллера, которая капитально сбивает с толку: lspci идентифицирует его как
02:00.0 RAID bus controller: LSI Logic / Symbios Logic [MegaRAID] SAS 8208ELP/8208ELP (rev 08) Но на сайте LSI нужного драйвера к свежему ядру найти не получится....
== Описание решения ==
Не буду описывать все предпринятые действия, опишу сразу правильные шаги по установке Linux Gentoo на данный RAID контроллер. Вместо того, чтобы искать драйвер по выводу lspci, обратите внимание на то, что написано на коробкеВ моем случае это было Intel® RAID Controller SASMF8I. Это и есть отправная точка.
- Идем на сайт Intel, и качаем свежую версию: http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&ProdId=2972&DwnldID=18038&lang=eng Intel® ESRT-2 SATA & SAS Software RAID Driver for Linux от 8/28/2009
.
- В полученном архиве с названием ESRT2_Linux_v.13.10.0708.2009.zip находятся бинарные драйверы для !RedHat & [CentOS]. На к превеликому счастью, там есть и окружение для сборки драйвера под любой Linux.
- Далее привожу шаги с комментариями по сборке драйвера.
#!sh asteriskware tmp # asteriskware tmp # ls ESRT2_Linux_v.13.10.0708.2009.zip asteriskware tmp # mkdir sas asteriskware tmp # mv ESRT2_Linux_v.13.10.0708.2009.zip sas asteriskware tmp # cd sas/ asteriskware sas # unzip ESRT2_Linux_v.13.10.0708.2009.zip
Далее идем в папку с исходниками для !RedHat/!CentOs:
#!sh asteriskware sas # cd shim/library/rhel5-32/ asteriskware rhel5-32 #
Выполняем команду make -C /usr/src/linux M=$PWD
#!sh asteriskware rhel5-32 # make -C /usr/src/linux M=$PWD make: Entering directory `/usr/src/linux-2.6.29-gentoo-r5' LD /tmp/sas/shim/library/rhel5-32/built-in.o CC [M] /tmp/sas/shim/library/rhel5-32/../../open_source/oss/lin/lin_oss.o CC [M] /tmp/sas/shim/library/rhel5-32/../../open_source/osl/lin/osl_char.o CC [M] /tmp/sas/shim/library/rhel5-32/../../open_source/osl/lin/linux_osl.o /tmp/sas/shim/library/rhel5-32/../../open_source/osl/lin/linux_osl.c: In function ‘setup_sglist_each_sg’: /tmp/sas/shim/library/rhel5-32/../../open_source/osl/lin/linux_osl.c:2031: warning: comparison is always false due to limited range of data type LD [M] /tmp/sas/shim/library/rhel5-32/megasr.o Building modules, stage 2. MODPOST 1 modules CC /tmp/sas/shim/library/rhel5-32/megasr.mod.o LD [M] /tmp/sas/shim/library/rhel5-32/megasr.ko make: Leaving directory `/usr/src/linux-2.6.29-gentoo-r5' asteriskware rhel5-32 #
О чудо! Драйвер собрался (до этого был скачан похожий файл с сайта LSI, но только попытка сборки по Linux asteriskware 2.6.29-gentoo-!r5 окончилась неудачно).
- Файл megasr.ko - это как раз то, чего нам не хватает для обретения чувства душевного покоя.
- К слову сказать, сборка megasr.ko производилась в уже развернутой копии !AsteriskWare на другой машине, а так как архитектура была идентична, мы просто скопировали нужный файл в устанавливаемую систему. Чтобы сделать это прямо в процессе установки, надо распаковать ядро в RAM, поэтому ее понадобится минимум 4G. Поэтому если Вы ставите AsteriskWare на машину с контроллером SASMF8I, не поленитесь, установите систему также под VMWare или другой системой, это очень облегчит задачу, так как можно будет просто скопировать нужный файл.
- После того, как в устанавливаемой AsteriskWare появился бинарник megasr.ko, его надо прописать в образ модулей, подгружаемых до загрузки Системы. Делается это при помощи простого трюка:
#!sh cd /tmp/ mkdir myinitramfs && cd myinitramfs cp /boot/initramfs* . mv initramfs* initramfs.gz gunzip initramfs.gz cpio -i < initramfs cp /root/library/rhel5-64/megasr.ko lib/modules/*/kernel/drivers/scsi vi etc/modules/scsi
Далее нужно сверху добавить строку: megasr, ну и запаковать все обратно:
#!sh find . | cpio -H newc -o | gzip -9 > /boot/initramfs*
Вот и все. Reboot.
P.S. Вроде все просто, но весь интернет полон противоречивых сведений о том, как это сделать, и все потому, что lspci идентифицирует контроллер как LSI [MegaRAID] SAS 8208ELP