SI/dumper.pm
changeset 14 aecda2763079
parent 12 a1aee1136609
child 15 4e3753b998a9
equal deleted inserted replaced
13:2e3ad71484ea 14:aecda2763079
     2 
     2 
     3 use if $ENV{DEBUG} ~~ /dumper|all/ => "Smart::Comments";
     3 use if $ENV{DEBUG} ~~ /dumper|all/ => "Smart::Comments";
     4 use strict;
     4 use strict;
     5 use warnings;
     5 use warnings;
     6 use SI::tools;
     6 use SI::tools;
       
     7 use File::Basename;
       
     8 
       
     9 #$VAR1 = {
       
    10 #          'volume' => {
       
    11 #                        '/dev/mapper/debian-swap' => {
       
    12 #                                                       'origin' => 'lvm',
       
    13 #                                                       'label' => undef,
       
    14 #                                                       'type' => 'swap',
       
    15 #                                                       'uuid' => undef
       
    16 #                                                     },
       
    17 #                        '/dev/hda4' => {
       
    18 #                                         'ptable_type' => '0',
       
    19 #                                         'origin' => 'ptable'
       
    20 #                                       },
       
    21 #                        '/dev/hda1' => {
       
    22 #                                         'ptable_type' => '83',
       
    23 #                                         'origin' => 'ptable',
       
    24 #                                         'label' => undef,
       
    25 #                                         'type' => 'ext2',
       
    26 #                                         'uuid' => 'a1fc3fc0-7bde-49c4-9afe-c71db8c4d08b'
       
    27 #                                       },
       
    28 #                        '/dev/hda3' => {
       
    29 #                                         'ptable_type' => '0',
       
    30 #                                         'origin' => 'ptable'
       
    31 #                                       },
       
    32 #                        '/dev/mapper/debian-root' => {
       
    33 #                                                       'origin' => 'lvm',
       
    34 #                                                       'label' => undef,
       
    35 #                                                       'type' => 'ext3',
       
    36 #                                                       'uuid' => 'b30578ac-841f-48b4-8ceb-1cdcbabc7fab'
       
    37 #                                                     },
       
    38 #                        '/dev/hda2' => {
       
    39 #                                         'ptable_type' => '8',
       
    40 #                                         'origin' => 'ptable',
       
    41 #                                         'label' => undef,
       
    42 #                                         'type' => 'lvm2pv',
       
    43 #                                         'uuid' => 'S4zDgc-hEWW-h9BY-XHz3-32TE-66W1-W0iMVE'
       
    44 #                                       }
       
    45 #                      },
       
    46 #        };
     7 
    47 
     8 sub dump($\%) {
    48 sub dump($\%) {
     9     my ($file, $devs) = @_;
    49     my ($file, $devs) = @_;
    10 
    50 
    11     my %volume = %{$devs->{volume}};
    51     foreach my $volume ( map { { name => $_, %{$devs->{volume}{$_}}}}  keys %{$devs->{volume}}) {
       
    52 	next if !defined $volume->{type} or $volume->{type} !~ /^ext/i;
    12 
    53 
    13     foreach my $v ( grep { $volume{$_}{type} ~~ /^ext/ } keys %volume ) {
    54 	verbose("dumping volume $volume->{name}");
    14 	verbose("dumping $v\n");
    55 	my $dumpdev = $volume->{name};
    15 	### v: $volume{$v}
    56 
       
    57 	if ($volume->{origin} =~ /lvm/i) {
       
    58 	    verbose("(lvm)");
       
    59 	    my ($vg, $lv) = `lvdisplay -c $volume->{name}` =~ /\s*\/dev\/(.*?)\/(.*?):/;
       
    60 	    my $snap = "snap$$";
       
    61 
       
    62 	    END { eval { run("lvchange -an $vg/$snap 2>/dev/null") };
       
    63 		  eval { run("lvremove -ff $vg/$snap 2>/dev/null") }; }
       
    64 
       
    65 	    eval {
       
    66 		run("lvcreate -s -L 1G -n snap$$ $vg/$lv 2>/dev/null");
       
    67 	    };
       
    68 	    if ($@) { warn "Can't create snapshot\n" }
       
    69 	    else { $dumpdev = "/dev/$vg/$snap$$" };
       
    70 	}
       
    71 
       
    72 	my $of = sprintf $file, basename($volume->{name});
       
    73 	run("dump -0 -z -f $of $dumpdev");
       
    74 	verbose("\n");
    16     }
    75     }
    17 }
    76 }
    18 
    77 
    19 1;
    78 1;
    20 
    79