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 |