Solaris 10: détection d'un disque d'une baie EMC DMX

Toute personne s'étant essayé à configurer des disques d'une baie DMX sous Solaris a due au moins tomber une fois sur des problèmes de détection de disque. Même lorsque l'on a accès au site de support EMC powerlink ce n'est pas toujours évident d'éviter de rebooter. Voici ma méthode de détection de disque et je dois dire que pour l'instant je n'ai jamais eu à rebooter avec.

Pour simplifier les explications et éviter de faire un billet trop long, je considère les points suivants :

  • les commandes de gestion de la baie symcli sont installés sur le serveur.

  • les devices et meta devices sont déjà créés.

  • powerpath est utilisé comme driver
Je profiterais peut-être d'un autre billet pour développer ces points. N'hésitez pas à me dire si vous êtes intéressé :-).

description de la détection d'un disque

Pour faire détecter le disque d'une baie DMX sur un serveur Solaris, il faut effectuer les actions suivantes :
  • mapper le disque EMC : il s'agit d'assigner le device à un port de la baie.

  • "masquer" le device EMC : il s'agit de faire voir le device uniquement par une carte fibre identifiée par son wwn.

  • faire détecter le disque sur le système.

La partie mapping et masking du device s'effectue grâce à l'utilitaire symconfigure. On passe à cette commande un fichier contenant des ordres de configurations à faire exécuter par la baie.
On effectue d'abord une preview des commandes à exécuter. Cela permet de valider la syntaxe des commandes et l'état de la baie.
symconfigure -file commandes.sym preview
On peut ensuite exécuter le prepare qui effectue les mêmes opérations que le preview plus des vérifications sur l'état de la baie si l'opération était réalisé.
symconfigure -file commandes.sym prepare
L'ordre commit effectue réellement l'opération en reprenant les parties preview et prepare.
symconfigure -file commandes.sym commit
La commande que l'on fait exécuter pour le mapping est la suivante
map dev [symid] to dir [FA]:[port] lun=[lun id] wwn=[wwn de la carte fibre];
symid correspond au numéro de device dans la baie.
FA correspond à la carte fibre de la baie.
port correspond au numéro de port de la carte fibre de la baie.
lun id correspond à l'identifiant SCSI donné au device EMC.

identification du device et des ports de la baie

Avant de commencer, une bonne pratique est de remettre à jour la base Symmetrix sur le serveur utilisé pour réaliser les opérations.
symcfg discover
Cette commande va scanner tout les périphériques du serveur à la recherche de périphériques Symmetrix. C'est aussi la manière de faire pour prendre en compte les changements de configuration de la baie.
Un certain nombre de commandes symcli (comme sympd et symdev) se basent sur la base Symmetrix pour donner leur informations.

Normalement, lorsqu'on veut mapper un device, on sait déjà quel est son numéro mais au cas où, on peut lister les devices EMC non mappés avec la commande symdev
# symdev list -noport
Symmetrix ID: 000999999999

Device Name Directors Device
--------------------------- ------------ --------------------------------------
Cap
Sym Physical SA :P DA :IT Config Attribute Sts (MB)
--------------------------- ------------- -------------------------------------

001F Not Visible ???:? 16D:C6 2-Way Mir N/Grp'd RW 3
0020 Not Visible ???:? 16A:C7 2-Way Mir N/Grp'd RW 3
004A Not Visible ???:? 01A:D3 RAID-5 N/Grp'd RW 1031
004B Not Visible ???:? 16A:D4 RAID-5 N/Grp'd RW 1031
004C Not Visible ???:? 01A:C4 RAID-5 N/Grp'd RW 1031
004D Not Visible ???:? 16A:C5 RAID-5 N/Grp'd RW 1031
004E Not Visible ???:? 01A:D5 RAID-5 N/Grp'd RW 1031
004F Not Visible ???:? 16A:D6 RAID-5 N/Grp'd RW 1031
0050 Not Visible ???:? 01A:C6 RAID-5 N/Grp'd RW 1031
0051 Not Visible ???:? 16A:C7 RAID-5 N/Grp'd RW 1031
0052 Not Visible ???:? 01A:D7 RAID-5 N/Grp'd RW 1031
015A Not Visible ???:? 16A:D4 RDF1+R-5 N/Grp'd (M) RW 42600
Une fois le numéro de device identifié, il est nécessaire de savoir sur quel port de la baie on va le mapper. On peut utiliser la commande powermt fournie avec PowerPath pour lister les ports de la baie auxquelles se connectent le serveur.
# powermt display paths
Symmetrix logical device count=339
==============================================================================
----- Host Bus Adapters --------- ------ Storage System ----- - I/O Paths -
### HW Path ID Interface Total Dead
==============================================================================
2304 pci@9c/lpfc@1 00099999999 FA 13cB 117 0
2305 pci@9c/lpfc@1 00099999999 FA 4aA 120 0
2306 pci@bc/lpfc@1 00099999999 FA 13aA 120 0
2307 pci@bc/lpfc@1 00099999999 FA 4cB 117 0
2308 pci@5c/lpfc@1 00099999999 FA 13bB 102 0
2309 pci@5c/lpfc@1 00099999999 FA 13cA 114 0
2310 pci@7d/lpfc@1 00099999999 FA 4cA 114 0
2311 pci@7d/lpfc@1 00099999999 FA 4bB 102 0
Ici on voit que ce serveur accède à 8 ports différents de la baie par 8 cartes fibres distinctes. Le nombre et la première lettre qui suivent le champ FA correspondent à son numéro. La deuxième lettre correspond au numéro de port. A pour le port 0 et B pour le port 1.

Sinon il est aussi possible de lister l'ensemble des ports de la baie avec la commande symcfg :
  # symcfg -sid 9999 list -FA ALL

Symmetrix ID: 000999999999

S Y M M E T R I X F I B R E D I R E C T O R S

Dir Port WWN VCM Volume Set Pnt to Pnt
Enabled Addressing

FA-4A 0 9999999999999083 Yes No Yes
FA-4A 1 99999999999990a3 Yes No Yes
FA-13A 0 999999999999908c Yes No Yes
FA-13A 1 99999999999990ac Yes No Yes
FA-4B 0 9999999999999093 Yes No Yes
FA-4B 1 99999999999990b3 Yes No Yes
FA-13B 0 999999999999909c Yes No Yes
FA-13B 1 99999999999990bc Yes No Yes
FA-4C 0 9999999999999083 Yes No Yes
FA-4C 1 99999999999990a3 Yes No Yes
FA-13C 0 999999999999908c Yes No Yes
FA-13C 1 99999999999990ac Yes No Yes

choisir le LUN ID

Lorsque l'on utilise la ligne de commande, il est nécessaire de déterminer soit même les lun id assignés aux devices et meta-devices EMC. Pour cela, on peut utiliser la commande suivante :
symcfg list -dir [nom] -p [numero du port] -address -available
Voici un exemple pour le FA 13C port 1
 # symcfg list -dir 13C -p 1 -address -available


Symmetrix ID: 000999999999 (Local)

Director Device Name Attr Address
---------------------- ----------------------------- ---- --------------
Ident Symbolic Port Sym Physical VBUS TID LUN
------ -------- ---- ---- ----------------------- ---- --- ---

FA-13C 13C 1 0000 /dev/rdsk/c10t13d0s2 VCM 0 00 000
054E /dev/vx/rdmp/emcpower7s2 0 00 001
054F /dev/vx/rdmp/emcpower8s2 0 00 002
0550 /dev/vx/rdmp/emcpower9s2 0 00 003
0551 /dev/vx/rdmp/emcpower10s2 0 00 004
0595 /dev/vx/rdmp/emcpower279s2 (M) 0 00 005
0599 /dev/vx/rdmp/emcpower280s2 (M) 0 00 006
059D /dev/vx/rdmp/emcpower281s2 (M) 0 00 007
05A1 /dev/vx/rdmp/emcpower282s2 (M) 0 00 008
05A5 /dev/vx/rdmp/emcpower283s2 (M) 0 00 009
05A9 /dev/vx/rdmp/emcpower284s2 (M) 0 00 00A
05AD /dev/vx/rdmp/emcpower285s2 (M) 0 00 00B
05B1 /dev/vx/rdmp/emcpower286s2 (M) 0 00 00C
05B5 /dev/vx/rdmp/emcpower287s2 (M) 0 00 00D
05B9 /dev/vx/rdmp/emcpower288s2 (M) 0 00 00E
05BD /dev/vx/rdmp/emcpower289s2 (M) 0 00 00F
05C1 /dev/vx/rdmp/emcpower290s2 (M) 0 00 010
05C5 /dev/vx/rdmp/emcpower291s2 (M) 0 00 011
05C9 /dev/vx/rdmp/emcpower292s2 (M) 0 00 012
- AVAILABLE 0 00 013 *
0023 /dev/vx/rdmp/emcpower126s2 0 00 040
La colonne SYM correspond au numéro de device Symmetrix(ou DMX) mappés. Si le device est vue sur le système, on voit aussi son chemin d'accès physique(ici sous veritas).
Le M indique qu'il s'agit d'un meta device.
Les champs VBUS et TID ne sont pas utilisés sous SUN. Ils servent à réaliser le mapping sous d'autres OS (comme HP-UX).
Et enfin le champ LUN indique le LUN id attribué au device.
La ligne contenant AVAILABLE et se terminant par * indique le premier numéro de LUN disponible. Dans l'exemple ci-dessus, cela commence à 013 et cela finit à 040. Ces valeurs sont en hexadécimal.

Cette commande permet de trouver facilement un numéro disponible pour mapper un device mais cela devient vite laborieux d'en mapper une dizaine. C'est pour cela que j'ai développé un petit script perl qui génère les lignes de commandes à faire exécuter par symconfigure. Voici un exemple de sa sortie :
 # ./sym_map.pl -sid 1890 -dir 13C -p 1 -run -wwn 1000000099999999 -devs "0627 0628 0629 062A 062B 062C 062D 062E 062F"
map dev 0627 to dir 13C:1 lun=13 wwn=1000000099999999;
map dev 0628 to dir 13C:1 lun=14 wwn=1000000099999999;
map dev 0629 to dir 13C:1 lun=15 wwn=1000000099999999;
map dev 062A to dir 13C:1 lun=16 wwn=1000000099999999;
map dev 062B to dir 13C:1 lun=17 wwn=1000000099999999;
map dev 062C to dir 13C:1 lun=18 wwn=1000000099999999;
map dev 062D to dir 13C:1 lun=19 wwn=1000000099999999;
map dev 062E to dir 13C:1 lun=1a wwn=1000000099999999;
map dev 062F to dir 13C:1 lun=1b wwn=1000000099999999;
Le script est accessible ici. On peut soit lui faire exécuter la commande symcfg (paramètre -run et -sid) soit lui indiquer le numéro de départ pour les lun id (paramètre -ind). Le script n'est pas très compliqué et commenté mais contactez-moi en cas de soucis.

Après avoir vérifié la sortie du script, il suffit de rediriger la sortie du script dans un fichier et de faire exécuter ce fichier par symconfigure :
 symconfigure -sid 9999 -file script.sym preview
symconfigure -sid 9999 -file script.sym prepare
symconfigure -sid 9999 -file script.sym commit
Une fois les commandes terminées, il est nécessaire de rafraîchir la base de masking pour que les disques soient vus.
symmask refresh

détection sous solaris

Il vaut mieux relancer un rafraîchissement de la base Symmetrix pour commencer :
symcfg discover
Détection des disques sous Solaris
devfsadm -v
Une fois les disques détectés (on peut vérifier avec la commande format), il faut les configurer sous powerpath
powercf -q
powermt config
Il suffit ensuite des les labeliser avec la commande format (j'ai tronqué la sortie de la commande vu le nombre de disques sur le serveur)
format
AVAILABLE DISK SELECTIONS:
....
918. emcpower0h
/pseudo/emcp@0
919. emcpower1h
/pseudo/emcp@1
920. emcpower2h
/pseudo/emcp@2
....

Et pour finir ,les faire détecter par veritas :
# vxdctl enable
On liste ensuite les disques pour voir s'ils ont bien été détecté sous Veritas
# vxdisk list

Le mot de la fin

Pour conclure, je peux dire qu'en général les problèmes de détection que j'ai eu ont été résolu en exécutant la commande symcfg discover avant de lancer le devfsadm. Sinon pour ceux ayant accès au support EMC(site http://powerlink.emc.com), je conseille de lire les documentations sur symcli, elles décrivent comment effectuer les opérations. En particulier le pdf "Symmetrix configuration change CLI" référencé 300-000-882.

Commentaires

1. Le lundi, avril 7 2008, 17:08 par djeismagic

Bonne doc.
A quoi sert le "powercf -q" ?
Sous powerlink, il y a une doc plus ou moins equivalente, c'est un truc du genre "Solaris host connectivity"

2. Le lundi, avril 7 2008, 18:42 par Alain Dejoux

Hello,

powercf -q gère les pseudo-devices. il crée et supprime les entrées emcpowerX.

Je ne connaissais pas les "host connectivity guides" à l'époque. Ce sont des ressources excellentes mais malheureusement pas beaucoup mise en avant sur le site.

3. Le mardi, avril 8 2008, 14:35 par Alain Dejoux

Tant qu'à faire je peux peut-être indiqué aussi où trouver les host connectivity guide dans Powerlink :-) Voici le chemin dans l'interface :

* Home > Support > Technical Documentation and Advisories > Host Connectivity/HBAs > Installation/Configuration


4. Le jeudi, janvier 1 2009, 19:55 par pasteur

Bonjour,

ton post est très intéressant et agréable à lire.
Le lien http://blog.krystalia.net/share/sym... n'est plus dispo...

cdlt,

5. Le vendredi, janvier 2 2009, 13:24 par Alain Dejoux

Merci pour le commentaire :-)

J'ai corrigé le lien.

Bye,

Alain

6. Le samedi, février 7 2009, 02:29 par simplman

chapeau :) to be or not...

7. Le dimanche, janvier 16 2011, 00:06 par ruben

tres bon article