SI/lvm.pm
changeset 16 fd87c1e3b451
parent 15 4e3753b998a9
child 17 d4942418a9ea
equal deleted inserted replaced
15:4e3753b998a9 16:fd87c1e3b451
    15 sub _vgs(\%) {
    15 sub _vgs(\%) {
    16     return @volumegroups if @volumegroups;
    16     return @volumegroups if @volumegroups;
    17 
    17 
    18     my $devs = shift;
    18     my $devs = shift;
    19 
    19 
       
    20     # find the physical volumes we've already recognised as „non-removable“
       
    21     my @known = keys %{$devs->{volume}}, keys %{$devs->{disk}};
    20 
    22 
    21     # find the physical volumes we've already recognised as „non-removable“
    23     my @pvs = grep { $_ ~~ @known } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`;
    22     my @pvs = grep { $_ ~~ $devs->{known} } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`;
    24     @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`;
    23     return @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`;
    25     run("vgchange -ay @volumegroups 2>&1 >/dev/null");
       
    26     return @volumegroups;
    24 }
    27 }
    25 
    28 
    26 sub volumes(\%) {
    29 sub volumes(\%) {
    27     my ($devs) = @_;
    30     my ($devs) = @_;
    28 
    31 
    29     # we can't just use `pvs', since this would return *all*
    32     # we can't just use `pvs', since this would return *all*
    30     # physical devices known to lvm, not just the non-removable
    33     # physical devices known to lvm, not just the non-removable
    31 
    34 
    32     my @vgs = _vgs(%$devs);
    35     my @vgs = _vgs(%$devs);
    33     run("vgchange -ay @vgs 2>/dev/null");
       
    34 
       
    35     my @lvs = 
    36     my @lvs = 
    36 	      map { abs_path ((dirname $_) . "/" . readlink) } 
    37 	      map { abs_path ((dirname $_) . "/" . readlink) } 
    37 	      map { s/^\s*//; (split /:/)[0] } 
    38 	      map { s/^\s*//; (split /:/)[0] } 
    38 	      grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`;
    39 	      grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`;
    39     foreach (@lvs) {
    40     foreach (@lvs) {