chiark / gitweb /
1d2aaa774afe6633558af65fdd5665ae0ad25f59
[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==2 or die;
12 ($tapeid,$tapedesc)= @ARGV;
13
14 print "Running incremental onto $tapedesc ...\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 $ntape rewind"; $? and die $?;
32 if ($advance == 1) {
33     open TI,">TAPEID" or die $!;
34     print TI "$tapeid\n$tapedesc\n" or die $!;
35     close TI or die $!;
36
37     system "tar -b$blocksize -vvcf TAPEID.tar TAPEID"; $? and die $?;
38     system "dd if=TAPEID.tar of=$ntape bs=${blocksize}b count=10"; $? and die $?;
39 } else {
40     system "mt -f $ntape fsf $advance"; $? and die $?;
41 }
42
43 readfsys('all');
44 openlog();
45
46 sub closepipes () {
47     close(DUMPOR); close(BUFOR);
48     close(DUMPOW); close(BUFOW);
49 }
50
51 setstatus "PROBLEMS during incremental dump";
52
53 for $tf (@fsys) {
54     pipe(DUMPOR,DUMPOW) or die $!;
55     pipe(BUFOR,BUFOW) or die $!;
56     parsefsys();
57     if ($tm ne 'dump') {
58         print "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!;
59         print LOG "Not dumping $atf ($prefix) - not \`dump'.\n" or die $!;
60         next;
61     }
62     startprocess '</dev/null','>&DUMPOW',$rstr."dump 1bfu $softblocksizekb - $atf";
63     startprocess '<&DUMPOR','>&BUFOW','writebuffer';
64     startprocess '<&BUFOR','>/dev/null'
65         ,"dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape";
66     closepipes();
67     endprocesses();
68     $advance++;
69 }
70
71 system "mt -f $tape rewind"; $? and die $?;
72 open IAN,">increm-advance.new" or die $!;
73 print IAN "$advance\n" or die $!;
74 close IAN or die $!;
75 rename 'increm-advance.new','increm-advance' or die $!;
76
77 print LOG "Next FULL dump tape is $next\n" or die $!;
78 print "Next FULL dump tape is $next\n" or die $!;
79
80 setstatus "INCREMENTAL successful: $tapedesc, next full is $next";
81 exit 0;