chiark / gitweb /
chiark-backup: really cope properly with nosnap removal
[chiark-utils.git] / backup / checkallused
index 953f136f8e8dee3b6de996eafe7dc222b96550ca..c0079d08bb726d4b4faa33fb4cab736ca2af23ea 100755 (executable)
@@ -6,12 +6,13 @@
 # other UN*X-compatible machines, as used on chiark.greenend.org.uk.
 #
 # chiark backup is:
-#  Copyright (C) 1997-1998,2000-2001 Ian Jackson <ian@chiark.greenend.org.uk>
+#  Copyright (C) 1997-1998,2000-2001,2007
+#                     Ian Jackson <ian@chiark.greenend.org.uk>
 #  Copyright (C) 1999 Peter Maydell <pmaydell@chiark.greenend.org.uk>
 #
 # This is free software; you can redistribute it and/or modify it under the
 # terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2, or (at your option) any later version.
+# Foundation; either version 3, or (at your option) any later version.
 #
 # This is distributed in the hope that it will be useful, but WITHOUT ANY
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
@@ -19,8 +20,8 @@
 # details.
 #
 # You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# with this program; if not, consult the Free Software Foundation's
+# website at www.fsf.org, or the GNU Project website at www.gnu.org.
 
 # All filesystems must either be backed up in both full and
 # incremental dumps or listed as exceptions.
@@ -56,8 +57,8 @@ while (!defined $tapedone{$tape}) {
     $tape= $next;
 }
 
-proc checkdevspec ($$$) {
-    my ($atf,$devspec,$why);
+sub checkdevspec ($$$) {
+    my ($atf,$devspec,$why) = @_;
     push @{ $devspec{$atf}{$devspec} }, $why;
 }
 
@@ -93,7 +94,7 @@ print "\n";
 for $pfx ('', sort keys %prefix) {
     $rstr= length($pfx) ? $prefix{$pfx}.' ' : '';
     $dfstr= exists($prefixdf{$pfx}) ? $prefixdf{$pfx} :
-       'df --no-sync -xiso9660 -xnfs -xproc';
+       'df -P --no-sync -xiso9660 -xnfs -xproc -xtmpfs';
     $cmd= "$rstr $dfstr";
     open X, "$cmd |" or die $!;
     $_= <X>; m/^Filesystem/ or die "$cmd => $_ ?";
@@ -105,14 +106,12 @@ for $pfx ('', sort keys %prefix) {
        next if m,^procfs\s,;
        m,^/dev/(\S+)\s.*\s(/\S*)\s*$, or die "$_ ?";
        ($dev,$mp) = ($1,$2);
-       checkdevspec("$pcstr$imp","$pcstr/dev/$dev","df");
+       checkdevspec("$pcstr$mp","$pcstr/dev/$dev","df");
        $mounted{"$pcstr$mp"}="$pcstr$dev"; print " $1-$2";
        if (defined($backto= $backed{"$pcstr$mp"})) {
            if (m,^/dev/\S+\s+\d+\s+(\d+)\s,) {
                $usedkb{$backto} += $1;
-           } else {
-               $usedkb{$backto} += 0;
-               $unkkb{$backto} .= " + $prefix:$mp";
+               $countedkb{"$pcstr$mp"}++;
            }
        }
     }
@@ -121,13 +120,19 @@ for $pfx ('', sort keys %prefix) {
 }
 
 foreach $fsg (keys %usedkb) {
-    print "filesystem group $fsg: $usedkb{$fsg} 1K-blocks$unkkb{$fsg}\n";
+    print "filesystem group $fsg: $usedkb{$fsg} 1K-blocks raw accounted\n";
 }
 
-foreach $dsk (keys $devspec) {
-    if (@{ $devspec{$dsk} } != 1) {
-       foreach $devspec @{ $devspec{$dsk} } {
-           &e("inconsistent devices for $dsk: $devspec");
+foreach $fsg (keys %backed) {
+    next if $countedkb{$fsg};
+    print "unaccounted filesystem: $fsg\n";
+}
+
+foreach $dsk (keys %devspec) {
+    if (keys %{ $devspec{$dsk} } != 1) {
+       foreach $devspec (keys %{ $devspec{$dsk} }) {
+           &e("inconsistent devices for $dsk: $devspec (".
+               join(', ', @{ $devspec{$dsk}{$devspec} }).")");
        }
     }
 }
@@ -167,9 +172,7 @@ for (;;) {
     
 for $fs (sort keys %backed) { length($mounted{$fs}) || &e("dumped ($backed{$fs}), not a mount point: $fs"); }
 for $fs (sort keys %incrd) { length($mounted{$fs}) || &e("increm'd ($incrd{$fs}), not a mount point: $fs"); }
-for $fs (sort keys %mounted) {
-    next if $backed{$fs} 
-    length($backed{$fs}) || &e("mount point ($mounted{$fs}), not dumped: $fs"); }
+for $fs (sort keys %mounted) { length($backed{$fs}) || &e("mount point ($mounted{$fs}), not dumped: $fs"); }
 for $fs (sort keys %mounted) { length($incrd{$fs}) || &e("mount point ($mounted{$fs}), not increm'd: $fs"); }
 
 $emsg.= "configuration ok\n" unless $e;