Sunday, September 11, 2011

How to determine disk space in AIX

As i'm still pretty new to AIX, i need to learn as quickly as possible to manage the new babies in my care. :) Let say i want to determine disk size of physical volume The output below is in Mb.

# bootinfo -s hdisk2
51200
For free space left in volume group We can see that there are 36Gb of space left in VG unassigned.
# lsvg rootvg
VOLUME GROUP:       rootvg                   VG IDENTIFIER:  00f603d800004c000000012c441dd962
VG STATE:           active                   PP SIZE:        32 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      1918 (61376 megabytes)
MAX LVs:            256                      FREE PPs:       1140 (36480 megabytes)
LVs:                13                       USED PPs:       778 (24896 megabytes)
OPEN LVs:           12                       QUORUM:         1 (Disabled)
TOTAL PVs:          2                        VG DESCRIPTORS: 3
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         2                        AUTO ON:        yes
MAX PPs per VG:     32512
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 256 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
PV RESTRICTION:     none
This is the demo script i have written to check both disk and inode utilisation. Please let me know if you find this useful or the gurus want to help me improve. :)
#!/bin/ksh
#
# FILENAME   : checkDiskSpace.ksh
# AUTHOR     : Victor Kwan
# EMAIL      : victorkk [AT] gmail [DOT] com
# PURPOSE    : To check disk and inode utilisation
#            : and alert sys admin if threshold is breached.
# DATE       : Feb 2011
#

# 
# Parameters setup
OUTPUTFILE_DF="checkDisk.DF.`hostname`.`date '+%d%b%Y'`.output"
NOTIFICATION_MSG="checkDisk.DF.`hostname`.`date '+%d%b%Y'`.message"
isFOUND=0

#
# Input Validation
if [ $# -ne 3 ]
then
        printf "Usage: \n\t$0   \n\n"
        exit
fi

DISK_THRESHOLD=$1
INODE_THRESHOLD=$2
EMAIL="$3"

#
# Check for Logical Disk Partition full
df -m > ./$OUTPUTFILE_DF

#
# Setup the messages
printf "----------------------------------------\n" > $NOTIFICATION_MSG
printf " Check for Logical Parition Utilisation\n\n" >> $NOTIFICATION_MSG
printf " Disk / Inode Threshold: $DISK_THRESHOLD | $INODE_THRESHOLD \n" >> $NOTIFICATION_MSG
printf "----------------------------------------\n\n" >> $NOTIFICATION_MSG


if [ `cat $OUTPUTFILE_DF | wc -l` == 1 ]
then
        printf "No Partition detected.\n"
else
        cat $OUTPUTFILE_DF | while read LINE
        do
                isFULL_CHECK=`echo $LINE | awk '{print $4}' | grep "%" | wc -l`
                #printf "[DEBUG]isFULL_CHECK is %d.\n" $isFULL_CHECK

                if [ $isFULL_CHECK == 1 ]
                then

                        LDISK=`echo $LINE | awk '{print $1}'`
                        LDISK_PARTITION=`echo $LINE | awk '{print $7}'`
                        LDISK_SIZE=`echo $LINE | awk '{print $2}'`
                        LDISK_USED=`echo $LINE | awk '{print $4}' | awk -F% '{print $1}'`
                        LDISK_INODE=`echo $LINE | awk '{print $6}' | awk -F% '{print $1}'`

                        if [ $LDISK_USED -ge $DISK_THRESHOLD -o $LDISK_INODE -ge $INODE_THRESHOLD ]
                        then
                                #printf "[DEBUG]The line is $LINE\n"
                                printf "Partition \"%s\" mounted on \"%s\"\n" $LDISK_PARTITION $LDISK >> $NOTIFICATION_MSG
                                printf "Size (Mb) | Disk (%%) | Inode (%%)\n"  >> $NOTIFICATION_MSG
                                printf "%-9.2f | %-8d | %-8d\n\n" $LDISK_SIZE $LDISK_USED $LDISK_INODE >> $NOTIFICATION_MSG
                                isFOUND=1
                        fi
                fi

        done
fi

if [ $isFOUND == 0 ]
then
        printf "All Partition within threshold.\n" >> $NOTIFICATION_MSG

elif [ $isFOUND == 1 ]
then
        cat $NOTIFICATION_MSG | mailx -s "[`hostname`] Disk Space Above Threshold" $EMAIL
fi

#
# Some Housekeeping
rm $OUTPUTFILE_DF
rm $NOTIFICATION_MSG

No comments: