Acceder un Sun 6140 avec redondance par Fiberchannel à partir d'un système Linux avec des cartes fiberchannel de Q-Logic n'est pas si facile. Sur Solaris, avec scsi_vhci (Sun MPxIO) ça marche presque automatiquement.
Le système de disques Sun 6140 ne supporte pas les connexions symmetriques, seulement un chemin du contrôleur de disque au système host est possible par volume. Vous auriez une erreur SCSI si vous essayer d'acceder un volume par un chemin non-actif.
En plus: Linux (avec les pilotes Q-Logic actuels) offre deux possibilités de redondance, mais aucune d'eux n'est utilisable avec le système RAID Sun 6140:
Le système de disques Sun 6140 ne supporte pas les connexions symmetriques, seulement un chemin du contrôleur de disque au système host est possible par volume. Vous auriez une erreur SCSI si vous essayer d'acceder un volume par un chemin non-actif.
En plus: Linux (avec les pilotes Q-Logic actuels) offre deux possibilités de redondance, mais aucune d'eux n'est utilisable avec le système RAID Sun 6140:
- Q-Logic qla2xxx failover: Le système RAID doit supporter le mode dit "Target Group Mode", l'activation du chemin se deroule avec des CDB spéciaux ou avec un reset de LUN. Mais cela ne marche pas avec le Sun 6140.
- dm-multipath, une part du système Linux dm. Il ne supporte que les liens symmetriques, alors pas de chance non plus avec le 6140.
Sun offre un logiciel "Linux-RDAC for Linux 09" (par téléchargement gratuit) mais ceci ne compilera pas sous SLES 10, 11 et Redhat 5.
J'ai trouvé une version actuelle sur le site web de LSI:
http://www.lsi.com/rdac/ds4000.html#current
Le fichier pour SLES 10, SLES 11 et Redhat est:
http://www.lsi.com/rdac/rdac-LINUX-09.03.0C05.0214-source.tar.gz
Ne vous en faites pas qu'il y a marqué "DS4000", ce pilote marchera sans problème avec votre RAID de Sun.
D'abord:
- Le code source du noyau linux doit être installé, ainsi que le compilateur gcc et les dépendances (résolues automatiquement par les installateurs yast (SLES) et yum (Redhat)).
- le pilote Q-Logic doit être chargé:
modprobe qla2xxx - Veuillez éteindre la redondance du pilote Q-Logic: ql2xfailover=0 (dans modprobe.conf.local pour SLES).
Devenez "root" sur votre machine, desemballez le code source, allez dans le répertoire du code source et tapez "make":
primitivo:/usr/src/sun-rdac # wget http://www.lsi.com/rdac/rdac-LINUX-09.03.0C05.0214-source.tar.gz
--10:48:20-- http://www.lsi.com/rdac/rdac-LINUX-09.03.0C05.0214-source.tar.gz
=> `rdac-LINUX-09.03.0C05.0214-source.tar.gz'
Resolving www.lsi.com... 192.19.195.53
Connecting to www.lsi.com|192.19.195.53|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 376,020 (367K) [application/x-gzip]
100%[========================================================================================>] 376,020 231.11K/s
10:48:22 (230.46 KB/s) - `rdac-LINUX-09.03.0C05.0214-source.tar.gz' saved [376020/376020]
primitivo:/usr/src/sun-rdac # tar zxf rdac-LINUX-09.03.0C05.0214-source.tar.gz
primitivo:/usr/src/sun-rdac # cd linuxrdac-09.03.0C05.0214
primitivo:/usr/src/sun-rdac/linuxrdac-09.03.0C05.0214 # make
The result should be like this:
make[1]: Entering directory `/usr/src/linux-2.6.16.60-0.42.4-obj/x86_64/smp'
make -C ../../../linux-2.6.16.60-0.42.4 O=../linux-2.6.16.60-0.42.4-obj/x86_64/smp modules
CC [M] /usr/src/sun-rdac/linuxrdac-09.03.0C05.0214/MPP_hba.o
CC [M] /usr/src/sun-rdac/linuxrdac-09.03.0C05.0214/mppLnx26p_upper.o
[... Beaucoup de lignes omises ...]
Checking Host Adapter Configuration...
Detected 1 LSI Host Adapter Port(s) on the system
Detected 2 QLogic Host Adapter Port(s) on the system
Host Adapters from different supported vendors co-exists on your system.
Please wait while we modify the system configuration files.
Your kernel version is 2.6.16.60-0.42.4-smp
Preparing to install MPP driver against this kernel version...
Generating module dependencies...
Warning:Duplicate module options detected.
Option in /etc/modprobe.conf.local ( ql2xfailover=0 ) takes precedence
Creating new MPP initrd image...
Root device: /dev/disk/by-id/scsi-3600508e0000000009ec1e521e0b4940e-part5 (/dev/sda5) (mounted on / as ext3)
Module list: scsi_mod sd_mod sg mppUpper amd74xx mptsas processor thermal fan jbd ext3 edd qla2xxx_conf qla2xxx mppVhba (xennet xenblk)
[...]
Kernel image: /boot/vmlinuz-2.6.16.60-0.42.4-smp
Initrd image: /boot/mpp-2.6.16.60-0.42.4-smp.img
You must now edit your boot loader configuration file, /boot/grub/menu.lst, to
add a new boot menu, which uses mpp-2.6.16.60-0.42.4-smp.img as the initrd image.
Now Reboot the system for MPP to take effect.
The new boot menu entry should look something like this (note that it may
vary with different system configuration):
...
title SUSE Linux (2.6.16.60-0.42.4-smp) with MPP support
kernel (hd1,3)/boot/vmlinuz root=/dev/hdb4 vga=0x31a selinux=0 splash=silent console=tty0 resume=/dev/hda2 elevator=cfq showopts
initrd (hd0,8)/boot/mpp-2.6.16.60-0.42.4-smp.img
You're ready to go!
La procedure à crée une nouvelle image initrd avec les pilotes mpp inclus (redondance RDAC)
It created a new initrd image including mpp drivers (RDAC multipathing). Il suffit de mettre le nom de cette image dans une entrée de GRUB si vous voulez démarrer avec les pilotes mpp inclus.
Pour activer mpp manuellement:
D'abord, déchargez les pilotes de Q-LOGIC:
modprobe -r qla2xxx- Chargez le nouveau pilote "mppUpper":
modprobe mppUpper - Chargez le pilote de Q-Logic:
modprobe qla2xxx
Le resultat affichable par "dmesg" devrait être ainsi:qla2xxx 0000:83:00.0: LOOP UP detected (2 Gbps).
Vendor: SUN Model: CSM200_R Rev: 0710
Type: Direct-Access ANSI SCSI revision: 05
736 [RAIDarray.mpp]Host 52 Target 0 Lun 0 Is a physical device but is an Unconfigured Device.
Vendor: SUN Model: CSM200_R Rev: 0710
Type: Direct-Access ANSI SCSI revision: 05
Vendor: SUN Model: CSM200_R Rev: 0710
Type: Direct-Access ANSI SCSI revision: 05 - Chargez le nouveau pilote pour un adaptateur SCSI virtuelle:
modprobe mppVhba - De nouveaux "disques" devraient apparaître (visible par "dmesg"):
scsi54 : mpp virtual bus adapter :version:09.03.0C05.0214,timestamp:Fri Jun 26 18:02:53 CDT 2009
54:0:0:0: scsi scan: consider passing scsi_mod.dev_flags=SUN:VirtualDisk:0x240 or 0x1000240
Vendor: SUN Model: VirtualDisk Rev: 0710
Type: Direct-Access ANSI SCSI revision: 05
scsi(54:0:0:10): Enabled tagged queuing, queue depth 30.
SCSI device sdb: 1048576000 512-byte hdwr sectors (536871 MB)
sdb: Write Protect is off
sdb: Mode Sense: 77 00 10 08
SCSI device sdb: drive cache: write back w/ FUA
SCSI device sdb: 1048576000 512-byte hdwr sectors (536871 MB)
sdb: Write Protect is off
sdb: Mode Sense: 77 00 10 08
SCSI device sdb: drive cache: write back w/ FUA
sdb: sdb1
Pour contrôler le fonctionnement de RDAC, prenez le logiciel "mppUtil":
primitivo:/dev/disk/by-id # mppUtil -a
Hostname = primitivo
Domainname = N/A
Time = GMT 10/14/2009 13:17:49
---------------------------------------------------------------
Info of Array Module's seen by this Host.
---------------------------------------------------------------
ID WWN Type Name
---------------------------------------------------------------
0 600a0b800048a6920000000048699e5b FC st6100_2
1 600a0b8000487f960000000048467441 FC st6100_1
---------------------------------------------------------------
Pour avoir des informations détaillés sur un systéme RAID, prenez l'option "-a":
primitivo:/dev/disk/by-id # mppUtil -a st6100_1
Hostname = primitivo
Domainname = N/A
Time = GMT 10/14/2009 13:18:02
MPP Information:
----------------
ModuleName: st6100_1 SingleController: N
VirtualTargetID: 0x001 ScanTriggered: N
ObjectCount: 0x000 AVTEnabled: N
WWN: 600a0b8000487f960000000048467441 RestoreCfg: N
ModuleHandle: none Page2CSubPage: Y
FirmwareVersion: 7.10.25.xx
ScanTaskState: 0x00000000
LBPolicy: LeastQueueDepth
Controller 'A' Status:
-----------------------
ControllerHandle: none ControllerPresent: Y
UTMLunExists: Y (127) Failed: N
NumberOfPaths: 1 FailoverInProg: N
ServiceMode: N
Path #1
---------
DirectoryVertex: present Present: Y
PathState: OPTIMAL
PathId: 77350000 (hostId: 53, channelId: 0, targetId: 0)
Controller 'B' Status:
-----------------------
ControllerHandle: none ControllerPresent: Y
UTMLunExists: Y (127) Failed: N
NumberOfPaths: 1 FailoverInProg: N
ServiceMode: N
Path #1
---------
DirectoryVertex: present Present: Y
PathState: OPTIMAL
PathId: 77340001 (hostId: 52, channelId: 0, targetId: 1)
[... rest omitted ...]
Veuillez prendre le système "by-id" pour réferencier un disque attaché par RDAC. Ce n'est pas sûr que votre volume étant sdb ne serait pas "sdc" après un redemarrage.
Dans /dev/disk/by-id your trouverez des liens d'une ID unique à une instance de disque actuelle:
Example:
lrwxrwxrwx 1 root root 9 2009-10-14 14:32 scsi-3600a0b800048a692000007ed4a7ca15a ->
../../sdb
lrwxrwxrwx 1 root root 10 2009-10-14 14:32 scsi-3600a0b800048a692000007ed4a7ca15a-part1 ->
../../sdb1
Pour rechercher de nouveaux volumes dans votre réseau redondant, utilisez la commande "mppBusRescan":
primitivo:/dev/disk/by-id # mppBusRescan
scan qla2 HBA host /sys/class/scsi_host/host53...
no new device found
scan qla2 HBA host /sys/class/scsi_host/host52...
no new device found
scan mptsas HBA host /sys/class/scsi_host/host0...
no new device found
run /usr/sbin/mppUtil -s busscan...
scan mpp virtual host /sys/class/scsi_host/host54...
no new virtual device found
primitivo:/dev/disk/by-id #
La configuration fine se fait dans la fichier /etc/mpp.conf. Ne changez pas de paramètre que vous ne connaissez pas.

Excellent article, Je suis DBA oracle et ça ma aidé à voire plus claire dans un incident de production sur un environnement cluster.
J'aimerai bien un petit article reprenant les différentes commandes:
mppBusRescan,mppUtil par exemples ou mieux un petit article sur comment diagnostiquer.
PS: Bravo au grands voyages ;-)