lib/SI/dumper.pm
changeset 41 24d57a2e8df7
parent 39 06bffc9d8977
--- 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);
 }