Adaptec Ultra-320 (AIC-7902W) Host-RAID on RedHat Linux 7.3

   Как вы помните, в условиях задачи стояло: установка именно на RedHat 7.3. Однако не забываем, что драйвера поставляются только в бинарной форме и требуют ядра строго определенной версии. К огромному сожалению, мне не удалось найти a320raid под ядро, поставляемое с RedHat Linux 7.3 2.4.18-3. Самое близкое, существуют драйвера для 2.4.18-14. Это ядро по умолчанию, которое ставит инсталлятор RedHat 8.0. С тех пор вышло несколько Security Updates от RedHat, однако переехать на новую версию ядра не удастся, поскольку 320raid требует именно 2.4.18-14.

    В принципе, существуют драйвера для других дистрибутивов Linux (SUSE), c другими версиями ядра, однако я не решился экспериментировать, поскольку a320raid использует модули ядра sd_mod, scsi_mod и т.д.

    Кстати, если другие версии a320raid есть у вас - присылайте! Имена героев будут занесены в книгу славы.

    Итак, вернемся к RedHat 7.3. Инсталлятор 7.3 работает на ядре 2.4.18-3, которое совсем немного отличается от 2.14.18-14. Поэтому возникла идея : поменять ядро на инсталляционной дискете, то есть сделать дискету RedHat 7.3, но на ядре 2.4.18-14. Для этого нужно аккуратно "разобрать" дискету и подсунуть туда новое ядро. Дело осложняется тем, что инсталлятор RedHat построен с использованием initrd, поэтому приходится разбирать еще и initrd.img на дискете.

    Взять можно здесь :

    Это обычная инсталляционная дискета RedHat 7.3 в формате vfat, просто с другим ядром (2.4.18-14) вместо штатного.

[root@on ~]# mdir a:
Volume in drive A has no label
Volume Serial Number is 3CC0-6444
Directory for A:/

LDLINUX	 SYS     6192 04-19-2002 13:39
SYSLINUX CFG      715 04-19-2002 13:39
INITRD   IMG   532514 09-02-2003 0:37
VMLINUZ        852324 09-02-2003 0:38
BOOT     MSG      877 04-19-2002 13:39
GENERAL  MSG     1145 04-19-2002 13:39
PARAM    MSG      853 04-19-2002 13:39
RESCUE   MSG      494 04-19-2002 13:39
SNAKE    MSG      545 04-19-2002 13:39
9 files 1 395 659 bytes
66 048 bytes free

[root@on ~]#

    Загрузившись с этой дискеты мы можем произвести установку с CD-ROM RedHat 7.3 на RAID, взяв в качестве драйвера с предыдущего диска (linux dd).

    Система (7.3) нормально встанет на RAID (swap-раздел на RAID - это круто...) но за одним исключением - она будет совершенно незагружаемая, потому как драйвер ядра a320raid.o будет от другой версии. Теперь нам необходимо на свеже-поставленную систему залить еще и ядро 2.4.18-14. Для этого нужно применить немного черной магии ;-)

    Можно было бы конечно, сделать образ CD-ROM-а с новым .iso, но я же не фирма RedHat в конце концов.

    Итак, во первых, нам потребуется CD-ROM c RedHat 8.0, поскольку на нем лежат нужные нам ядра. А во-вторых, уже упомянутая дискета с драйверами.

1) Грузимся с родного CD-ROM или Floppy RedHat 8.0 в режиме RESCUE : linux rescue dd. Система должна запросить драйвера и найти старую инсталляцию RedHat на RAID. Если не нашла, что-то идет не так. Если нашла, то старая инсталляция будет смонтирована в /mnt/sysimage c правильным расположением разделов /var , /usr или что у вас там. Проверить можно командой mount.

2) Выполняем команду chroot /mnt/sysimage . Опа! Теперь мы "как-бы" в системе RedHat 7.3, но загрузившись с другого ядра. Но кого в конце концов это волнует ? Для проверки что все работает даем команды mount и rpm -qa . То есть местный RPM работает.

3) Монтируем в новом окружении CD-ROM c RedHat 8.0 :

sh-2.05a# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write protected, mounting read only
sh-2.05a# ls /mnt/cdrom/RedHat/RPMS/kernel-*
/mnt/cdrom/RedHat/RPMS/kernel-2.4.18-14.athlon.rpm
/mnt/cdrom/RedHat/RPMS/kernel-2.4.18-14.i586.rpm
/mnt/cdrom/RedHat/RPMS/kernel-2.4.18-14.i686.rpm
/mnt/cdrom/RedHat/RPMS/kernel-bigmem-2.4.18-14.i686.rpm
/mnt/cdrom/RedHat/RPMS/kernel-pcmcia-cs-3.1.31-9.i386.rpm
/mnt/cdrom/RedHat/RPMS/kernel-smp-2.4.18-14.athlon.rpm
/mnt/cdrom/RedHat/RPMS/kernel-smp-2.4.18-14.i686.rpm
/mnt/cdrom/RedHat/RPMS/kernel-uml-2.4.18-14.i686.rpm
/mnt/cdrom/RedHat/RPMS/kernel-utils-2.4-8.13.i386.rpm
sh-2.05a#

4) Теперь нам необходимо поставить ядро 2.4.18-14 , взяв его с диска RedHat 8.0 . Обратите внимание на архитектуру вашей машины! Если машина двухпроцессорная, то надо брать ядро smp и i686  . А если у вас машина на процессоре P-IV или Xeon, то надо брать ядро smp.i686 даже в случае однопроцессорной машины из за архитектуры HyperThreading (не забудьте включить HT в BIOS).

Наконец, устанавливаем новое ядро RPM :

sh-2.05a# rpm -i --force --nodeps /mnt/cdrom/RedHat/RPMS/kernel-smp-2.4.18-14.i686.rpm

Обратите внимание, что устанавливать надо именно с ключом -i (install), а не -U (upgrade) и необходимо применять ключами --force --nodeps (поскольку новое ядро хочет новых modutils и mkinitrd). При инсталляции будет немного ругани, поскольку ядро не найдет драйверов и т.д. Но мы поставим их чуть позже. Пока же мы должны убедится, что в каталоге /boot появилось долгожданное ядро vmlinuz-2.4.18-14smp.

5) Теперь необходимо установить драйвер a320raid.o . Сейчас он лежит на дискете, а лежать он должен тут :

 /lib/modules/2.4.18-14smp/kernel/drivers/scsi/a320raid.o

 Возьмем его с многострадальной дискеты с драйверами.

sh-2.05a#  mount -t ext2 /dev/fd0 /mnt/floppy/
sh-2.05a#  cp /mnt/floppy/modules.cgz .
sh-2.05a#  zcat modules.cgz | cpio -i -d
2155 blocks
sh-2.05a#  ls 2*
2.4.18-14:
a320raid.o

2.4.18-14BOOT:
a320raid.o

2.4.18-14smp:
a320raid.o

Нам нужна именно smp версия драйвера. Положим его на место :

sh-2.05a# cp 2.4.18-14smp/a320raid.o /lib/modules/2.4.18-14smp/kernel/drivers/scsi/

6) Теперь необходимо изготовить новый initrd-2.4.18-14smp.img для нового ядра.

Не забываем прописать в /etc/modules.conf

alias scsi_hostadapter a320raid

sh-2.05a# mkinitrd /boot/initrd-2.4.18-14smp.img 2.4.18-14smp

7) Поправить записи в GRUB или LILO.

sh-2.05a# grub-install /dev/sda1
sh-2.05a# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/sda1
#          initrd /boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Red Hat Linux (2.4.18-14smp)
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.18-14smp ro root=/dev/sda1
        initrd /boot/initrd-2.4.18-14smp.img

title Red Hat Linux (2.4.18-3smp)
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.18-3smp ro root=/dev/sda1

Все!