3 # Read all the configuration files and check that all filesystems
4 # are either backed up in both full and incremental dumps or
5 # listed as exceptions.
9 require "$etc/settings.pl";
10 require 'backuplib.pl';
15 open X,'last-tape' or die $!;
19 while (!defined $tapedone{$tape}) {
20 open X,"$etc/tape.$tape" or die "$tape $!";
23 $_= <X> or die $1; chomp; s/\s*$//;
27 if (m/^filesystems (\w+)$/) { $fsg= $1; }
28 elsif (m/^next (\w+)$/) { $next=$1; }
29 else { die "$tape $_ ?"; }
31 length $fsg or die "$tape $!";
32 length $next or die "$tape $!";
33 push @{$fsgdone{$fsg}}, $tape;
38 for $fsg (sort keys %fsgdone) {
39 print "filesystem group $fsg: ".join(' ',@{$fsgdone{$fsg}}).":\n ";
44 $pstr= $prefix ne '<local>' ? "$prefix:$atf" : $atf;
45 &e("dumped twice ($backed{$pstr}, $fsg): $pstr")
46 if defined $backed{$pstr};
53 print "incremental group:\n ";
58 $pstr= $prefix ne '<local>' ? "$prefix:$atf" : $atf;
64 for $pfx ('', sort keys %prefix) {
65 $rstr= length($pfx) ? $prefix{$pfx}.' ' : '';
66 $dfstr= exists($prefixdf{$pfx}) ? $prefixdf{$pfx} :
67 'df --no-sync -xiso9660 -xnfs -xproc';
69 open X, "$cmd |" or die $!;
70 $_= <X>; m/^Filesystem/ or die "$cmd => $_ ?";
71 $ppstr= length($pfx) ? $pfx : '<local>';
72 $pstr= length($pfx) ? "$pfx:" : '';
73 print "mount points: $ppstr:";
77 m,^/dev/(\S+)\s.*\s(/\S*)\s*$, or die "$_ ?";
79 $mounted{"$pstr$mp"}="$pstr$dev"; print " $1-$2";
80 if (defined($backto= $backed{"$pstr$mp"})) {
81 if (m,^/dev/\S+\s+\d+\s+(\d+)\s,) {
82 $usedkb{$backto} += $1;
84 $usedkb{$backto} += 0;
85 $unkkb{$backto} .= " + $pstr$mp";
90 $!=0; close(X); $? and die "$? $!";
93 foreach $fsg (keys %usedkb) {
94 print "filesystem group $fsg: $usedkb{$fsg} 1K-blocks$unkkb{$fsg}\n";
97 # We check that all mounted filesystems are dumped and all
98 # filesystems to be dumped are mounted. The expected-diffs
99 # config file allows us to make exceptions.
101 # #expect disk2 to be mounted but not dumped
103 # # CD may or may not be mounted but should not be dumped in either case
106 open Z,"$etc/expected-diffs" or die $!;
108 $_= <Z> or die; chomp; s/\s*$//;
113 print "non-permanent filesystem expected not to be dumped: $_\n";
114 if (defined($mounted{$_})) {
118 &e("expected not to be dumped, but not a mount point: $_")
119 unless defined($mounted{$_});
120 print "filesystem expected not to be dumped: $_\n";
123 &e("non-filesystem expected to be dumped is mounted: $_ on $mounted{$_}")
124 if defined($mounted{$_});
125 $mounted{$_}= 'expected-diffs';
126 print "non-filesystem expected to be dumped: $_\n";
130 for $fs (sort keys %backed) { length($mounted{$fs}) || &e("dumped ($backed{$fs}), not a mount point: $fs"); }
131 for $fs (sort keys %incrd) { length($mounted{$fs}) || &e("increm'd ($incrd{$fs}), not a mount point: $fs"); }
132 for $fs (sort keys %mounted) { length($backed{$fs}) || &e("mount point ($mounted{$fs}), not dumped: $fs"); }
133 for $fs (sort keys %mounted) { length($incrd{$fs}) || &e("mount point ($mounted{$fs}), not increm'd: $fs"); }
135 $emsg.= "configuration ok\n" unless $e;
139 sub e { $emsg.="** @_\n"; $e=1; }