5 require "$etc/settings.pl";
6 require 'backuplib.pl';
11 print "Configuration check ...\n" or die $!;
12 system 'checkallused'; $? and die $?;
17 system "mt -f $tape rewind"; $? and die $?;
18 system "mt -f $tape setblk $blocksizebytes"; $? and die $?;
19 system "dd if=$tape bs=${blocksize}b count=10 | tar -b$blocksize -vvxf - TAPEID";
21 setstatus "FAILED during startup";
23 if (open T, "TAPEID") {
24 unlink 'really-TAPEID';
25 } elsif (open T, "really-TAPEID") {
31 $tapeid =~ m/[^0-9a-zA-Z]/ and die "Bad TAPEID ($&).\n";
32 $tapeid =~ m/[0-9a-zA-Z]/ or die "Empty TAPEID.\n";
35 setstatus "FAILED at tape identity check";
37 if (open L, "last-tape") {
38 chomp($lasttape= <L>);
44 die "Tape $tapeid same as last time.\n" if $tapeid eq $lasttape;
46 if (defined($tapedesc= readlink "$etc/tape.$tapeid")) {
47 $tapedesc =~ s/^.*\.//;
48 $tapedesc .= "($tapeid)";
54 open D, "$etc/tape.$tapeid" or die "Unknown tape $tapeid ($!).\n";
56 $_= <D> or die; chomp; s/\s+$//;
60 if (m/^filesystems (\w+)$/) {
62 } elsif (m/^next (\w+)$/) {
64 } elsif (m/^incremental$/) {
67 die "unknown entry in tape $tapeid at line $.: $_\n";
73 die "incremental tape $tapeid has next or filesystems\n"
74 if defined($next) || defined($fsys);
75 print STDERR "Incremental tape $tapeid.\n\n";
76 setstatus "FAILED during incremental startup";
77 exec "increm",$tapeid,$tapedesc;
84 $doing= "dump of $fsys to tape $tapedesc in drive $tape";
85 print LOG "$doing:\n" or die $!;
87 open T, ">TAPEID" or die $!;
88 print T "$tapeid\n$tapedesc\n" or die $!;
91 system "tar -b$blocksize -vvcf TAPEID.tar TAPEID"; $? and die $?;
92 system "dd if=TAPEID.tar of=$ntape bs=${blocksize}b count=10"; $? and die $?;
94 unlink 'this-md5sums';
96 print "Doing $doing ...\n" or die $!;
99 system 'mknod p p'; $? and die $?;
101 setstatus "FAILED during dump";
104 close(DUMPOR); close(TEEOR); close(BUFOR); close(FINDOR);
105 close(DUMPOW); close(TEEOW); close(BUFOW); close(FINDOW);
110 pipe(FINDOR,FINDOW) or die $!;
111 pipe(DUMPOR,DUMPOW) or die $!;
112 pipe(TEEOR,TEEOW) or die $!;
113 pipe(BUFOR,BUFOW) or die $!;
116 $dumpcmd= "dump 0bfu $softblocksizekb - $atf";
117 $dumpin= '</dev/null';
119 startprocess '</dev/null','>&FINDOW',$rstr."find $atf -xdev -noleaf -print0";
120 $dumpcmd= "cpio -Hustar -o0C$softblocksizebytes";
123 startprocess '<p','>>this-md5sums','md5sum';
124 startprocess $dumpin,'>&DUMPOW',$rstr.$dumpcmd;
125 startprocess '<&DUMPOR','>&TEEOW','tee p';
126 startprocess '<&TEEOR','>&BUFOW','writebuffer';
127 startprocess '<&BUFOR','>/dev/null'
128 ,"dd ibs=$softblocksizebytes obs=$blocksizebytes of=$ntape";
133 setstatus "FAILED during check";
135 system "mt -f $tape rewind"; $? and die $?;
136 system "mt -f $ntape fsf 1"; $? and die $?;
138 open S,"this-md5sums" or die $!;
142 $orgsum =~ m/^[0-9a-fA-F]{32}$/i or die "orgsum \`$orgsum' ?";
143 chomp($csum= `readbuffer <$ntape | md5sum`);
144 $orgsum eq $csum or die "MISMATCH $tf $csum $orgsum\n";
145 print "checksum ok $csum\t$tf\n" or die $!;
146 print LOG "checksum ok $csum\t$tf\n" or die $!;
149 system "mt -f $tape rewind"; $? and die $?;
151 setstatus "FAILED during cleanup";
153 open IAN,">increm-advance.new" or die $!;
154 print IAN "1\n" or die $!;
157 open TN,">next-full.new" or die $!;
158 print TN "$next\n" or die $!;
161 unlink 'last-tape','next-full';
162 rename 'TAPEID','last-tape' or die $!;
163 rename 'this-md5sums',"md5sums.$fsys" or die $!;
164 rename 'log',"log.$fsys" or die $!;
165 rename 'next-full.new',"next-full" or die $!;
166 rename 'increm-advance.new',"increm-advance" or die $!;
168 print "$doing completed.\nNext dump tape is $next.\n" or die $!;
170 setstatus "Successful: $tapedesc $fsys, next $next";