SI/lvm.pm
changeset 17 d4942418a9ea
parent 16 fd87c1e3b451
child 19 d12753b246fd
equal deleted inserted replaced
16:fd87c1e3b451 17:d4942418a9ea
    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“
    20     # find the physical volumes we've already recognised as „non-removable“
    21     my @known = keys %{$devs->{volume}}, keys %{$devs->{disk}};
    21     my @known = keys %{ $devs->{volume} }, keys %{ $devs->{disk} };
    22 
    22 
    23     my @pvs = grep { $_ ~~ @known } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`;
    23     my @pvs =
       
    24       grep { $_ ~~ @known } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`;
    24     @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`;
    25     @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`;
    25     run("vgchange -ay @volumegroups 2>&1 >/dev/null");
    26     run("vgchange -ay @volumegroups 2>&1 >/dev/null");
    26     return @volumegroups;
    27     return @volumegroups;
    27 }
    28 }
    28 
    29 
    31 
    32 
    32     # we can't just use `pvs', since this would return *all*
    33     # we can't just use `pvs', since this would return *all*
    33     # physical devices known to lvm, not just the non-removable
    34     # physical devices known to lvm, not just the non-removable
    34 
    35 
    35     my @vgs = _vgs(%$devs);
    36     my @vgs = _vgs(%$devs);
    36     my @lvs = 
    37     my @lvs =
    37 	      map { abs_path ((dirname $_) . "/" . readlink) } 
    38       map { abs_path((dirname $_) . "/" . readlink) }
    38 	      map { s/^\s*//; (split /:/)[0] } 
    39       map { s/^\s*//; (split /:/)[0] }
    39 	      grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`;
    40       grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`;
    40     foreach (@lvs) {
    41     foreach (@lvs) {
    41 	$devs->{volume}{$_} = { origin => "lvm" };
    42         $devs->{volume}{$_} = { origin => "lvm" };
    42     }
    43     }
    43 }
    44 }
    44 
    45 
    45 sub vgcfgbackup($\%) {
    46 sub vgcfgbackup($\%) {
    46     my ($file, $devs) = @_;
    47     my ($file, $devs) = @_;
    47 
    48 
    48     # we save it vg by vg to have the restore more easy
    49     # we save it vg by vg to have the restore more easy
    49     my @vgs = _vgs(%$devs);
    50     my @vgs = _vgs(%$devs);
    50     foreach ( map { s/^\s*(.*)/$1/; $_ = (split /:/)[0] } `vgs --noheadings --separator : @vgs`)
    51     foreach (map { s/^\s*(.*)/$1/; $_ = (split /:/)[0] }
       
    52         `vgs --noheadings --separator : @vgs`)
    51     {
    53     {
    52 	verbose("saving vg $_\n");
    54         verbose("saving vg $_\n");
    53         my $file = sprintf $file, $_;
    55         my $file = sprintf $file, $_;
    54         run("vgcfgbackup -f '$file' '$_' >/dev/null");
    56         run("vgcfgbackup -f '$file' '$_' >/dev/null");
    55     }
    57     }
    56 
    58 
    57     # for testing let's save it all
    59     # for testing let's save it all
    59     $file = sprintf $file, "*";
    61     $file = sprintf $file, "*";
    60     run("vgcfgbackup -f '$file' >/dev/null");
    62     run("vgcfgbackup -f '$file' >/dev/null");
    61 }
    63 }
    62 
    64 
    63 1;
    65 1;
       
    66 
    64 # vim:sts=4 sw=4 aw ai si:
    67 # vim:sts=4 sw=4 aw ai si: