Fix for discovering boot disks + fix on /dev/ prefix for VG name
This commit is contained in:
parent
c05ff9b73a
commit
94a2daaf70
@ -14,7 +14,7 @@
|
|||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
|
||||||
#******************************************************************************
|
#******************************************************************************
|
||||||
# This script will display HP-UX LVM information in Linux style
|
# This script will display HP-UX LVM information in Linux style
|
||||||
#
|
#
|
||||||
# Based on https://jreypo.wordpress.com/2010/02/16/linux-lvm-commands-in-hp-ux/
|
# Based on https://jreypo.wordpress.com/2010/02/16/linux-lvm-commands-in-hp-ux/
|
||||||
#
|
#
|
||||||
# @(#) HISTORY: see perldoc 'lvs.pl'
|
# @(#) HISTORY: see perldoc 'lvs.pl'
|
||||||
@ -74,10 +74,7 @@ unless ($options{'size'}) {
|
|||||||
$options{'size'} = 'GB';
|
$options{'size'} = 'GB';
|
||||||
};
|
};
|
||||||
if ($options{'vg'}) {
|
if ($options{'vg'}) {
|
||||||
if ($options{'vg'} =~ m#/dev#) {
|
$options{'vg'} =~ s#/dev/##;
|
||||||
print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n";
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# fetch LVOLs
|
# fetch LVOLs
|
||||||
@ -91,38 +88,38 @@ die "ERROR: could not retrieve VG info for $options{'vg'}" if ($?);
|
|||||||
# find max display size for LV & VG names
|
# find max display size for LV & VG names
|
||||||
@lvdisplay = `ls -1 /dev/vg*/l* 2>/dev/null`;
|
@lvdisplay = `ls -1 /dev/vg*/l* 2>/dev/null`;
|
||||||
foreach my $lv_entry (@lvdisplay) {
|
foreach my $lv_entry (@lvdisplay) {
|
||||||
|
|
||||||
my $str_size = 0; my @vg_entry;
|
my $str_size = 0; my @vg_entry;
|
||||||
|
|
||||||
$str_size = length ($lv_entry);
|
$str_size = length ($lv_entry);
|
||||||
$lv_str_size = $str_size if ($str_size > $lv_str_size);
|
$lv_str_size = $str_size if ($str_size > $lv_str_size);
|
||||||
|
|
||||||
@vg_entry = split ('/', $lv_entry);
|
@vg_entry = split ('/', $lv_entry);
|
||||||
$str_size = length ($vg_entry[2]);
|
$str_size = length ($vg_entry[2]);
|
||||||
$vg_str_size = $str_size if ($str_size > $vg_str_size);
|
$vg_str_size = $str_size if ($str_size > $vg_str_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
# print header
|
# print header
|
||||||
unless ($options{'terse'}) {
|
unless ($options{'terse'}) {
|
||||||
|
|
||||||
printf STDOUT ("\n%-${lv_str_size}s %-${vg_str_size}s %-17s %-7s %-7s %-17s %-7s %-8s %-8s\n",
|
printf STDOUT ("\n%-${lv_str_size}s %-${vg_str_size}s %-17s %-7s %-7s %-17s %-7s %-8s %-8s\n",
|
||||||
"LV", "VG", "Status", "Size", "Extents", "Permissions", "Mirrors", "Stripes", "Allocation");
|
"LV", "VG", "Status", "Size", "Extents", "Permissions", "Mirrors", "Stripes", "Allocation");
|
||||||
}
|
}
|
||||||
|
|
||||||
# loop over LVOLs (ASCII sorted)
|
# loop over LVOLs (ASCII sorted)
|
||||||
foreach my $lvol (sort (@vgdisplay)) {
|
foreach my $lvol (sort (@vgdisplay)) {
|
||||||
|
|
||||||
my $lv_name = (split (/=/, (split (/:/, $lvol))[0]))[1];
|
my $lv_name = (split (/=/, (split (/:/, $lvol))[0]))[1];
|
||||||
|
|
||||||
@lvdisplay = `/usr/sbin/lvdisplay -F ${lv_name} 2>/dev/null`;
|
@lvdisplay = `/usr/sbin/lvdisplay -F ${lv_name} 2>/dev/null`;
|
||||||
die "failed to execute: $!" if ($?);
|
die "failed to execute: $!" if ($?);
|
||||||
|
|
||||||
# loop over lvdisplay
|
# loop over lvdisplay
|
||||||
foreach my $lv_entry (@lvdisplay) {
|
foreach my $lv_entry (@lvdisplay) {
|
||||||
|
|
||||||
my ($vg_name, $lv_status, $lv_perm, $lv_alloc) = ("","","","");
|
my ($vg_name, $lv_status, $lv_perm, $lv_alloc) = ("","","","");
|
||||||
my ($lv_mirrors, $lv_stripes, $lv_size, $lv_extent) = (0,0,0,0);
|
my ($lv_mirrors, $lv_stripes, $lv_size, $lv_extent) = (0,0,0,0);
|
||||||
|
|
||||||
my @lv_data = split (/:/, $lv_entry);
|
my @lv_data = split (/:/, $lv_entry);
|
||||||
|
|
||||||
# loop over LVOL data
|
# loop over LVOL data
|
||||||
@ -182,7 +179,7 @@ lvs.pl - Show logical volume information in a terse way (Linux style).
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
lvs.pl [-h|--help]
|
lvs.pl [-h|--help]
|
||||||
[(-g|--vg)=<vg_name>]
|
[(-g|--vg)=<vg_name>]
|
||||||
[(-s|--size)=<MB|GB>]
|
[(-s|--size)=<MB|GB>]
|
||||||
[(-t|--terse)]
|
[(-t|--terse)]
|
||||||
@ -216,4 +213,5 @@ S< >Do not show header and footer information.
|
|||||||
@(#) 2016-04-12: first version [Patrick Van der Veken]
|
@(#) 2016-04-12: first version [Patrick Van der Veken]
|
||||||
@(#) 2016-04-27: small fixes [Patrick Van der Veken]
|
@(#) 2016-04-27: small fixes [Patrick Van der Veken]
|
||||||
@(#) 2016-06-27: added LV extents [Patrick Van der Veken]
|
@(#) 2016-06-27: added LV extents [Patrick Van der Veken]
|
||||||
@(#) 2017-12-12: made LV+VG names display size dynamic, added --terse [Patrick Van der Veken]
|
@(#) 2017-12-12: made LV+VG names display size dynamic, added --terse [Patrick Van der Veken]
|
||||||
|
@(#) 2019-02-08: remove /dev/ prefix for VG [Patrick Van der Veken]
|
||||||
|
@ -54,7 +54,7 @@ sub parse_pvols {
|
|||||||
my @pvol = @_;
|
my @pvol = @_;
|
||||||
my $pv_command;
|
my $pv_command;
|
||||||
my %pvdisplay;
|
my %pvdisplay;
|
||||||
my @dsf;
|
my (@dsf,@sorted_dsf,@has_underscore);
|
||||||
|
|
||||||
unless (@pvol) {
|
unless (@pvol) {
|
||||||
print "-- no disks found --\n";
|
print "-- no disks found --\n";
|
||||||
@ -86,7 +86,7 @@ sub parse_pvols {
|
|||||||
|
|
||||||
# set cDSF flag if we found cDSFs
|
# set cDSF flag if we found cDSFs
|
||||||
$is_cdsf = 1 if (@cdsf_data);
|
$is_cdsf = 1 if (@cdsf_data);
|
||||||
|
|
||||||
# loop over cDSF data
|
# loop over cDSF data
|
||||||
foreach my $cdsf_data (@cdsf_data) {
|
foreach my $cdsf_data (@cdsf_data) {
|
||||||
|
|
||||||
@ -108,8 +108,16 @@ sub parse_pvols {
|
|||||||
push (@dsf, $dsf);
|
push (@dsf, $dsf);
|
||||||
}
|
}
|
||||||
|
|
||||||
# display pvol data (sorted by their device number: diskYYYY)
|
# set comparison operator based on dsf type
|
||||||
foreach my $dsf (sort { substr($a, 4) <=> substr($b, 4) } (@dsf)) {
|
@has_underscore = grep { /_/ } @dsf;
|
||||||
|
if (@has_underscore) {
|
||||||
|
@sorted_dsf = sort { substr($a, 4) cmp substr($b, 4) } (@dsf);
|
||||||
|
} else {
|
||||||
|
@sorted_dsf = sort { substr($a, 4) <=> substr($b, 4) } (@dsf);
|
||||||
|
}
|
||||||
|
|
||||||
|
# display pvol data (sorted by their device number: diskYYYY or diskXXXX_pY)
|
||||||
|
foreach my $dsf (@sorted_dsf) {
|
||||||
|
|
||||||
chomp ($dsf);
|
chomp ($dsf);
|
||||||
|
|
||||||
@ -223,10 +231,7 @@ unless ($options{'size'}) {
|
|||||||
$options{'size'} = 'GB';
|
$options{'size'} = 'GB';
|
||||||
};
|
};
|
||||||
if ($options{'vg'}) {
|
if ($options{'vg'}) {
|
||||||
if ($options{'vg'} =~ m#/dev#) {
|
$options{'vg'} =~ s#/dev/##;
|
||||||
print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n";
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
# force --active off
|
# force --active off
|
||||||
delete $options{'active'};
|
delete $options{'active'};
|
||||||
};
|
};
|
||||||
@ -258,7 +263,7 @@ if ($options{'vg'}) {
|
|||||||
|
|
||||||
# footer
|
# footer
|
||||||
unless ($options{'terse'}) {
|
unless ($options{'terse'}) {
|
||||||
|
|
||||||
$footer = qq{
|
$footer = qq{
|
||||||
Note 1: 'PE Size' values are expressed in MB
|
Note 1: 'PE Size' values are expressed in MB
|
||||||
Note 2: 'PV Size' & 'PV Free' values are expressed in GB by default (see --help)
|
Note 2: 'PV Size' & 'PV Free' values are expressed in GB by default (see --help)
|
||||||
@ -333,4 +338,5 @@ on the amount of devices present on the system.
|
|||||||
@(#) 2016-04-12: first version [Patrick Van der Veken]
|
@(#) 2016-04-12: first version [Patrick Van der Veken]
|
||||||
@(#) 2016-04-27: small fixes [Patrick Van der Veken]
|
@(#) 2016-04-27: small fixes [Patrick Van der Veken]
|
||||||
@(#) 2016-04-27: show all PVOLs & option --active added [Patrick Van der Veken]
|
@(#) 2016-04-27: show all PVOLs & option --active added [Patrick Van der Veken]
|
||||||
@(#) 2017-12-12: added support for cluster disks, added --terse [Patrick Van der Veken]
|
@(#) 2017-12-12: added support for cluster disks, added --terse [Patrick Van der Veken]
|
||||||
|
@(#) 2019-02-08: fix for comparison operator + remove /dev/ prefix for VG [Patrick Van der Veken]
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
|
||||||
#******************************************************************************
|
#******************************************************************************
|
||||||
# This script will display HP-UX LVM information in Linux style
|
# This script will display HP-UX LVM information in Linux style
|
||||||
#
|
#
|
||||||
# Based on https://jreypo.wordpress.com/2010/02/16/linux-lvm-commands-in-hp-ux/
|
# Based on https://jreypo.wordpress.com/2010/02/16/linux-lvm-commands-in-hp-ux/
|
||||||
#
|
#
|
||||||
# @(#) HISTORY: see perldoc 'vgs.pl'
|
# @(#) HISTORY: see perldoc 'vgs.pl'
|
||||||
@ -75,10 +75,7 @@ unless ($options{'size'}) {
|
|||||||
$options{'size'} = 'GB';
|
$options{'size'} = 'GB';
|
||||||
};
|
};
|
||||||
if ($options{'vg'}) {
|
if ($options{'vg'}) {
|
||||||
if ($options{'vg'} =~ m#/dev#) {
|
$options{'vg'} =~ s#/dev/##;
|
||||||
print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n";
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
# force --active off
|
# force --active off
|
||||||
delete $options{'active'};
|
delete $options{'active'};
|
||||||
};
|
};
|
||||||
@ -96,32 +93,32 @@ foreach my $vg_entry (@vgdisplay) {
|
|||||||
|
|
||||||
my @vg_data = split (/:/, $vg_entry);
|
my @vg_data = split (/:/, $vg_entry);
|
||||||
my $str_size = 0;
|
my $str_size = 0;
|
||||||
|
|
||||||
# loop over VG data
|
# loop over VG data
|
||||||
foreach my $vg_field (@vg_data) {
|
foreach my $vg_field (@vg_data) {
|
||||||
$str_size = length ($1) if ($vg_field =~ m%^vg_name=/dev/(.*)%);
|
$str_size = length ($1) if ($vg_field =~ m%^vg_name=/dev/(.*)%);
|
||||||
$vg_str_size = $str_size if ($str_size > $vg_str_size);
|
$vg_str_size = $str_size if ($str_size > $vg_str_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# print header
|
# print header
|
||||||
unless ($options{'terse'}) {
|
unless ($options{'terse'}) {
|
||||||
printf STDOUT ("\n%-${vg_str_size}s %-5s %-5s %-20s %-8s %-8s %-10s %-10s %-10s %-12s\n",
|
printf STDOUT ("\n%-${vg_str_size}s %-5s %-5s %-20s %-8s %-8s %-10s %-10s %-10s %-12s\n",
|
||||||
"VG", "PVs", "LVs", "Status", "Version", "PE Size", "VG Size", "VG Free", "VG Max", "VG Major/Minor");
|
"VG", "PVs", "LVs", "Status", "Version", "PE Size", "VG Size", "VG Free", "VG Max", "VG Major/Minor");
|
||||||
}
|
}
|
||||||
|
|
||||||
# loop over vgdisplay (ASCII sorted)
|
# loop over vgdisplay (ASCII sorted)
|
||||||
foreach my $vg_entry (sort (@vgdisplay)) {
|
foreach my $vg_entry (sort (@vgdisplay)) {
|
||||||
|
|
||||||
my ($vg_name, $vg_status, $vg_version, $lsvg, $vg_major, $vg_minor,) = ("","","n/a","","n/a","n/a");
|
my ($vg_name, $vg_status, $vg_version, $lsvg, $vg_major, $vg_minor,) = ("","","n/a","","n/a","n/a");
|
||||||
my ($vg_total_pe, $vg_size_pe, $vg_free_pe, $vg_cur_pvs, $vg_cur_lvs, $vg_max_pe) = (0,0,0,0,0,0);
|
my ($vg_total_pe, $vg_size_pe, $vg_free_pe, $vg_cur_pvs, $vg_cur_lvs, $vg_max_pe) = (0,0,0,0,0,0);
|
||||||
my ($vg_size, $vg_free, $vg_max) = (0,0,0);
|
my ($vg_size, $vg_free, $vg_max) = (0,0,0);
|
||||||
|
|
||||||
my @vg_data = split (/:/, $vg_entry);
|
my @vg_data = split (/:/, $vg_entry);
|
||||||
|
|
||||||
# loop over VG data
|
# loop over VG data
|
||||||
foreach my $vg_field (@vg_data) {
|
foreach my $vg_field (@vg_data) {
|
||||||
|
|
||||||
$vg_name = $1 if ($vg_field =~ m%^vg_name=/dev/(.*)%);
|
$vg_name = $1 if ($vg_field =~ m%^vg_name=/dev/(.*)%);
|
||||||
$vg_status = $1 if ($vg_field =~ m%^vg_status=(.*)%);
|
$vg_status = $1 if ($vg_field =~ m%^vg_status=(.*)%);
|
||||||
|
|
||||||
@ -138,19 +135,19 @@ foreach my $vg_entry (sort (@vgdisplay)) {
|
|||||||
# calculate sizes
|
# calculate sizes
|
||||||
unless ($vg_status eq "deactivated") {
|
unless ($vg_status eq "deactivated") {
|
||||||
$vg_size = $vg_total_pe * $vg_size_pe;
|
$vg_size = $vg_total_pe * $vg_size_pe;
|
||||||
$vg_size /= 1024 unless ($options{'size'} =~ /MB/i);
|
$vg_size /= 1024 unless ($options{'size'} =~ /MB/i);
|
||||||
$vg_free = $vg_free_pe * $vg_size_pe;
|
$vg_free = $vg_free_pe * $vg_size_pe;
|
||||||
$vg_free /= 1024 unless ($options{'size'} =~ /MB/i);
|
$vg_free /= 1024 unless ($options{'size'} =~ /MB/i);
|
||||||
$vg_max = $vg_max_pe * $vg_size_pe;
|
$vg_max = $vg_max_pe * $vg_size_pe;
|
||||||
$vg_max /= 1024 unless ($options{'size'} =~ /MB/i);
|
$vg_max /= 1024 unless ($options{'size'} =~ /MB/i);
|
||||||
}
|
}
|
||||||
# get minor number
|
# get minor number
|
||||||
$lsvg = `/usr/bin/ls -l /dev/${vg_name}/group 2>/dev/null`;
|
$lsvg = `/usr/bin/ls -l /dev/${vg_name}/group 2>/dev/null`;
|
||||||
unless ($?) {
|
unless ($?) {
|
||||||
$vg_major = (split (/\s+/, $lsvg))[4];
|
$vg_major = (split (/\s+/, $lsvg))[4];
|
||||||
$vg_minor = (split (/\s+/, $lsvg))[5];
|
$vg_minor = (split (/\s+/, $lsvg))[5];
|
||||||
}
|
}
|
||||||
|
|
||||||
# report data
|
# report data
|
||||||
unless ($options{'active'} and ($vg_status eq "deactivated")) {
|
unless ($options{'active'} and ($vg_status eq "deactivated")) {
|
||||||
printf STDOUT ("%-${vg_str_size}s %-5s %-5s %-20s %-8s %-8d %-10d %-10d %-10d %3s/%-8s\n",
|
printf STDOUT ("%-${vg_str_size}s %-5s %-5s %-20s %-8s %-8d %-10d %-10d %-10d %3s/%-8s\n",
|
||||||
@ -198,7 +195,7 @@ vgs.pl - Show volume group information in a terse way (Linux style).
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
vgs.pl [-h|--help]
|
vgs.pl [-h|--help]
|
||||||
[(-g|--vg)=<vg_name>]
|
[(-g|--vg)=<vg_name>]
|
||||||
[(-s|--size)=<MB|GB>]
|
[(-s|--size)=<MB|GB>]
|
||||||
[(-a|--active)]
|
[(-a|--active)]
|
||||||
@ -236,4 +233,5 @@ S< >Do not show header and footer information.
|
|||||||
|
|
||||||
@(#) 2016-04-12: first version [Patrick Van der Veken]
|
@(#) 2016-04-12: first version [Patrick Van der Veken]
|
||||||
@(#) 2016-04-27: added 'VG Major/Minor' [Patrick Van der Veken]
|
@(#) 2016-04-27: added 'VG Major/Minor' [Patrick Van der Veken]
|
||||||
@(#) 2017-12-12: made VG name display size dynamic, added --active, added --terse [Patrick Van der Veken]
|
@(#) 2017-12-12: made VG name display size dynamic, added --active, added --terse [Patrick Van der Veken]
|
||||||
|
@(#) 2019-02-08: remove /dev/ prefix for VG [Patrick Van der Veken]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user