chiark / gitweb /
@@ -1,11 +1,13 @@
[chiark-utils.git] / backup / increm
index bc058f7f7ffe0f44c1bf0300eb92696448f5382b..945bb0e5dec5118b1e561be5a5f6fdb62b9da61a 100755 (executable)
@@ -61,25 +61,26 @@ close A or die $!;
 # better be a decimal number
 $advance =~ m/^\d+$/ or die "$advance ?";
 
+# Get a list of all filesystems
+readfsys('all');
+openlog();
+
 # Rewind the tape and if we are the first incremental on the tape then
 # write the TAPEID record, otherwise skip forward to the correct point.
 # (full will already have checked that this is the right tape before
 # it invoked us, so no need to read the existing TAPEID record first.)
-system "mt -f $ntape rewind"; $? and die $?;
+runsystem("mt -f $ntape rewind");
 if ($advance == 1) {
     writetapeid($tapeid,$tapedesc);
 } else {
-    system "mt -f $ntape fsf $advance"; $? and die $?;
-    $currenttapefilenumber= $advance+1;
+    runsystem("mt -f $ntape fsf $advance");
+    $currenttapefilenumber= $advance;
 }
 
-# Get a list of all filesystems
-readfsys('all');
-openlog();
-
 sub closepipes () {
     close(DUMPOR); close(BUFOR);
     close(DUMPOW); close(BUFOW);
+    close(GZOR); close(GZOW);
 }
 
 setstatus "PROBLEMS during incremental dump";
@@ -87,6 +88,7 @@ setstatus "PROBLEMS during incremental dump";
 for $tf (@fsys) {
 
     parsefsys();
+    prepfsys();
     
     $bufir='DUMPOR';
     $ddcmd= "$nasty dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape";
@@ -102,14 +104,16 @@ for $tf (@fsys) {
     }
 
     if ($tm eq 'dump') {
-       $dumpcmd= "dump 1bfu $softblocksizekb - $atf";
+       $dumplabel= $pcstr.$atf_print.'$';
+       $dumpcmd= "dump 1Lbfu $dumplabel $softblocksizekb - $atf";
+    } elsif ($tm eq 'gtar') {
+       $dumpcmd= "tar NCcfl $fsidfile $atf - .";
     } else {
-       print "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!;
-       print LOG "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!;
+       pboth("Not dumping $atf_print ($prefix) - not supported.\n");
        next;
     }
 
-    nexttapefile("inc $prefix:$atf");
+    nexttapefile("inc $prefix:$atf_print");
     
     # Same trick as full uses to do a pipeline whilst keeping track
     # of all exit statuses:
@@ -125,17 +129,18 @@ for $tf (@fsys) {
     # advance is a file counter, so it needs to be updated for each 
     # dump we do to tape.
     $advance++;
+
+    finfsys();
 }
 
 # Rewind the tape, and increment the counter of incremental backups.
-system "mt -f $tape rewind"; $? and die $?;
+runsystem("mt -f $tape rewind");
 open IAN,">increm-advance.new" or die $!;
 print IAN "$advance\n" or die $!;
 close IAN or die $!;
 rename 'increm-advance.new','increm-advance' or die $!;
 
-print LOG "Next FULL dump tape is $next\n" or die $!;
-print "Next FULL dump tape is $next\n" or die $!;
+pboth("Next FULL dump tape is $next\n");
 
 setstatus "INCREMENTAL successful: $tapedesc, next full is $next";
 exit 0;