Solaris: MPxIO, devices y LUNs

Siempre que he trabajado con software de multipathing he tenido el mismo primer problema identificar los dispositivos físicos asociados con los dispositivos virtuales. Este primer problema se resuelve de distintas formas dependiendo del software que se emplee, solo vamos a a hablar de MPxIO (Multiplexed I/O), el cual viene integrado en Solaris desde Solaris 8 y permite crear una interfaz virtual para acceder por varios caminos a un mismo dispositivo.

Para nuestro ejemplo vamos a suponer que hemos creado un LUN en nuestra SAN y dicho LUN lo hemos mapeado con el ID 17 en la máquina que queremos que tenga acceso. Si tenemos activado el mpxio y después de ejecutar el comando devfsadm.

root@machine # devfsadm -C
root@machine #

Vemos la salida del comando format.

root@machine # format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c10t60A980004335437052344C6B394A6751d0 
          /scsi_vhci/ssd@g60a980004335437052344c6b394a6751
       1. c10t60A980004335437052344C6B39486C54d0 
          /scsi_vhci/ssd@g60a980004335437052344c6b39486c54
       2. c10t60A980004335437052344C6B3947636Fd0 
          /scsi_vhci/ssd@g60a980004335437052344c6b3947636f
       3. c10t60A980004335437052344C6B3948524Cd0 
          /scsi_vhci/ssd@g60a980004335437052344c6b3948524c
       4. c10t60A980004335437052344C6869506B31d0 
          /scsi_vhci/ssd@g60a980004335437052344c6869506b31
       5. c10t60A980004335437052344C6869524D49d0 
          /scsi_vhci/ssd@g60a980004335437052344c6869524d49
       6. c10t60A980004335437052344C6869536F43d0 
          /scsi_vhci/ssd@g60a980004335437052344c6869536f43
...
Specify disk (enter its number):

Obtenemos la lista de los discos que ha reconocido el comando format. De listado no podemos identificar cual es nuestro nuevo LUN con ID 17 asignado a la máquina. Ya que como podemos ver en este caso, se han creado distintos dispositivos virtuales. Ahora tenemos que identificar cuales de los dispositivos virtuales corresponde con nuestro nuevo LUN. Una forma rápida es utilizar el comando fcinfo que nos permite obtener información sobre los distintos canales Fibre Channel que tengamos en la máquina.

root@machine # fcinfo -?
Usage:  fcinfo -?,-V

Usage:  fcinfo  [-?]  [-?] []
Usage by OBJECT:
        fcinfo  hba-port [OPTIONS] []
        fcinfo  remote-port  []
For more information, please see fcinfo(1M)

Existen dos parámetros:

  • hba-port, devuelve información sobre los distintos puertos HBA.
  • remote-port, devuelve información sobre los dispostivos conectados a los distintos puertos.

Vamos a ejecutar el comando fcinfo con el parámetro hba-port

root@machine # fcinfo hba-port
HBA Port WWN: 10000000c97d028a
        OS Device Name: /dev/cfg/c2
        Manufacturer: Emulex
        Model: LPe11002-S
        Firmware Version: 2.72a2 (Z3F2.72A2)
        FCode/BIOS Version: 1.50a9
        Serial Number: 0999VM0-0829000DB7
        Driver Name: emlxs
        Driver Version: 2.31h (2008.06.16.08.54)
        Type: unknown
        State: offline
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: not established
        Node WWN: 20000000c97d028a
...
HBA Port WWN: 10000000c97d02f2
        OS Device Name: /dev/cfg/c4
        Manufacturer: Emulex
        Model: LPe11002-S
        Firmware Version: 2.72a2 (Z3F2.72A2)
        FCode/BIOS Version: 1.50a9
        Serial Number: 0999VM0-0829000DBH
        Driver Name: emlxs
        Driver Version: 2.31h (2008.06.16.08.54)
        Type: N-port
        State: online
        Supported Speeds: 1Gb 2Gb 4Gb
        Current Speed: 4Gb
        Node WWN: 20000000c97d02f2

....

De este ejemplo podemos comprobar que el primer puerto no está operativo, ya que su estado es offline, el segundo puerto si está operativo y es este puerto el que vamos a utilizar para el ejemplo. Le preguntaremos por todos los dispositivos a los que tenemos acceso utilizando este puerto. Utilizaremos los parámetros -lsp para obtener todas la información disponbile y por último pasaremos como parámetro el WWN del dispositivo al que queremos preguntar, para nuestro ejemplo 10000000c97d02f2.

root@machine # fcinfo remote-port -lsp 10000000c97d02f2
Remote Port WWN: 500a098296584110
        Active FC4 Types: SCSI
        SCSI Target: yes
        Node WWN: 500a098086584110
        Link Error Statistics:
                Link Failure Count: 0
                Loss of Sync Count: 0
                Loss of Signal Count: 0
                Primitive Seq Protocol Error Count: 0
                Invalid Tx Word Count: 0
                Invalid CRC Count: 0
        LUN: 1
          Vendor: NETAPP
          Product: LUN
          OS Device Name: /dev/rdsk/c10t60A980004335437052344C6869506B31d0s2
....
        LUN: 17
          Vendor: NETAPP
          Product: LUN
          OS Device Name: /dev/rdsk/c10t60A980004335437052344C6B394A6751d0s2
...

Remote Port WWN: 500a098186584110
        Active FC4 Types: SCSI
        SCSI Target: yes
        Node WWN: 500a098086584110
        Link Error Statistics:
                Link Failure Count: 0
                Loss of Sync Count: 0
                Loss of Signal Count: 0
                Primitive Seq Protocol Error Count: 0
                Invalid Tx Word Count: 0
                Invalid CRC Count: 0
        LUN: 1
          Vendor: NETAPP
          Product: LUN
          OS Device Name: /dev/rdsk/c10t60A980004335437052344C6869506B31d0s2
...
        LUN: 17
          Vendor: NETAPP
          Product: LUN
          OS Device Name: /dev/rdsk/c10t60A980004335437052344C6B394A6751d0s2

De esta salida obtenemos el nombre del dispositovo en el SO y el ID del LUN mapeado en el almacenamiento, para nuestro ejemplo LUN 17

Esta es una forma sencilla de obtener el ID del LUN mapeado asociado a un dispositivo virtual de MPxIO, sobre todo cuando el comando stmboot -L no devuelve nada.