Wednesday, December 18, 2013

syscheck stability script for AIX

#!/usr/bin/ksh
#
#--------------------------------------------------
# Script to validate the rootvg and OS information
#
# Written by : Rameshkumar Pitchairaj
#          : IBM Singapore Ptd Ltd
#--------------------------------------------------
# Instruction on usage
#
# 1. Ensure execute permission for the script is there. If not, execute "chmod 755 syscheck_stability.sh"
# 2. ./syscheck_stability.sh > `hostname`_syscheck.txt 2>&1
# -------------------------------------------------
#
# Get common values
#
hname=`hostname`
osversion=`oslevel -r`
dttim=`date '+%Y%m%d-%H:%M'`
#
# Variables
#
tmp_dir=/tmp
tmpfile=${tmp_dir}/rootcheck.$$
#
echo "Checking for rootvg related information....Pls wait...."

lsvg rootvg > ${tmpfile}.lsvg
lsvg -l rootvg | sed '1,2 d' > ${tmpfile}.lsvgl
lsvg -p rootvg | sed '1,2 d' > ${tmpfile}.lsvgp
for i in `awk '{print $1}' ${tmpfile}.lsvgp`
do
 lspv -l $i > ${tmpfile}.lspvl${i}
done

header()
{
 param=$1
 echo "\n----------------------------------------------------------------------"
 echo " Check for : $param"
 echo "----------------------------------------------------------------------\n"
}

footer()
{
 echo "----------------------------------------------------------------------\n"
}

alert()
{
 param=$1
 echo "*** ALERT *** : $param"
}

info()
{
 param=$1
 echo "$param"
}

info "*******************************************************************"
info "System stability check for `hostname` run on `date`"
info "*******************************************************************"

header "Software version AIX, AIX patch level, HACMP, TSM"
info "\nOS version : ${osversion}"
info "OS level : `oslevel -s`"
instfix -i | grep ML

info "\nChecking fileset inconsistencies\n"
lppchk -v > /dev/null 2>&1
if [ $? -ne 0 ]
then
 alert "Inconsistent filesets noticed in the system"
 lppchk -vm3
 else
  info "All filesets are consistent"
 fi

info "\nHACMP version :\n"
lslpp -cL cluster.* | cut -d: -f2,3 | grep server.rte > ${tmpfile}.version 2> /dev/null
if [ $? -eq 0 ]
then
 cat ${tmpfile}.version
else
 info "HACMP not installed"
fi

header "rootvg exclude file"
if [ -f /etc/exclude.rootvg ]
then
 alert "rootvg has exclude file and the content(s) is/are\n"
 cat /etc/exclude.rootvg
else
 info "rootvg does not have exclude file"
fi

header "boot list"
bootlist -m normal -o
footer

header "rootvg disks"
echo "Disk  Status  Total PP  Free PP\n"
awk '{print $1,$2,"  ",$3,"  ",$4}' ${tmpfile}.lsvgp
footer
header "rootvg lv info"
cat ${tmpfile}.lsvgl
footer
header "rootvg lv not in stable condition"
grep -i stale ${tmpfile}.lsvgl
footer
header "rootvg lv not mirrored (Otherthan sysdump devices)"
cat ${tmpfile}.lsvgl | grep -v sysdump | awk '{if ($5 !=2) print $0}'
footer
header "rootvg quorum Should be 1"
quo=`grep QUORUM ${tmpfile}.lsvg | cut -d ":" -f3| sed 's/ [ ]*//g'`
if [ $quo -ne 1 ]
then
  alert "Mirroring will not work due to Quroum value."
  alert "Quorum value : $quo"
else
  info "Quorum value is $quo"
fi
footer
header "rootvg disk lv info (in diskX and not in diskY)"
info "rootvg disks are :\n"
cat ${tmpfile}.lsvgp
for i in `lsvg -l rootvg | sed '1,2 d' | awk '{print $1}'`
do
 lvmirror=`lslv -m $i | tail -1`
 disk1=`echo $lvmirror|awk '{print $3}'`
 disk2=`echo $lvmirror|awk '{print $5}'`
 if [ "X${disk2}" == "X" -o "X${disk1}" == "X" ]
 then
   if [ "X${disk2}" == "X" ]
   then
      alert "lv ${i} is in ${disk1} and does not have mirror copy in other rootvg disks"
   else
      alert "lv ${i} is in ${disk2} and does not have mirror copy in other rootvg disks"
   fi
 fi
done
footer

header "System dump devices"
info "System dump devices configured\n"
sysdumpdev -l
info "\nSystem dump device availability\n"
for j in `grep sysdump ${tmpfile}.lsvgl | awk '{print $1}'`
do
 devi=`lslv -l $j | sed '1,2 d' | awk '{print $1}'`
 info "dump device $j available in disk ${devi}"
done
header "dump device size"
size=`sysdumpdev -e | cut -d: -f2 | awk '{print $1/1048576}'`
info "\nEstimated dump size $size MB\n"
size=`grep SIZE ${tmpfile}.lsvg | cut -d: -f3 | awk '{print $1}'`
for j in `grep sysdump ${tmpfile}.lsvgl | awk '{print $1}'`
do
 lvsize=`grep $j ${tmpfile}.lsvgl | awk '{print $3}'`
 let totsize=${lvsize}*${size}
 info "dumpdevice $j size is $totsize MB"
done
footer
header "Paging space status"
lsps -a
footer

No comments:

Post a Comment