diff -r a61b92c60367 -r 24d57a2e8df7 lib/SI/dumper.pm --- 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); }