--- a/lib/SI/dumper.pm Sun Jan 31 23:58:01 2010 +0100
+++ b/lib/SI/dumper.pm Fri Oct 29 00:23:06 2010 +0200
@@ -10,6 +10,7 @@
sub dump($\%) {
my ($file, $devs) = @_;
+ my $dumpdates = dirname($file) . "/dumpdates";
foreach my $volume (
map { { name => $_, %{ $devs->{volume}{$_} } } }
@@ -21,7 +22,7 @@
verbose("dumping volume $volume->{name}");
my $dumpdev = $volume->{name};
my $of = sprintf $file, basename($volume->{name});
- run("dump -0 -z -f $of $dumpdev");
+ run("dump -D $dumpdates -u -0 -z -f $of $dumpdev");
verbose("\n");
}
}
@@ -30,7 +31,7 @@
my @dumps = glob(shift);
my $devs = shift;
- my $tmpdir = tempdir (CLEANUP => 1);
+ my $tmpdir = tempdir (CLEANUP => 0);
foreach my $dump (@dumps) {
# suppose it's gzipped
@@ -47,15 +48,20 @@
verbose("restore $dump -> $dev : $fs\n");
run("mount -t $fs $dev $tmpdir");
- my $pid = fork or do {
- open(STDIN, $dump) or die "Can't open $dump as STDIN: $!\n";
- chdir $tmpdir or die "Can't chdir to $tmpdir: $!\n";
- exec restore => "-orf-";
- die "Can't exec restore: $!\n";
+
+ eval {
+ my $pid = fork or do {
+ open(STDIN, $dump) or die "Can't open $dump as STDIN: $!\n";
+ chdir $tmpdir or die "Can't chdir to $tmpdir: $!\n";
+ exec restore => "-orf-";
+ die "Can't exec restore: $!\n";
+ };
+ waitpid($pid, 0);
};
- waitpid($pid, 0);
run("umount $tmpdir");
+ die $@ if $@;
}
+ rmdir($tmpdir);
}