The Solaris FC (and Storage) Multipathing software is already part of Solaris 10 (by default enabled for x86, but not for SPARC platform).
Some of main features of this software are:
The most important commands when working with FC HBA and Multipathing are (see man pages) are: fcinfo, mpathadm, luxadm, cfgadm, format (maybe more?)
Also check file /kernel/drv/fp.conf (fp driver configuration file, fp = FC port driver), please where you can disable/enable Multipathing (MPxIO), see line mpxio-disable=yes/no. This file also suggests using stmsboot as command for administering multipathing.
Sometimes I want quickly to find more about FC HAB and multipaths on the system, so hence this script. I am using escape sequence for having colorful output (hope the script is commented well).
Here is the script.
#!/bin/bash
#set -x
# ANSI escape sequence (echo -e = enables it)
# -- Bold text: \033[1m ... \033[0m
# \033 is escape
# [1 turns ON bold atribute, [0 turns it OFF, m terminates each escape sequence
# -- Colors
# \E[ begins escape sequence
# COLOR FOREGROUND BACKGROUND
# black 30 40
# red 31 41
# green 32 42
# yellow 33 43
# blue 34 44
# magenta 35 45
# cyan 36 46
# white 37 47
# Restore terminal settings to normal: echo -ne "\E[0m"
# Restore terminal settings to normal: tput sgr0
# Check if user is root
if [ `/usr/bin/id | awk '{print $1}' | cut -d= -f2 | cut -d\( -f1` != 0 ]
then
echo ; echo Sorry, you have to be root to run this script. ; echo
exit 1
fi
# Variable
GREP=/usr/sfw/bin/gegrep
if [ "`fcinfo hba-port`" = "No Adapters Found." ]
then
echo ; echo -e "\033[1m \E[35;40m There is no installed FC HBA on this system! \033[0m" ; echo -ne "\E[0m"
echo ; exit 1
else
FCNUMBER=`fcinfo hba-port | ${GREP} "HBA Port WWN" | wc -l | nawk '{print $1}'`
echo
echo -e There are "\033[1m \E[33;40m ${FCNUMBER} FC HBA(s) \033[0m" in the system. ; echo -ne "\E[0m"
fi
FCWWN=`fcinfo hba-port | ${GREP} HBA | nawk '{print $4}'`
for i in ${FCWWN}
do
FCSTATE=`fcinfo hba-port ${i} | grep State: | nawk '{print $2}'`
if [ ${FCSTATE} = online ]
then
# port is online
echo
echo -e The FC Port WWN "\033[1m \E[36;40m ${i} \033[0m is \033[1m \E[37;42m ${FCSTATE} \033[0m"
echo -ne "\E[0m"
printf "################################################################################## \n"
printf "%-18s %9s %18s %20s \n" "FC HBA (Host)" "Path" "Remote" "LUN:"
printf "%-18s %9s %18s %20s \n" "Port WWN" "Channel" "WWN" " "
printf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \n"
/usr/sbin/mpathadm list initiator-port | ${GREP} ${i} > /dev/null
if [ "$?" != "0" ]
then
echo There is no multi path for this port.
exit 1
fi
FCREMOTE=`fcinfo remote-port -p ${i} | ${GREP} Remote | nawk '{print $4}'`
printf "%-18s \n" "${i}"
for j in ${FCREMOTE}
do
CHANNEL=`cfgadm -al | ${GREP} -v unconfigured | ${GREP} ${j} |nawk -F:: '{print $1}'`
LUNNAME=`/usr/sbin/luxadm display ${j} | ${GREP} /dev/rdsk | ${GREP} -i -v DEVICE`
if [ "$?" != "0" ]
then
echo -e "\033[1m \E[35;40m Cannot display device on Remote Port WWN ${j} \033[0m"
echo -ne "\E[0m"
else
PRODUCT=`/usr/sbin/luxadm display ${j} | ${GREP} Product | nawk -F: '{print $2}'`
CAPACITY=`/usr/sbin/luxadm display ${j} | ${GREP} capacity | nawk -F: '{print $2}'`
printf "%27s %18s %30s \n" "${CHANNEL}" "${j}" "${LUNNAME}"
printf "%51s %20s \n" "${PRODUCT}" "${CAPACITY}"
fi
done
else
# port if offline
echo -e The FC Port WWN "\033[1m \E[36;40m ${i} \033[0m is \033[1m \E[37;41m ${FCSTATE} \033[0m"
echo -ne "\E[0m"
fi
done
exit 0
|
Here is the colorful (I guess bit more useful) output. And feel free to edit/improve script with more features.
Basically, this system has 2 FC HBAs (one PCI-X card with 2 ports), it's connected to StorEdge 3510 that presents 2 LUNs, so each FC port has separate path channel to each LUN.
If FC port is gone, LUNs are available over second path channel.
