X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fincrem;h=c9d52cabc657b73b448b7379f6cad63fe2f899b3;hp=bc058f7f7ffe0f44c1bf0300eb92696448f5382b;hb=78c7e0c44c2686cf1b9f043297bdd51ce28d0192;hpb=314a202a6f4e0a120fd982ad0398cdf507d6219d diff --git a/backup/increm b/backup/increm index bc058f7..c9d52ca 100755 --- a/backup/increm +++ b/backup/increm @@ -6,12 +6,13 @@ # other UN*X-compatible machines, as used on chiark.greenend.org.uk. # # chiark backup is: -# Copyright (C) 1997-1998,2000-2001 Ian Jackson +# Copyright (C) 1997-1998,2000-2001,2007 +# Ian Jackson # Copyright (C) 1999 Peter Maydell # # This is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2, or (at your option) any later version. +# Foundation; either version 3, or (at your option) any later version. # # This is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS @@ -19,8 +20,8 @@ # details. # # You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# with this program; if not, consult the Free Software Foundation's +# website at www.fsf.org, or the GNU Project website at www.gnu.org. # We are invoked by full if the tape description file says that it is # for an incremental backup. We expect two commandline argument which @@ -61,25 +62,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 +89,7 @@ setstatus "PROBLEMS during incremental dump"; for $tf (@fsys) { parsefsys(); + prepfsys(); $bufir='DUMPOR'; $ddcmd= "$nasty dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape"; @@ -101,15 +104,21 @@ for $tf (@fsys) { $ddcmd .= " conv=sync"; } + if ($dopt{'noinc'}) { + pboth("Incrementals of $atf_print ($prefix) suppressed in config.\n"); + } + 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 +134,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;