X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fincrem;h=e3037e8068e10617447b20ddeb18e00f64d795dd;hp=63d56d428b4bcee8d87dbc7767b56b3fe165dbaf;hb=6548c05b2f401d9d712acde8d0aff31388c0db70;hpb=8e5f50513299d7d7f15d958579dc0b0751923ed1 diff --git a/backup/increm b/backup/increm index 63d56d4..e3037e8 100755 --- a/backup/increm +++ b/backup/increm @@ -1,13 +1,34 @@ #!/usr/bin/perl - -# Do an incremental backup. We are invoked by full if the tape -# description file says that it is for an incremental backup. -# We expect two commandline argument which is the ID string -# of the tape to use, and the description (which includes ID -# and function). +# increm +# Do an incremental backup; ONLY for invocation by full ! +# +# This file is part of chiark backup, a system for backing up GNU/Linux and +# 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) 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. +# +# This is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# 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. + +# We are invoked by full if the tape description file says that it is +# for an incremental backup. We expect two commandline argument which +# is the ID string of the tape to use, and the description (which +# includes ID and function). BEGIN { - $etc= '/etc/backup'; + $etc= '/etc/chiark-backup'; require "$etc/settings.pl"; require 'backuplib.pl'; } @@ -69,10 +90,23 @@ setstatus "PROBLEMS during incremental dump"; for $tf (@fsys) { + parsefsys(); + + $bufir='DUMPOR'; + $ddcmd= "$nasty dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape"; + pipe(DUMPOR,DUMPOW) or die $!; pipe(BUFOR,BUFOW) or die $!; - parsefsys(); - if ($tm ne 'dump') { + + if ($gz) { + $bufir='GZOR'; + pipe(GZOR,GZOW) or die $!; + $ddcmd .= " conv=sync"; + } + + if ($tm eq 'dump') { + $dumpcmd= "dump 1bfu $softblocksizekb - $atf"; + } else { print "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!; print LOG "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!; next; @@ -80,10 +114,12 @@ for $tf (@fsys) { # Same trick as full uses to do a pipeline whilst keeping track # of all exit statuses: # dump /dev/null - startprocess '&DUMPOW',$rstr."dump 1bfu $softblocksizekb - $atf"; - startprocess '<&DUMPOR','>&BUFOW','writebuffer'; - startprocess '<&BUFOR','>/dev/null' - ,"dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape"; + startprocess '&DUMPOW',"$nice ".$rstr.$dumpcmd; + if ($gz) { + startprocess '<&DUMPOR','>&GZOW',"$nice gzip -v$gz"; + } + startprocess "<&$bufir",'>&BUFOW',"$nasty writebuffer"; + startprocess '<&BUFOR','>/dev/null',"$nasty $ddcmd"; closepipes(); endprocesses(); # advance is a file counter, so it needs to be updated for each