From 94a2daaf70781b76ed16ed02d0216a1442111011 Mon Sep 17 00:00:00 2001 From: Patrick Van der Veken Date: Fri, 8 Feb 2019 15:44:35 +0100 Subject: [PATCH] Fix for discovering boot disks + fix on /dev/ prefix for VG name --- lx-lvm/lvs.pl | 28 +++++++++++++--------------- lx-lvm/pvs.pl | 26 ++++++++++++++++---------- lx-lvm/vgs.pl | 36 +++++++++++++++++------------------- 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/lx-lvm/lvs.pl b/lx-lvm/lvs.pl index bae6351..09918dd 100644 --- a/lx-lvm/lvs.pl +++ b/lx-lvm/lvs.pl @@ -14,7 +14,7 @@ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details #****************************************************************************** # 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/ # # @(#) HISTORY: see perldoc 'lvs.pl' @@ -74,10 +74,7 @@ unless ($options{'size'}) { $options{'size'} = 'GB'; }; if ($options{'vg'}) { - if ($options{'vg'} =~ m#/dev#) { - print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n"; - exit (0); - } + $options{'vg'} =~ s#/dev/##; }; # 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 @lvdisplay = `ls -1 /dev/vg*/l* 2>/dev/null`; foreach my $lv_entry (@lvdisplay) { - + my $str_size = 0; my @vg_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); $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 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"); } # loop over LVOLs (ASCII sorted) foreach my $lvol (sort (@vgdisplay)) { - + my $lv_name = (split (/=/, (split (/:/, $lvol))[0]))[1]; @lvdisplay = `/usr/sbin/lvdisplay -F ${lv_name} 2>/dev/null`; die "failed to execute: $!" if ($?); - + # loop over lvdisplay foreach my $lv_entry (@lvdisplay) { - + my ($vg_name, $lv_status, $lv_perm, $lv_alloc) = ("","","",""); my ($lv_mirrors, $lv_stripes, $lv_size, $lv_extent) = (0,0,0,0); - + my @lv_data = split (/:/, $lv_entry); # loop over LVOL data @@ -182,7 +179,7 @@ lvs.pl - Show logical volume information in a terse way (Linux style). =head1 SYNOPSIS - lvs.pl [-h|--help] + lvs.pl [-h|--help] [(-g|--vg)=] [(-s|--size)=] [(-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-27: small fixes [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] \ No newline at end of file + @(#) 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] diff --git a/lx-lvm/pvs.pl b/lx-lvm/pvs.pl index 8110da4..522ff29 100644 --- a/lx-lvm/pvs.pl +++ b/lx-lvm/pvs.pl @@ -54,7 +54,7 @@ sub parse_pvols { my @pvol = @_; my $pv_command; my %pvdisplay; - my @dsf; + my (@dsf,@sorted_dsf,@has_underscore); unless (@pvol) { print "-- no disks found --\n"; @@ -86,7 +86,7 @@ sub parse_pvols { # set cDSF flag if we found cDSFs $is_cdsf = 1 if (@cdsf_data); - + # loop over cDSF data foreach my $cdsf_data (@cdsf_data) { @@ -108,8 +108,16 @@ sub parse_pvols { push (@dsf, $dsf); } - # display pvol data (sorted by their device number: diskYYYY) - foreach my $dsf (sort { substr($a, 4) <=> substr($b, 4) } (@dsf)) { + # set comparison operator based on dsf type + @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); @@ -223,10 +231,7 @@ unless ($options{'size'}) { $options{'size'} = 'GB'; }; if ($options{'vg'}) { - if ($options{'vg'} =~ m#/dev#) { - print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n"; - exit (0); - } + $options{'vg'} =~ s#/dev/##; # force --active off delete $options{'active'}; }; @@ -258,7 +263,7 @@ if ($options{'vg'}) { # footer unless ($options{'terse'}) { - + $footer = qq{ Note 1: 'PE Size' values are expressed in MB 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-27: small fixes [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] \ No newline at end of file + @(#) 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] diff --git a/lx-lvm/vgs.pl b/lx-lvm/vgs.pl index 7e5733c..5140ce4 100644 --- a/lx-lvm/vgs.pl +++ b/lx-lvm/vgs.pl @@ -14,7 +14,7 @@ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details #****************************************************************************** # 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/ # # @(#) HISTORY: see perldoc 'vgs.pl' @@ -75,10 +75,7 @@ unless ($options{'size'}) { $options{'size'} = 'GB'; }; if ($options{'vg'}) { - if ($options{'vg'} =~ m#/dev#) { - print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n"; - exit (0); - } + $options{'vg'} =~ s#/dev/##; # force --active off delete $options{'active'}; }; @@ -96,32 +93,32 @@ foreach my $vg_entry (@vgdisplay) { my @vg_data = split (/:/, $vg_entry); my $str_size = 0; - + # loop over VG data foreach my $vg_field (@vg_data) { $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 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"); } # loop over vgdisplay (ASCII sorted) 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_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_data = split (/:/, $vg_entry); - + # loop over VG data foreach my $vg_field (@vg_data) { - + $vg_name = $1 if ($vg_field =~ m%^vg_name=/dev/(.*)%); $vg_status = $1 if ($vg_field =~ m%^vg_status=(.*)%); @@ -138,19 +135,19 @@ foreach my $vg_entry (sort (@vgdisplay)) { # calculate sizes unless ($vg_status eq "deactivated") { $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 /= 1024 unless ($options{'size'} =~ /MB/i); $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 $lsvg = `/usr/bin/ls -l /dev/${vg_name}/group 2>/dev/null`; - unless ($?) { - $vg_major = (split (/\s+/, $lsvg))[4]; + unless ($?) { + $vg_major = (split (/\s+/, $lsvg))[4]; $vg_minor = (split (/\s+/, $lsvg))[5]; } - + # report data 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", @@ -198,7 +195,7 @@ vgs.pl - Show volume group information in a terse way (Linux style). =head1 SYNOPSIS - vgs.pl [-h|--help] + vgs.pl [-h|--help] [(-g|--vg)=] [(-s|--size)=] [(-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-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] \ No newline at end of file + @(#) 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]