--- 42.pl 2009/07/18 17:31:53 1 +++ 42.pl 2009/07/18 18:05:37 2 @@ -17,9 +17,9 @@ 'commit!' => \$commit, ) or die "unknown options: $!"; -map { mkdir $_ unless -e $_ } map { "$mnt/$_" } ( 'log', 'ps' ); +map { mkdir $_ unless -e $_ } map { "$mnt/$_" } ( 'log', 'fs' ); -my $path = shift @ARGV; +my $path = shift @ARGV || die "usage: $0 /path/to/file\n"; my ($dir,$file) = ($1,$2) if $path =~ m{^(?:(.+)/)?([^/]+)}; @@ -36,7 +36,7 @@ warn "# seq: $seq start: $opos\n"; } else { - $seq = scalar(glob("$mnt/log/*")); + $seq = $#{ glob("$mnt/log/*") } + 1; warn "# $mnt/last not found, recover seq: $seq\n"; } @@ -58,13 +58,19 @@ } } -my $cmd = "dd_rescue -l $log -S $opos $path $dev && ln -s $log $mnt/last"; -print "+ $cmd\n"; -system($cmd) == 0 or die $?; - my $fs = "$mnt/fs/$dir"; -mkdir $fs unless -e $fs; +mkpath $fs unless -e $fs; $fs .= '/' . $file; -symlink $fs,$log || die "can't create $fs: $!"; +die "$fs exists!" if -e $fs; + +my $cmd = "dd_rescue -l $log -S $opos $path $dev"; +print "+ $cmd\n"; +system($cmd) == 0 or warn "# exit code: $?"; + +unlink("$mnt/last") && symlink($log,"$mnt/last") || die "can't commit log $log -> $mnt/last"; + +symlink($log,$fs) || die "can't create $fs: $!"; + +print "OK $fs -> $log\n";