This script can be executed on LPAR, and also on root, without argument, it's just a preview. With '-f' it will FIX all changes, it possible it's directly applied, else at the end it report all parameters currently set that will be changed after the reboot.
Centralize variables for all scripts: .env file
# global variables for all scripts export binpath=/root/script/bin export sn=`basename $0 | cut -d. -f1` export HOSTNAME=`hostname` export logpath=/root/script/log export logname=$logpath/$sn.log export configfile=$binpath/$sn.cfg export destination="test@test.com"
change_devices_param.sh
Change disks and adapter settings:
#!/bin/ksh93 #set -x ############################################# #@(#) Change disk and adapter attribute on a host ############################################# # check if a disk on LPAR has the same path # version 1.0 08-04-2010 Manu # version 1.1 21-09-2015 ############################################# dir=`dirname $0` . $dir/.env #------------------------------------------------ # usage () #------------------------------------------------ usage() { echo "Usage: (" "|-v|-f)" echo "\tChange disks and adapter parameters on LPAR or VIOS if needed" echo "\tFirst try to change, if not succeed, change to ODM only" echo "\t-v: verbose (default yes)" echo "\t-f: fix correct parameter (default no)" } #------------------------------------------------ # chhostval () # try to change a value on a device, if it # doesn't succeed, then change in ODM only #------------------------------------------------ chhostval() { dev=$1 attr=$2 val=$3 difference=$4 if [ ${#} -ne 4 ] then difference="equal" fi val1=$(echo $val | sed 's/^0x//') value=$(lsattr -El $dev | grep "^$attr " | awk '{print $2}') value1=$(echo $value | sed 's/^0x//') if [ $difference == "higher" ] then if [ $(expr ${value1} \< ${val1}) -eq 1 ] then if [ $fix != "yes" ] then printf "\E[31;1m""!!! FIX. $attr need to be changed from $value to $val !!!"" $1\E[0m\n" else printf "\E[31;1m""FIX. $attr will be changed from $value to $val"" $1\E[0m\n" chdev -l $dev -a $attr=$val > /dev/null 2>&1 if [ "$?" -ne 0 ] then chdev -l $dev -a $attr=$val -P echo "must be rebooted before changes applies" else printf "\E[32;1m""OK. $attr for $dev changed to $val"" $1\E[0m\n" fi sleep 1 fi else printf "\E[32;1m""OK. $attr for $dev is already $value"" $1\E[0m\n" fi else if [ $difference == "lower" ] then if [ $(expr ${value1} \> ${val1}) -eq 1 ] then if [ $fix != "yes" ] then printf "\E[31;1m""!!! FIX. $attr need to be changed from $value to $val !!!"" $1\E[0m\n" else printf "\E[31;1m""FIX. $attr will be changed from $value to $val"" $1\E[0m\n" chdev -l $dev -a $attr=$val > /dev/null 2>&1 if [ "$?" -ne 0 ] then chdev -l $dev -a $attr=$val -P echo "must be rebooted before changes applies" else printf "\E[32;1m""OK. $attr for $dev changed to $val"" $1\E[0m\n" fi sleep 1 fi else printf "\E[32;1m""OK. $attr for $dev is already $value"" $1\E[0m\n" fi else if [ $difference == "equal" ] then if [[ ${value1} != ${val1} ]] then if [ $fix != "yes" ] then printf "\E[31;1m""!!! FIX. $attr need to be changed from $value to $val !!!"" $1\E[0m\n" else printf "\E[31;1m""FIX. $attr will be changed from $value to $val"" $1\E[0m\n" chdev -l $dev -a $attr=$val > /dev/null 2>&1 if [ "$?" -ne 0 ] then chdev -l $dev -a $attr=$val -P echo "must be rebooted before changes applies" else printf "\E[32;1m""OK. $attr for $dev changed to $val"" $1\E[0m\n" fi sleep 1 fi else printf "\E[32;1m""OK. $attr for $dev is already $value"" $1\E[0m\n" fi fi fi fi } #------------------------------------------------ # change_path () #------------------------------------------------ change_path() { dev=$1 parent=$2 prio=$3 if [ `lspath -AEH -l $dev -p $parent | grep priority | awk '{print $2}'` != "$prio" ] then connect=`odmget -q "name=$dev and parent=$parent and path_status=1" CuPath | grep connection | awk '{print $3}'` if [ $fix != "yes" ] then printf "\E[31;1m""!!! FIX. path priority need to be changed on $dev $parent to $prio !!!"" $1\E[0m\n" else chpath -l $dev -p $parent -w $connect -a priority=$prio > /dev/null 2>&1 if [ "$?" -ne 0 ] then printf "\E[31;1m""!!!ERROR cannot change path priority on $dev $parent to $prio"" $1\E[0m\n" else printf "\E[31;1m""FIX. changed priority on $dev $parent Priority `lspath -AEH -l $dev -p $parent | grep priority | awk '{print $2}'`"" $1\E[0m\n" fi fi else printf "\E[32;1m""OK. No change to priority required on $dev $parent Priority `lspath -AEH -l $dev -p $parent | grep priority | awk '{print $2}'`"" $1\E[0m\n" fi } #------------------------------------------------ # dmsg () #------------------------------------------------ dmsg() { if [ $debug == "yes" ] then echo "$1" fi } #------------------------------------------------ # check_lpar_param () #------------------------------------------------ check_lpar_param () { #******************************** # Check on LPAR or pSeries #-------------------------------- # Check ent Virtual adapter attributes list="" lsdev -C | grep '^ent' | grep -i 'virtual' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check ENT $device on $HOSTNAME -----" echo "" attribut="max_buf_huge" goodval="128" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_huge" goodval="64" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_large" goodval="128" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_large" goodval="64" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_medium" goodval="512" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_medium" goodval="256" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_small" goodval="4096" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_small" goodval="2048" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_tiny" goodval="4096" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_tiny" goodval="2048" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="poll_uplink" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check en Virtual adapter attributes list="" lsdev -C | grep '^ent' | grep -i virtual | sed 's/^ent/en/' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check EN $device on $HOSTNAME -----" echo "" attribut="mtu_bypass" goodval="on" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check fcs attributes list="" lsdev -C | grep '^fcs' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check FCS $device on $HOSTNAME -----" echo "" attribut="max_xfer_size" goodval="0x200000" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="num_cmd_elems" goodval="256" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check fscsi attributes list="" lsdev -C | grep fscsi | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check FSCSI $device on $HOSTNAME -----" echo "" lsdev -p $device | grep rmt if [ $? != 0 ] then attribut="fc_err_recov" goodval="fast_fail" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="dyntrk" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval else echo "FSCSI $device on $HOSTNAME has tapes as child devices" fi done #-------------------------------- # Check Virtual SCSI Client Adapter list="" lsdev -Cc adapter |grep 'Virtual SCSI Client Adapter' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check Virtual SCSI Client Adapter $device on $HOSTNAME -----" echo "" attribut="vscsi_path_to" goodval="30" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="vscsi_err_recov" goodval="fast_fail" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check 2107 disk attributes list="" lsdev -Cc disk |grep 'IBM MPIO FC 2107' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check IBM MPIO FC 2107 $device on $HOSTNAME -----" echo "" attribut="algorithm" goodval="load_balance" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="hcheck_interval" goodval="60" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="hcheck_mode" goodval="nonactive" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check Virtual SCSI Disk Drive attributes list="" lsdev -Cc disk |grep 'Virtual SCSI Disk Drive' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check Virtual SCSI Disk Drive $device on $HOSTNAME -----" echo "" attribut="algorithm" goodval="fail_over" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="hcheck_interval" goodval="60" # IBM support recommendation diffval="equal" chhostval $device $attribut $goodval $diffval attribut="hcheck_mode" goodval="nonactive" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="reserve_policy" goodval="no_reserve" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="queue_depth" goodval="20" diffval="higher" chhostval $device $attribut $goodval $diffval # Alternate path on the 2 VIOS # Calcul disk pair ou impair nbscsi=0 if [ $(lspath -l $device | grep vscsi | wc -l | awk '{print $1}') -eq "2" ] then for line in $(lspath -l $device | sort | awk '{print $3}') do vscsi[$nbscsi]=$line let nbscsi="($nbscsi +1)" done num=`echo $device | sed "s/hdisk//"` let "num1=num/2" # Priorite 1 pour chiffre pair sur VSCSI1 et 2 sur VSCSI2 (inversement sur chiffre impair) let "priority=num-num1*2+1" case $priority in "1") change_path $device ${vscsi[0]} 1 change_path $device ${vscsi[1]} 2 ;; "2") change_path $device ${vscsi[0]} 2 change_path $device ${vscsi[1]} 1 ;; "*") echo "**** ERROR ****" ;; esac fi done } #------------------------------------------------ # check_vios_param () #------------------------------------------------ check_vios_param () { #******************************** # Check on VIO Servers #-------------------------------- # Check ent Virtual adapter attributes list="" lsdev -C | grep '^ent' | grep -i 'virtual' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check ENT $device on $HOSTNAME -----" echo "" attribut="max_buf_huge" goodval="128" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_huge" goodval="64" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_large" goodval="128" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_large" goodval="64" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_medium" goodval="512" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_medium" goodval="256" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_small" goodval="4096" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_small" goodval="2048" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="max_buf_tiny" goodval="4096" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="min_buf_tiny" goodval="2048" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="poll_uplink" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check en Virtual adapter attributes list="" lsdev -C | grep '^ent' | grep -i virtual | sed 's/^ent/en/' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check EN $device on $HOSTNAME -----" echo "" attribut="mtu_bypass" goodval="on" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check ent SEA attributes list="" lsdev -C | grep '^ent' | grep -i 'shared ethernet adapter' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check ENT SEA $device on $HOSTNAME -----" echo "" attribut="adapter_reset" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="jumbo_frames" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="large_receive" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="largesend" goodval="1" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check ent 10GbE adapter attributes list="" lsdev -C | grep '^ent' | grep '10GbE' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check ENT $device on $HOSTNAME -----" echo "" attribut="flow_ctrl" goodval="no" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="jumbo_frames" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="large_receive" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="large_send" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check ent Etherchannel adapter attributes list="" lsdev -C | grep '^ent' | grep 'Etherchannel' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check ENT $device on $HOSTNAME -----" echo "" attribut="use_jumbo_frame" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check fcs attributes list="" lsdev -C | grep '^fcs' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check FCS $device on $HOSTNAME -----" echo "" attribut="max_xfer_size" goodval="0x200000" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="num_cmd_elems" goodval="1600" diffval="higher" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check fscsi attributes list="" lsdev -C |grep fscsi | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check FSCSI $device on $HOSTNAME -----" echo "" attribut="fc_err_recov" goodval="fast_fail" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="dyntrk" goodval="yes" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check 2107 disk attributes list="" lsdev -Cc disk |grep 'IBM MPIO FC 2107' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check IBM MPIO FC 2107 $device on $HOSTNAME -----" echo "" attribut="algorithm" goodval="load_balance" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="hcheck_interval" goodval="60" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="hcheck_mode" goodval="nonactive" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="reserve_policy" goodval="no_reserve" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check DS3xxx disk attributes list="" lsdev -Cc disk |grep 'MPIO DS3' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check IBM MPIO DS3xxx $device on $HOSTNAME -----" echo "" attribut="reserve_policy" goodval="no_reserve" diffval="equal" chhostval $device $attribut $goodval $diffval done #-------------------------------- # Check Hitachi disk attributes list="" lsdev -Cc disk |grep 'Hitachi Disk Array' | while read line do echo $line | read dev dummy list="$list $dev" done for device in $list do echo "" echo "----- Check HITACHI DISK ARRAY $device on $HOSTNAME -----" echo "" attribut="queue_depth" goodval="20" diffval="higher" chhostval $device $attribut $goodval $diffval attribut="algorithm" goodval="round_robin" diffval="equal" chhostval $device $attribut $goodval $diffval attribut="reserve_policy" goodval="no_reserve" diffval="equal" chhostval $device $attribut $goodval $diffval done } ########################################################################### # # main () # ########################################################################### main () { cd $path_script # Read and check scripts arguments debug=yes fix=no while [ $# -gt 0 ] do case "$1" in -f) fix=yes ;; -v) debug=yes ;; -h|help) usage exit 1;; esac shift done echo `date`" : Begin of "$sn" "$HOSTNAME echo "**********************\n" # Check if LPAR is a VIOS ls /usr/ios/cli/ioscli > /dev/null 2>&1 if [ $? -eq 0 ] then check_vios_param else check_lpar_param fi echo "\n**********************" nb=$(odmget CuAtSav | grep name | wc -l | awk '{print $1}') if [ "$nb" -ne "0" ] then printf "\E[31;1m""!!! FIX. A reboot is required to apply $nb device(s) parameter(s) !!!"" $1\E[0m\n" odmget CuAtSav | egrep "name|attribute|value" | paste - - - echo "\n**********************" fi echo `date`" : End of "$sn" "$HOSTNAME } main $* 2>&1 | tee $logname