NAME
HPUX::LVM - Perl function to handle HPUX LVM structure
SYNOPSIS
my $lvminfo_data = new HPUX::LVMInfo(
target_type =>"local",
persistance =>"new",
access_prog =>"ssh",
access_system =>"localhost",
access_user =>"root"
);
$arref2 = $lvminfo_data->get_all_volumegroups();
foreach $vg (@$arref2) {
print "Volume Group: $vg\n";
push @save_vgs, $vg;
$vg_save = $vg;
}
$arref2a = $lvminfo_data->get_vg_physicalvols(
volume_group => $vg_save
);
print "Physical vols in vg: $vg_save\n";
foreach $pvinvg (@$arref2a) {
print "$pvinvg\n";
push @save_pvs, $pvinvg;
$pvinvg_save = $pvinvg;
}
DESCRIPTION
This module takes the output from the LVM Commands vgdisplay and lvdisplay and pvdisplay and puts them in a hash of hashes in the following manner as an example:
'/dev/vg08' => HASH(0x404214c8)
'Act_PV' => 4
'Alloc_PE' => 4092
'Cur_LV' => 2
'Cur_PV' => 4
'Free_PE' => 0
'Max_LV' => 255
'Max_PE_per_PV' => 1023
'Max_PV' => 16
'Open_LV' => 2
'PE_Size_Mbytes' => 4
'Physical_Vols' => HASH(0x40421510)
'/dev/dsk/c3t12d0' => HASH(0x404215a0)
'Free_PE' => 0
'PV_Status' => 'available'
'Total_PE' => 1023
'/dev/dsk/c3t13d0' => HASH(0x40421528)
'Free_PE' => 0
'PV_Status' => 'available'
'Total_PE' => 1023
'/dev/dsk/c3t14d0' => HASH(0x40421564)
'Free_PE' => 0
'PV_Status' => 'available'
'Total_PE' => 1023
'/dev/dsk/c3t15d0' => HASH(0x404215dc)
'Free_PE' => 0
'PV_Status' => 'available'
'Total_PE' => 1023
'Total_PE' => 4092
'Total_PVG' => 0
'VGDA' => 8
'VG_Status' => 'available'
'VG_Write_Access' => 'read/write'
'lvols' => HASH(0x4042166c)
'lvol1' => HASH(0x40421684)
'Allocated_PE' => 2046
'Current_LE' => 2046
'LV_Size' => 8184
'LV_Status' => 'available/syncd'
'PV_Data' => HASH(0x4042178c)
'/dev/dsk/c3t14d0' => HASH(0x404217a4)
'le_on_pv' => 1023
'pe_on_pv' => 1023
'/dev/dsk/c3t15d0' => HASH(0x404217d4)
'le_on_pv' => 1023
'pe_on_pv' => 1023
'Used_PV' => 2
'lvdata' => HASH(0x404216b4)
'Allocated_PE' => 2046
'Allocation' => 'strict'
'Bad_block' => 'on'
'Consistency_Recovery' => 'MWC'
'Current_LE' => 2046
'IO_Timeout_Seconds' => 'default'
'LV_Permission' => 'read/write'
'LV_Size_Mbytes' => 8184
'LV_Status' => 'available/syncd'
'Mirror_copies' => 0
'Schedule' => 'parallel'
'Stripe_Size_Kbytes' => 0
'Stripes' => 0
'VG_Name' => '/dev/vg08'
'lvol2' => HASH(0x40422834)
'Allocated_PE' => 2046
'Current_LE' => 2046
'LV_Size' => 8184
'LV_Status' => 'available/syncd'
'PV_Data' => HASH(0x4042293c)
'/dev/dsk/c3t12d0' => HASH(0x40422984)
'le_on_pv' => 1023
'pe_on_pv' => 1023
'/dev/dsk/c3t13d0' => HASH(0x40422954)
'le_on_pv' => 1023
'pe_on_pv' => 1023
'Used_PV' => 2
'lvdata' => HASH(0x40422864)
'Allocated_PE' => 2046
'Allocation' => 'strict'
'Bad_block' => 'on'
'Consistency_Recovery' => 'MWC'
'Current_LE' => 2046
'IO_Timeout_Seconds' => 'default'
'LV_Permission' => 'read/write'
'LV_Size_Mbytes' => 8184
'LV_Status' => 'available/syncd'
'Mirror_copies' => 0
'Schedule' => 'parallel'
'Stripe_Size_Kbytes' => 0
'Stripes' => 0
'VG_Name' => '/dev/vg08'
each attribute is the same as output in the command but with underscores instead of spaces so "Allocated PE" is "Allocated_PE". I also had to add attributes "Physical_Vols","lvols","lvdata" and "PV_Data". (for logical volume data)
"Physical_Vols" is a hash refrence to all the Physical Volumes in the VG
"Alternate_Links" is an array refrence under each physical vol that contains all the links to that device (if any). First array element is "None" if there are no links. (Not listed above but its under "Physical_Vols"
"lvols" is a hash refrence to all the volume groups in the VG
"lv_data" is a hash refrence to lvdisplays output of the logical volume.
"PV_Data" is a hash refrence to all the physical volumes that make up the volume group and how much space they use on each.
The data can then be access through the provided methods (Subroutines).
FUNCTION
new()
The main object constructor that returns the hash refrence. The keys of the hash are all the volume groups on your system. It accepts the following paramters:
target_type values: local(default) or remote
persistance values: new(default) or old
datafile values: Path and name of datafile to store object
if persistance is selected. Default is
"/tmp/vginfo.dat"
access_prog values: ssh(default) or remsh
access_system values: localhost(default) or remote system name
access_user values: root(default) or remote username
The list of keys and attributes is illustrated in full in the example above.
traverse()
example method that just traverses the object and prints it out.
get_all_lvols_on_disk( device_name => "/dev/dsk/c#t#d#" )
returns refrence to hash of hashes
hash key: /dev/dsk/c#t#d# is a refrence to another hash
key:lvol is a refrence to yet another hash
key: le_on_pv value: "###"
key: pe_on_pv value: "###"
not sure if I still need this method around but it works so I'll
keep it in.
get_vg_physicalvols( volume_group => "/dev/vg##" )
returns an array refrence to an array that contains all the physical
volumes that make up the volume group
get_vg_physicalvol_attr( volume_group => "/dev/vg##", device_name => "/dev/dsk/c#t#d#", attribute => "PV_Status" )
returns the scalar value of the attribute requested.
get_vg_lvols( volume_group => "/dev/vg##" )
returns an array refrence to an array that contains all the logical
volumes that make up the volume group
get_vg_lvol_attr_vgdisplay( volume_group => "/dev/vg##", logical_vol => "lvol#", attribute => "LV_Size" )
returns the scalar value of the attribute requested. these are
the attributes gathered about the logical volume from the
vgdisplay command
get_vg_lvol_attr_lvdisplay( volume_group => "/dev/vg##", logical_vol => "lvol#", attribute => "Stripes" )
returns the scalar value of the attribute requested. These are
the attributes gathered about the logical volume from the
lvdisplay command. There are several more than in the vgdisplay
command.
get_vg_lvol_physicalvols( volume_group => "/dev/vg##", logical_vol => "/dev/lvol#" )
returns an array refrence to an array that contains all the physical
volumes that make up the logical volume.
get_vg_lvol_physicalvol_attr( volume_group => "/dev/vg##", logical_vol => "/dev/lvol#", device_name => "/dev/dsk/c#t#d#", attribute => "le_on_pv" ) =head2 get_vg_alternate_links( volume_group => "/dev/vg##", device_name => "/dev/dsk/c#t#d#", )
returns the scalar value of the attribute requested.
CAVEATS
I beleive that you have to be root to run this.
AUTHOR
Christopher White, <chrwhite@seanet.com>
Copyright (C) 2001 Christopher White. All rights reserved. this program is fre e software; you can redistribute it and/or modify it under the same terms as pe rl itself.