Script Name: lvm_deciphering.pl

Since, This is a perl script run as below

perl lvm_deciphering.pl

#!/usr/bin/perl
use strict;
my (@vgs,$vg,@output,$line,$type,$maxpvs,$maxppsperpv);
my ($activepvs,$ppsize,$total,$factor,$maxdisk);
@vgs = `lsvg -o | sort`;

print "                                        Max           Max  \n";
print "                                        PP's    PP    disk \n";
print "                    Max   Used  VG      per     Size  size \n";
print "VG Name      Type   PV's  PV's  Factor  PV      (MB)  (MB) \n";
print "-----------------------------------------------------------\n";
foreach $vg (@vgs){
        chomp($vg);
        @output = `lsvg $vg`;
        $ppsize = $maxpvs = $activepvs = $type = $maxppsperpv = "";
        foreach $line (@output){
                if ($line =~ /PP SIZE:\s+(\d+)\s+mega.*/) {$ppsize = $1;}
                if ($line =~ /MAX PVs:\s+(\d+).*/) {$maxpvs = $1;}
                if ($line =~ /ACTIVE PVs:\s+(\d+).*/) {$activepvs = $1;}
                if ($line =~ /MAX PPs per PV:\s+(\d+).*/) {$maxppsperpv = $1;}
        }
        $total=$maxpvs*$maxppsperpv;
        $maxdisk=$ppsize*$maxppsperpv;
        if ($maxpvs == 1024) {
                $type = "scale";
        }elsif (($total >= 22352) && ($total <= 32512)){
                $type = "orig";
        }elsif (($total >= 87376) && ($total <= 130048)){
                $type = "big";
        }else{
                print "error determining VG type\n";
                next;
        }

        if ($type eq "orig" || $type eq "big"){
                $factor = $maxppsperpv/1016    
        }else{
                $factor = "N/A";
                $maxppsperpv = "N/A";
                $maxdisk = $ppsize*2097152;
        }

        printf "%-12s %-6s %-5s %-5s ",$vg,$type,$maxpvs,$activepvs;
        printf "%-7s %-7s %-5s %-7s \n",$factor,$maxppsperpv,$ppsize,$maxdisk;
}