equal
deleted
inserted
replaced
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 |