lib/SI/dumper.pm
branchstable
changeset 39 06bffc9d8977
parent 38 38af4add892a
equal deleted inserted replaced
38:38af4add892a 39:06bffc9d8977
    29 
    29 
    30 sub restore($\%) {
    30 sub restore($\%) {
    31     my @dumps = glob(shift);
    31     my @dumps = glob(shift);
    32     my $devs = shift;
    32     my $devs = shift;
    33 
    33 
    34     my $tmpdir = tempdir (CLEANUP => 1);
    34     my $tmpdir = tempdir (CLEANUP => 0);
    35 
    35 
    36     foreach my $dump (@dumps) {
    36     foreach my $dump (@dumps) {
    37 	# suppose it's gzipped
    37 	# suppose it's gzipped
    38 	# find the device
    38 	# find the device
    39 	my $dev;
    39 	my $dev;
    46 	    } }, "/dev");
    46 	    } }, "/dev");
    47 	my $fs = $devs->{volume}{$dev}{type};
    47 	my $fs = $devs->{volume}{$dev}{type};
    48 
    48 
    49 	verbose("restore $dump -> $dev : $fs\n");
    49 	verbose("restore $dump -> $dev : $fs\n");
    50 	run("mount -t $fs $dev $tmpdir");
    50 	run("mount -t $fs $dev $tmpdir");
    51 	my $pid = fork or do {
    51 
    52 	    open(STDIN, $dump) or die "Can't open $dump as STDIN: $!\n";
    52 	eval {
    53 	    chdir $tmpdir  or die "Can't chdir to $tmpdir: $!\n";
    53 		my $pid = fork or do {
    54 	    exec restore => "-orf-";
    54 		    open(STDIN, $dump) or die "Can't open $dump as STDIN: $!\n";
    55 	    die "Can't exec restore: $!\n";
    55 		    chdir $tmpdir  or die "Can't chdir to $tmpdir: $!\n";
       
    56 		    exec restore => "-orf-";
       
    57 		    die "Can't exec restore: $!\n";
       
    58 		};
       
    59 		waitpid($pid, 0);
    56 	};
    60 	};
    57 	waitpid($pid, 0);
       
    58 	run("umount $tmpdir");
    61 	run("umount $tmpdir");
       
    62 	die $@ if $@;
    59     }
    63     }
       
    64     rmdir($tmpdir);
    60 }
    65 }
    61 
    66 
    62 
    67 
    63 1;
    68 1;
    64 
    69