#!/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
#
#--------------------------------------------------
# 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