Cover V07, I06
Article
Listing 1
Listing 2

jun98.tar


Listing 1: listpvlv.ksh

#!/bin/ksh
#*************************************************************************
#* PROGRAM     : listpvlv.ksh                                            *
#* AUTHOR      : James M. Santos                                         *
#* DESCRIPTION : Displays summary information about physical volumes     *
#*               (PV) together with more detailed information about each *
#*               logical volume (LV) defined in each PV.                 *
#* PARAMETERS  : 1) -p          - display output                         *
#*               2) -o filename - send the output of the script to the   *
#*                   filename specified.                                 *
#*               3) hdisk(s)    - PV name                                *
#*************************************************************************
USAGE="Usage: $0 [-p] [-o file] [hdisk...]"

UOM='m'
TMPFILE=/tmp/@@listpvlv.tmp

trap 'rm -f $TMPFILE; exit' 1 2 15  # Remove temp file when signals
#   1, 2 or 15 is received.

while getopts ":po:" OPT            # Use getopts to get command line
do                                  #   options and then parse it.  Set
case $OPT in                      #   the unit of measure (UOM) to 'p'
p  ) UOM='p' ;;                 #   if the -p option is given. Set
o  ) exec 1>$OPTARG ;;          #   the output of the script to the
*  ) echo "\nERROR : $USAGE\n"  #   file given with the -o option.
exit 1 ;;
esac
done
shift $(($OPTIND - 1))

lspv | awk '{print $1}' > $TMPFILE  # Field 1 contains the hdisk names.

if [ $# -eq 0 ]                     # If there are no arguments, process
then                                #   all the existing PVs (PVLIST
PVLIST=`cat $TMPFILE`            #   would contain the names of all
else                                #   PVs that would be processed
PVLIST=$*                        #   later in the script).
while test $# -gt 0
do
if grep $1 $TMPFILE >/dev/null # Verify if the hdisk(s) that the user
then :                         #   entered are valid PVs. If
else                           #   they are, do nothing (then :).
echo "\nERROR: $0: $1 is not a valid hdisk.\n"
exit 1                       #   If there is an error, exit the
fi                             #   pgm with a message specifying
shift                          #   the invalid PV.
done
fi

echo Host : `hostname`
echo Date : `date +%D%t%T`
echo

for PV in $PVLIST
do
echo Information for $PV         # Print the specific fields that are
lspv $PV | tee $TMPFILE | awk '  #   needed for the report.
NF == 6 && /^PHY/ {
printf("%s %s\n",    "Part of Volume Group :", $6);
}
NF == 7 && /^PP/ {
printf("%s %s %s\n", "PP Size              :", $3, $4);
}
NF == 8 && /^TOT/ {
printf("%s %s %s %s\n", "Total PPs            :", $3, $4, $5);
}
NF == 5 && /^FRE/ {
printf("%s %s %s %s\n", "Free PPs             :", $3, $4, $5);
}' -

if [ "$UOM" = 'm' ]
then
PPSIZEMULT=`grep "PP SIZE" $TMPFILE | awk '{print $3}'`
else
PPSIZEMULT=1
fi

lspv -l $PV | tail +3 > $TMPFILE

awk '
BEGIN {
if ("'"$UOM"'" == "m")
{
printf("%-20s %44s\n",\
"            ","                    Size(MB)  Size(MB)");
printf("%-20s %44s %s\n",\
"C D  LV Name","Distribution        LPxPP Sz  PPxPP Sz","FS Name");
}
else
{
printf("%-20s %44s\n",\
"            ","                   Size (No  Size (No");
printf("%-20s %44s %s\n",\
"C D  LV Name","Distribution       of LPs)   of PPs) ","FS Name");
}
}
{
LPSIZE = $2 * '$PPSIZEMULT';   # LPSIZE and PPSIZE would contain the
PPSIZE = $3 * '$PPSIZEMULT';   #   size in megabytes if user entered
#   "-m" as a parameter to the script.
"lslv "$1" | grep COPIES" | getline COPY_STR_LINE;
split(COPY_STR_LINE,CSLARRAY);
COPY=CSLARRAY[2];
if (CSLARRAY[5] ~ /^str/)
STRIPED="S";
else
STRIPED=" ";
"lslv -l "$1" | tail +3 | wc -l " | getline NO_OF_DISKS;
printf("%d %d%s %-16s %-23s %9d %9d %s\n",\
COPY,NO_OF_DISKS,STRIPED,$1,$4,LPSIZE,PPSIZE,$5);
}' $TMPFILE

echo
done
rm $TMPFILE

# End of File