X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fincrem;fp=backup%2Fincrem;h=e4ebbf75a5bf881886863164d6b61c14bc1945aa;hp=0000000000000000000000000000000000000000;hb=3f7f507605d77ece782e847a5a1606197268f220;hpb=1271e95c26179089358f4881398cb57811608b22 diff --git a/backup/increm b/backup/increm new file mode 100755 index 0000000..e4ebbf7 --- /dev/null +++ b/backup/increm @@ -0,0 +1,84 @@ +#!/usr/bin/perl + +BEGIN { + $etc= '/etc/backup'; + require "$etc/settings.pl"; + require 'backuplib.pl'; +} + +$|=1; + +@ARGV==1 or die; +$tapeid= $ARGV[0]; + +print "Running incremental (tape $tapeid) ...\n" or die $!; + +open T,"$etc/tape.$tapeid" or die "Tape $tapeid not found: $!\n"; +close T; + +open NF,"next-full" or die $!; +chomp($next= ); +close NF or die $!; + +setstatus "FAILED during incremental"; + +open A,"increm-advance" or die $!; +chomp($advance= ); +close A or die $!; + +$advance =~ m/^\d+$/ or die "$advance ?"; + +system "mt -f $tape rewind"; $? and die $?; +system "mt -f $tape retension"; $? and die $?; + +if ($advance == 1) { + open TI,">TAPEID" or die $!; + print TI "$tapeid" or die $!; + close TI or die $!; + + system "tar -b$blocksize -vvcf TAPEID.tar TAPEID"; $? and die $?; + system "dd if=TAPEID.tar of=$ntape bs=${blocksize}b count=10"; $? and die $?; +} else { + system "mt -f $ntape fsf $advance"; $? and die $?; +} + +readfsys('all'); +openlog(); + +sub closepipes () { + close(DUMPOR); close(BUFOR); + close(DUMPOW); close(BUFOW); +} + +setstatus "PROBLEMS during incremental dump"; + +for $tf (@fsys) { + pipe(DUMPOR,DUMPOW) or die $!; + pipe(BUFOR,BUFOW) or die $!; + parsefsys(); + if ($tm ne 'dump') { + print "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!; + print LOG "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!; + next; + } + startprocess '&DUMPOW',$rstr."dump 1bfu $softblocksizekb - $atf"; + startprocess '<&DUMPOR','>&BUFOW','writebuffer'; + startprocess '<&BUFOR','>/dev/null' + ,"dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape"; + closepipes(); + endprocesses(); + $advance++; +} + +system "mt -f $tape rewind"; $? and die $?; + +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 $!; + +setstatus "INCREMENTAL successful (next full is $next)"; +exit 0;