equal
deleted
inserted
replaced
3 use if $ENV{DEBUG} ~~ /lvm|all/ => qw(Smart::Comments); |
3 use if $ENV{DEBUG} ~~ /lvm|all/ => qw(Smart::Comments); |
4 |
4 |
5 use strict; |
5 use strict; |
6 use warnings; |
6 use warnings; |
7 use IO::File; |
7 use IO::File; |
8 |
8 use Cwd qw(abs_path); |
|
9 use File::Basename; |
9 |
10 |
10 use SI::tools; |
11 use SI::tools; |
11 |
12 |
12 my @volumegroups = (); |
13 my @volumegroups = (); |
13 |
14 |
14 sub _vgs(\%) { |
15 sub _vgs(\%) { |
15 return @volumegroups if @volumegroups; |
16 return @volumegroups if @volumegroups; |
16 |
17 |
17 my $devs = shift; |
18 my $devs = shift; |
|
19 |
18 |
20 |
19 # find the physical volumes we've already recognised as „non-removable“ |
21 # find the physical volumes we've already recognised as „non-removable“ |
20 my @pvs = grep { $_ ~~ $devs->{known} } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`; |
22 my @pvs = grep { $_ ~~ $devs->{known} } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`; |
21 return @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`; |
23 return @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`; |
22 } |
24 } |
26 |
28 |
27 # we can't just use `pvs', since this would return *all* |
29 # we can't just use `pvs', since this would return *all* |
28 # physical devices known to lvm, not just the non-removable |
30 # physical devices known to lvm, not just the non-removable |
29 |
31 |
30 my @vgs = _vgs(%$devs); |
32 my @vgs = _vgs(%$devs); |
31 my @lvs = map { readlink } |
33 run("vgchange -ay @vgs 2>/dev/null"); |
|
34 |
|
35 my @lvs = |
|
36 map { abs_path ((dirname $_) . "/" . readlink) } |
32 map { s/^\s*//; (split /:/)[0] } |
37 map { s/^\s*//; (split /:/)[0] } |
33 grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`; |
38 grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`; |
34 |
|
35 foreach (@lvs) { |
39 foreach (@lvs) { |
36 $devs->{volume}{$_} = { origin => "lvm" }; |
40 $devs->{volume}{$_} = { origin => "lvm" }; |
37 } |
41 } |
38 } |
42 } |
39 |
43 |