1 package SI::lvm; |
1 package SI::lvm; |
|
2 |
|
3 use if $ENV{DEBUG} ~~ /lvm|all/ => qw(Smart::Comments); |
2 |
4 |
3 use strict; |
5 use strict; |
4 use warnings; |
6 use warnings; |
5 use IO::File; |
7 use IO::File; |
6 |
8 |
7 use if $ENV{DEBUG} ~~ /lvm|all/ => qw(Smart::Comments); |
|
8 |
9 |
9 use SI::tools; |
10 use SI::tools; |
10 |
11 |
11 my @volumegroups = (); |
12 my @volumegroups = (); |
12 |
13 |
13 sub _vgs(\%) { |
14 sub _vgs(\%) { |
14 return @volumegroups if @volumegroups; |
15 return @volumegroups if @volumegroups; |
15 |
16 |
16 my $devs = shift; |
17 my $devs = shift; |
17 |
18 |
18 my @pvs = grep { $devs->{volume}{$_}{type} =~ /^lvm/ } |
19 use Data::Dumper; |
19 grep { defined $devs->{volume}{$_} } |
20 die Dumper \@pvs; |
20 keys %{$devs->{volume}}; |
21 my @pvs = grep { exists $devs->{disk}{$_} } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`; |
21 |
22 |
22 return @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs`; |
23 return @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`; |
23 } |
24 } |
24 |
25 |
25 sub volumes(\%) { |
26 sub volumes(\%) { |
26 my ($devs) = @_; |
27 my ($devs) = @_; |
27 |
28 |
28 # we can't just use `pvs', since this would return *all* |
29 # we can't just use `pvs', since this would return *all* |
29 # physical devices known to lvm, not just the non-removable |
30 # physical devices known to lvm, not just the non-removable |
30 my @pvs = grep { $devs->{volume}{$_}{type} =~ /^lvm/ } |
|
31 grep { defined $devs->{volume}{$_} } |
|
32 keys %{$devs->{volume}}; |
|
33 |
31 |
34 my @vgs = _vgs(%$devs); |
32 my @vgs = _vgs(%$devs); |
35 my @lvs = map { readlink } |
33 my @lvs = map { readlink } |
36 map { s/^\s*//; (split /:/)[0] } |
34 map { s/^\s*//; (split /:/)[0] } |
37 grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`; |
35 grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`; |