chiark / gitweb /
Found on anarres in /var/local/backup.
[chiark-utils.git] / backup / increm
1 #!/usr/bin/perl
2
3 BEGIN {
4     $etc= '/etc/backup';
5     require "$etc/settings.pl";
6     require 'backuplib.pl';
7 }
8
9 $|=1;
10
11 @ARGV==1 or die;
12 $tapeid= $ARGV[0];
13
14 print "Running incremental (tape $tapeid) ...\n" or die $!;
15
16 open T,"$etc/tape.$tapeid" or die "Tape $tapeid not found: $!\n";
17 close T;
18
19 open NF,"next-full" or die $!;
20 chomp($next= <NF>);
21 close NF or die $!;
22
23 setstatus "FAILED during incremental";
24
25 open A,"increm-advance" or die $!;
26 chomp($advance= <A>);
27 close A or die $!;
28
29 $advance =~ m/^\d+$/ or die "$advance ?";
30
31 system "mt -f $tape rewind"; $? and die $?;
32 system "mt -f $tape retension"; $? and die $?;
33
34 if ($advance == 1) {
35     open TI,">TAPEID" or die $!;
36     print TI "$tapeid" or die $!;
37     close TI or die $!;
38
39     system "tar -b$blocksize -vvcf TAPEID.tar TAPEID"; $? and die $?;
40     system "dd if=TAPEID.tar of=$ntape bs=${blocksize}b count=10"; $? and die $?;
41 } else {
42     system "mt -f $ntape fsf $advance"; $? and die $?;
43 }
44
45 readfsys('all');
46 openlog();
47
48 sub closepipes () {
49     close(DUMPOR); close(BUFOR);
50     close(DUMPOW); close(BUFOW);
51 }
52
53 setstatus "PROBLEMS during incremental dump";
54
55 for $tf (@fsys) {
56     pipe(DUMPOR,DUMPOW) or die $!;
57     pipe(BUFOR,BUFOW) or die $!;
58     parsefsys();
59     if ($tm ne 'dump') {
60         print "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!;
61         print LOG "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!;
62         next;
63     }
64     startprocess '</dev/null','>&DUMPOW',$rstr."dump 1bfu $softblocksizekb - $atf";
65     startprocess '<&DUMPOR','>&BUFOW','writebuffer';
66     startprocess '<&BUFOR','>/dev/null'
67         ,"dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape";
68     closepipes();
69     endprocesses();
70     $advance++;
71 }
72
73 system "mt -f $tape rewind"; $? and die $?;
74
75 open IAN,">increm-advance.new" or die $!;
76 print IAN "$advance\n" or die $!;
77 close IAN or die $!;
78 rename 'increm-advance.new','increm-advance' or die $!;
79
80 print LOG "Next FULL dump tape is $next\n" or die $!;
81 print "Next FULL dump tape is $next\n" or die $!;
82
83 setstatus "INCREMENTAL successful (next full is $next)";
84 exit 0;