User Tools

Site Tools


aix:script_disable_unused_fcs

AIX disable unused fcs (FC ports)

[root@aix01]/root# cat /root/scripts/disable_unused_fcs.sh
#!/usr/bin/ksh
#set -x
##################################################
#@(#) disable all FC adapter not used for disks
# FC adapter on FCoE adapters
# FC ports with no light
##################################################
# version: 1.1 14-03-2012 Manu
##################################################

dir=`dirname $0`
. $dir/.env

excl_fcs=$(/usr/ios/cli/ioscli lsmap -all -npiv | grep '^FC' | cut -d':' -f2- | awk '{print $1}' | sort -u | paste -sd'|' -)
if [ "${excl_fcs}" == "" ]
then
  excl_fcs="None"
fi

#----------------------------
disable_fcoe ()
{
lsdev -Cc adapter | grep fcs | grep 'FCoE' | awk '{print $1,$3}' | while read fcs address
do
  fscsi=$(lsdev -C | grep '^f' | grep fscsi | grep "${address}-" | awk '{print $1}')
  autoconfig=$(lsattr -El $fscsi -a autoconfig | awk '{print $2}')
  if [ "$autoconfig" == "defined" ]
  then
    echo "adapter : $fcs state defined OK"
  else
    echo "adapter : $fcs type FCoE, disabling"
    ($execute) && rmdev -l $fscsi -R
    ($execute) && chdev -l $fscsi -a autoconfig=defined
  fi
  echo "$fcs $address $fscsi $(lsattr -El $fscsi -a autoconfig | awk '{print $2}')"
done
}

#----------------------------
disable_fcs_power ()
{
# if host is p9-server
echo "##########
active adapter are:"
if [ "${excl_fcs}" != "None" ]
then
  for fcs in $(echo $excl_fcs | sed 's/\|/\ /g')
  do
    lscfg -vpl $fcs | grep fcs
  done
fi
echo "##########"
if [ $(lsattr -El sys0 -a modelname | grep -q '9080-M9S'; echo $?) -eq 0 ]
then
  # Remove from check all fcs that are mapped
  lsdev -Cc adapter | grep fcs | grep -v 'FCoE' | awk '{print $1";"$3}' | egrep -v "$excl_fcs" | sed 's/;/\ /' | while read fcs address
  do
    fscsi=$(lsdev -C | grep '^f' | grep fscsi | grep "${address}-" | awk '{print $1}')
    autoconfig=$(lsattr -El $fscsi -a autoconfig | awk '{print $2}')
    if [ "$autoconfig" == "defined" ]
    then
      echo "adapter : $fcs state defined OK"
    else
      echo "Waiting"
      if [ $(fcstat $fcs > /dev/null 2>&1; echo $?) -eq 0 ]
      then
        lscfg -vpl $fcs | grep fcs
        echo "adapter : $fcs connected to SAN, no action OK"
      else
        echo "adapter : $fcs failed to connect to SAN, disabling"
        if [ "$execute" == "true" ]
        then
          ($execute) && rmdev -l $fscsi -R 2>/dev/null
          # if not working, try do disable device individualy
          if [ "$?" -ne 0 ]
          then
            echo "Replaying rmdev"
            for dev in $(lsdev -C | grep "${address}-" | awk '{print $3,$1}' | sort -r | awk '{print $2}' | egrep '^sf|^f')
            do
              ($execute) && rmdev -l $dev 2>/dev/null
            done
            ($execute) && rmdev -l $fscsi -R 2>/dev/null
          fi
          ($execute) && chdev -l $fscsi -a autoconfig=defined
        fi
      fi
    fi
    echo "$fcs $address $fscsi $(lsattr -El $fscsi -a autoconfig | awk '{print $2}')"
  done
fi
}

##########################
# Main
##########################
# Read and check scripts arguments
execute=false #preview only
while [ $# -gt 0 ]
do
   case "$1" in
      -f) execute=true ;;
      -h|help) usage
               exit 1;;
   esac
   shift
done

disable_fcoe
disable_fcs_power
aix/script_disable_unused_fcs.txt · Last modified: 2021/01/01 21:24 (external edit)