Skip to content

Configuration: Emulex elxreport.sh troubleshooting script

cpx October 31, 2013 9 min read Emulex SAN
http://www-dl.emulex.com/support/linux/tools/linux_tools.html

http://cmw3wbd10.emulex.com/downloads/oem-qualified-downloads/oracle/drivers/vmware-drivers-for-oracle/iputil-74013/resources/

 

[root@nbumsrv1 emulex]# cat elxreport.sh #!/bin/bash ########################################################################### # # elxreport.sh # Shell program that gathers system, HBA and device driver/applications # information related to the functionality of Emulex linux device drivers. # The intented targets are Emulex customers with installed linux device # drivers. # This tool creates a tarball file which we ask the customers to send # to Emulex support for analysis. # # Usage: # elxreport.sh [ -h | --help ] # # Options: # -h, --help Display this help message and exit. # # Revisions: # 1.0 11/01/2004 Jerry Lindsey,Vaios Papadimitriou Genesis # 1.1 02/11/2005 Vaios Papadimitriou # # Copyright (C) 2004 Emulex Corporation. # ########################################################################### ########################################################################### # Constants ########################################################################### PROGNAME=$(basename $0) VERSION="1.3" DATE=$(/bin/date +%m%d%y%H%M%S) TOPDIR=/tmp/${PROGNAME} TMPDIR=${TOPDIR}/${PROGNAME}_${DATE} TMPLOG=${TMPDIR}/${PROGNAME}.log OS_REV=`uname -r | cut -c1-3` ########################################################################### # Functions ########################################################################### # # Function to display usage message. # function usage() { echo "Usage: ${PROGNAME} [-h | --help]" echo echo "Shell program that gathers system, HBA and device driver/applications" echo "information related to the functionality of Emulex linux device drivers." echo "This tool creates a tarball file /tmp/${PROGNAME}_<date>.tgz to be send" echo "to Emulex support for analysis." echo } # # Function to execute a shell command. # exec_cmd() { echo "" >> $TMPLOG echo "Command: ${1} " >> $TMPLOG eval ${1} >> $TMPLOG 2>&1 echo "" >> $TMPLOG } # # Function to copy data to the log file. # exec_copy() { echo "" >> $TMPLOG echo "Copying output from: ${1}" >> $TMPLOG if [ -f ${1} ] ; then cp --parents ${1} $TMPDIR >> $TMPLOG fi echo "" >> $TMPLOG } # # Function to create temporary directories and files and display banner # information. # init_files() { # Must run as root if [ $UID != 0 ]; then echo "You must be logged on as root." exit 1 fi # Create temp dir to store results rm -rf $TOPDIR mkdir -p $TMPDIR > $TMPLOG echo "" echo "Emulex Corporation - ELX Report Utility, version ${VERSION}" | tee -a $TMPLOG echo "Date:$(date)" | tee -a $TMPLOG echo "Initializing report environment for host:${HOSTNAME}" } # # Function to clean-up temporary directories and files. # clean_up() { rm -rf ${TOPDIR} } # instr p1 p2 - return 1 if p2 exists in p1 instr() { let FOUND=0 for j in $2; do if [ $1 = $j ] ; then let FOUND=1 fi done return $FOUND } # process_iosched C_DIR D_DIR parm process_iosched() { local C_DIR local D_DIR local parm local readok local EXCLUDELIST local RETURNVALUE C_DIR="$1/$3" D_DIR="$2-$3" for parm in `ls $C_DIR` do if [ -d $C_DIR/$parm ] ; then echo "$D_DIR: Unexpected directory found:$C_DIR/$parm" else readok=`ls -l $C_DIR/$parm | cut -c2-2` if [ "$readok" = "r" ] && [ ! -L $C_DIR/$parm ] && [ ! -d $C_DIR/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $C_DIR/$parm` >> $TMPLOG fi fi fi done return } # process_iosched C_DIR D_DIR parm process_queue() { local C_DIR local D_DIR local parm local readok local EXCLUDELIST local RETURNVALUE C_DIR="$1/$3" D_DIR="$2-$3" for parm in `ls $C_DIR` do if [ -d $C_DIR/$parm ] ; then if [ "$parm" = "iosched" ]; then process_iosched $C_DIR $D_DIR $parm fi else readok=`ls -l $C_DIR/$parm | cut -c2-2` if [ "$readok" = "r" ] && [ ! -L $C_DIR/$parm ] && [ ! -d $C_DIR/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $C_DIR/$parm` >> $TMPLOG fi fi fi done return } # process_block C_DIR D_DIR parm process_block() { local C_DIR local D_DIR local parm local readok local EXCLUDELIST local RETURNVALUE C_DIR="$1/$3" D_DIR="$2-$3" for parm in `ls $C_DIR` do if [ -d $C_DIR/$parm ] ; then if [ "$parm" = "queue" ]; then process_queue $C_DIR $D_DIR $parm fi else readok=`ls -l $C_DIR/$parm | cut -c2-2` if [ "$readok" = "r" ] && [ ! -L $C_DIR/$parm ] && [ ! -d $C_DIR/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $C_DIR/$parm` >> $TMPLOG fi fi fi done return } # process_lun C_DIR D_DIR parm process_lun() { local C_DIR local D_DIR local parm local readok local EXCLUDELIST local RETURNVALUE C_DIR="$1/$3" D_DIR="$2-$3" for parm in `ls $C_DIR` do if [ -d $C_DIR/$parm ] ; then if [ "$parm" = "block" ]; then echo "$D_DIR: "`ls -l $C_DIR/$parm` >> $TMPLOG process_block $C_DIR $D_DIR $parm fi else readok=`ls -l $C_DIR/$parm | cut -c2-2` if [ "$readok" = "r" ] && [ ! -L $C_DIR/$parm ] && [ ! -d $C_DIR/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $C_DIR/$parm` >> $TMPLOG fi fi fi done return } # process_target C_DIR D_DIR parm process_target() { local C_DIR local D_DIR local parm local readok local EXCLUDELIST local RETURNVALUE C_DIR="$1/$3" D_DIR="$2-$3" for parm in `ls $C_DIR` do if [ -d $C_DIR/$parm ] ; then process_lun $C_DIR $D_DIR $parm else readok=`ls -l $C_DIR/$parm | cut -c2-2` if [ "$readok" = "r" ] && [ ! -L $C_DIR/$parm ] && [ ! -d $C_DIR/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $C_DIR/$parm` >> $TMPLOG fi fi fi done return } # process_device C_DIR D_DIR parm process_device() { local C_DIR local D_DIR local parm local readok local EXCLUDELIST local RETURNVALUE C_DIR="$1/$3" D_DIR="$2-$3" for parm in `ls $C_DIR` do if [ -d $C_DIR/$parm ] ; then process_target $C_DIR $D_DIR $parm else readok=`ls -l $C_DIR/$parm | cut -c2-2` if [ "$readok" = "r" ] && [ ! -L $C_DIR/$parm ] && [ ! -d $C_DIR/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $C_DIR/$parm` >> $TMPLOG fi fi fi done return } dump_sys_class() { local f local HOST_ID local D_DIR local parm local EXCLUDELIST EXCLUDELIST="mbox ctlreg slimem ctpass" for f in /sys/class/scsi_host/* do if [ -f $f/lpfc_drvr_version ]; then HOST_ID=`echo $f | sed -e "s/.*host//"` echo "" >> $TMPLOG echo "Processing /sys/class/scsi_host/host$HOST_ID:" >> $TMPLOG D_DIR="host$HOST_ID" for parm in `ls $f` do if [ $parm = "device" ]; then process_device $f $D_DIR $parm fi readok=`ls -l $f/$parm | cut -c2-2` if [ $readok = r ] && [ ! -L $f/$parm ] && [ ! -d $f/$parm ] ; then instr "$parm" "$EXCLUDELIST" RETURNVALUE=$? if [ ${RETURNVALUE} -eq 0 ]; then echo "$D_DIR: $parm="`cat $f/$parm` >> $TMPLOG fi fi done fi done echo "" >> $TMPLOG } # # Function to gather OS/distribution related information. # get_os_info() { exec_cmd "/bin/uname -a" if [ -f /etc/redhat-release ] ; then exec_cmd "cat /etc/redhat-release" exec_copy "/etc/redhat-release" elif [ -f /etc/SuSE-release ] ; then exec_cmd "cat /etc/SuSE-release" exec_copy "/etc/SuSE-release" fi echo "OS Rev is "${OS_REV} } # # Function to gather system information related to the functionality # of the linux device driver. # get_system_info() { exec_cmd "hostname" exec_cmd "uptime " exec_copy "/proc/partitions" exec_copy "/proc/cpuinfo" exec_copy "/proc/devices" exec_copy "/proc/cmdline" exec_copy "/proc/scsi/scsi" exec_cmd "gcc -v" exec_cmd "/sbin/lsmod" } # # Function to gather system memory information. # get_memory_info() { exec_cmd "vmstat" exec_cmd "free" exec_copy "/proc/slabinfo" } # # Function to gather information about installed RPMs. # get_rpm_info() { exec_cmd "rpm -qa | sort" } get_pci_info() { exec_cmd "/sbin/lspci -v" exec_cmd "/sbin/lspci -n" exec_cmd "/sbin/lspci -nv" } get_kernel_info() { exec_cmd "ls -la /usr/src" if [ -f /usr/src/linux/.config ]; then exec_cmd "cp /usr/src/linux/.config ${TMPDIR}/${KVER}.config" fi } get_message_files() { exec_copy "/var/log/messages " # exec_copy "/var/log/messages.%" exec_copy "/var/log/messages.1" exec_copy "/var/log/messages.2" exec_copy "/var/log/messages.3" if [ -e /var/log/warn ] ; then exec_copy "/var/log/warn" exec_copy "/var/log/warn.1" exec_copy "/var/log/warn.2" exec_copy "/var/log/warn.3" fi exec_copy "/var/log/dmesg" } get_boot_info() { exec_copy "/etc/lilo.conf" exec_copy "/etc/grub.conf" exec_copy "/boot/etc/yaboot.conf" } # # Function to gather lpfc device driver information. # get_lpfc_info() { exec_copy "/proc/scsi/scsi" exec_cmd "ls /proc/scsi/lpfc" # exec_copy '/proc/scsi/lpfc/\*' if [ -d /proc/scsi/lpfc ]; then echo "Copying output from: /proc/scsi/lpfc/*" >> $TMPLOG echo "" >> $TMPLOG cp --parents /proc/scsi/lpfc/* $TMPDIR >> $TMPLOG fi # exec_cmd "find /lib/modules -name lpfc\* -exec ls -l \{\} \;" echo "Command: find /lib/modules -name lpfc\* -exec ls -l {}" >> $TMPLOG find /lib/modules -name lpfc\* -exec ls -l {} \; >> $TMPLOG echo "" >> $TMPLOG # Any mention of Emulex driver in /etc/... for f in $(grep -l -r -s lpfc /etc/*) ; do echo "lpfc found in:$f*" >> $TMPLOG ; cp --parents $f ${TMPDIR}; done echo "" >> $TMPLOG } get_library_info() { exec_cmd "file /usr/lib/libdfc*.*" exec_cmd "ls -la /usr/lib/libdfc*.*" exec_cmd "file /usr/lib/libHBA*.*" exec_cmd "ls -la /usr/lib/libHBA*.*" exec_cmd "file /usr/lib/libemulexhbaapi*.*" exec_cmd "ls -la /usr/lib/libemulexhbaapi*.*" exec_cmd "cat /etc/hba.conf" } ########################################################################### # Program starts here ########################################################################### if [ "$1" = "--help" -o "$1" = "-h" ]; then usage exit 0 fi # Create temp files init_files echo "Getting OS Info..." | tee -a $TMPLOG get_os_info echo "Getting System Info..." | tee -a $TMPLOG get_system_info echo "Checking System memory..." | tee -a $TMPLOG get_memory_info echo "Getting RPM Info..." | tee -a $TMPLOG get_rpm_info echo "Getting PCI Info..." | tee -a $TMPLOG get_pci_info echo "Checking kernel info..." | tee -a $TMPLOG get_kernel_info echo "Gathering message files..." | tee -a $TMPLOG get_message_files echo "Gathering boot info..." | tee -a $TMPLOG get_boot_info echo "Getting LPFC info..." | tee -a $TMPLOG get_lpfc_info if [ ${OS_REV} = 2.6 ]; then echo "Gathering LPFC info from /sys/class/scsi_host" | tee -a $TMPLOG dump_sys_class fi echo "Getting library info..." | tee -a $TMPLOG get_library_info find ${TMPDIR} -name "*" |xargs chmod 755 echo "Generating report..." | tee -a $TMPLOG tar -C "/tmp" -zcvf "/tmp/${PROGNAME}_${DATE}.tgz" ${PROGNAME}/ >> $TMPLOG echo "" echo "Please send file /tmp/${PROGNAME}_${DATE}.tgz to your Emulex Support Representative." echo "" clean_up exit 0

 

0 0 votes
Article Rating
guest

0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x