The following script generates a mapping of the Hitachi Multi-path drives and provides all information necessary to identify a drive. The information includes PVID, Location Code, WWN, LDEV Number, HDLM device name, Hdisk device name, Major Number, and Volume Group.
#!/usr/bin/ksh
################################################################
####
#### Program: dlmfdrvmap.sh
####
#### Description: The purpose of this script is to provide a
#### mapping of the Hitachi SAN disks to show the various
#### identifiers associated with each disk. These identifiers
#### include:
####
#### PVID
#### Location Code
#### Hdisk Name
#### HDLM Name
#### WWN
#### LDEV Number
#### Volume Group
#### Major Number
####
#### Author: Dana French (dfrench@mtxia.com)
####
#### Requirements: Needs execute permission for the "dlnkmgr" command
####
################################################################
cd /usr/DynamicLinkManager/bin
lspv | grep dlmfdrv | grep -v dlmfdrvio |
while read -- HDISK PVID VGNAME STATE
do
MAJOR=""
LOC=""
ls -l /dev/${VGNAME} 2>/dev/null |
IFS="${IFS}," read -- PERMS LINKS OWNER GROUP MAJOR MINOR REMAIN
print -- "\n${HDISK} ${PVID} ${VGNAME} ${STATE} ${MAJOR:+VGmajor#:${MAJOR}}"
/usr/DynamicLinkManager/bin/dlnkmgr view -drv |
grep " ${HDISK} " |
while read -r -- LINE
do
print -r -- "${LINE}"
print -r -- "${LINE}" | read -r -- DNBR DLMDISK DDISK LDEV
LOC="${LOC}$( lscfg -l ${DDISK} | awk '{ print $2, $1 }' )\\n"
done
print -- "${LOC}"
done
This script generates HTML code containing the SAN Disk associations for each SMART Instance Server. The information allows the AIX administrator to boot an AIX host from a specific "rootvg" and to attach SMART instances to that host.
#!/usr/bin/ksh93 ################################################################ #### #### Program: dlmfdrvhtml.sh #### #### Description: The purpose of this script is to #### obtain several parameters that identify the disk drives #### associated with an AIX system. The drives may be #### internal or exist on the SAN. The identification #### parameters provide the AIX administrator with the #### ability to boot the AIX machines from a selected drive, #### and provide the ability to attach selected drives to an #### AIX system. #### #### Author: Dana French #### #### Date: 20041004 #### ################################################################ ################################################################ function printCells { LDEVLNK[${PV}]="${LDEVLNK[${PV}]#, }" print "<P> <TR> <TD>${1:- }</TD> <TD>${VGID[${PV}]}</TD> <TD>${LOCID[${PV}]:- }</TD> <TD>${PVID[${PV}]:- }</TD> <TD>${PV:- }</TD> <TD>${WWNLIST[${PV}]:- }</TD> <TD>${DLMLNK[${PV}]:- }</TD> <TD>${LDEVLNK[${PV}]:- }</TD> </TR> </P>" return 0 } ################################################################ #### #### From the list of physical volumes, extract the volume group, #### PVID, and PV Name. Save these values to associative arrays #### for later use. Also extract the Location ID from the #### lscfg command using each PV name. #### unset LOCID typeset -A LOCID unset PVID typeset -A PVID unset VGID typeset -A VGID # grep -vi "[ ]none[ ]" | lspv | while read -r -- PV PVNUM VG STATUS do LOCID[${PV}]=$( lscfg -l "${PV}" | awk '{ print $2 }' ) PVID[${PV}]="${PVNUM}" VGID[${PV}]="${VG}" done #### #### Using the Hitachi "dlnkmgr" command, obtain the list of #### dlm disks and their association with hdisks. Save these #### values to associative arrays indexed by the DLM disk name. #### Also save the LDEV number. Again save the Location ID #### for each of the DLM disks and the location ID for each #### associated hdisk. #### unset DLMLNK typeset -A DLMLNK unset LDEVLNK typeset -A LDEVLNK /usr/DynamicLinkManager/bin/dlnkmgr view -drv | grep "dlmfdrv" | while read -r -- PATHID HDEV HDISK LDEV do DLMLNK[${HDEV}]="${LDEV}" LDEVLNK[${HDEV}]="${LDEVLNK[${HDEV}]}, ${HDISK}" [[ "_${HDEV}" != "_" ]] && LOCID[${HDEV}]=$( lscfg -l ${HDEV} | awk '{ print $2 }' ) [[ "_${HDISK}" != "_" ]] && LOCID[${HDISK}]=$( lscfg -l ${HDISK} | awk '{ print $2 }' ) done # print "LOCID = ${!LOCID[@]}" #### #### Extract the World Wide Name and LUN ID for each Hitachi Disk. #### Save these values to an assoicate array for later use. #### unset WWNLIST typeset -A WWNLIST for PV in "${!LOCID[@]}" do unset TMP TMP=( $( lsattr -El "${PV}" -F value -a ww_name -a lun_id 2>/dev/null ) ) WWNLIST[${PV}]="${TMP[0]#0x}-L${TMP[1]#0x}" [[ "_${WWNLIST[${PV}]}" = "_-L" ]] && unset WWNLIST[${PV}] done #### #### Write HTML TABLE code for each of the saved values. #### print "<P> <TABLE Border=\"2\" Cellspacing=\"2\" Cellpadding=\"2\"> <P> <TR Rowspan=\"1\"> <TH Bgcolor=\"lightblue\" Align=\"left\" Valign=\"middle\" Colspan=\"8\"> <FONT Size=\"4\" Color=\"darkblue\"> Machine ID: $( hostname ) </FONT> </TH> </TR> </P> <P> <TR Rowspan=\"1\"> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> Resource<BR>Group </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> Volume<BR>Group </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> Location<BR>ID </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> PVID </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> Active<BR>Disk </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> WWN </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> LDEV </FONT> </TH> <TH Bgcolor=\"lightblue\" Align=\"center\" Valign=\"middle\" Colspan=\"1\"> <FONT Size=\"4\" Color=\"darkblue\"> Inactive<BR>Disk </FONT> </TH> </TR> </P> " #### #### Extract the disk identification parameters #### from the saved values and output the information in an #### HTML table format. The table columns consist of the #### Resource Group, Volume Group, Location ID, Physical #### Volume ID, Active Disk Name, World Wide Name, LDEV #### Number, and Inactive Disk Name. #### for PV in "${!PVID[@]}" do # [[ "_${VGID[${PV}]}" != _*rootvg* ]] && continue [[ "_${PV}" != _*hdisk* ]] && continue printCells "$( hostname )" done for PV in "${!PVID[@]}" do # [[ "_${VGID[${PV}]}" = _*rootvg* ]] && continue [[ "_${PV}" = _*hdisk* ]] && continue printCells "${VGID[${PV}]%%*([_])vg}" done print "</TABLE></P>"