chiark / gitweb /
@@ -3,6 +3,7 @@
authorianmdlvl <ianmdlvl>
Sun, 11 May 2003 19:01:11 +0000 (19:01 +0000)
committerianmdlvl <ianmdlvl>
Sun, 11 May 2003 19:01:11 +0000 (19:01 +0000)
+  * ntfsimage support.

TODO
backup/backuplib.pl
backup/checkallused
backup/full
backup/increm
backup/iwjbackup.txt
debian/changelog

diff --git a/TODO b/TODO
index bcf52f923afed2de6b390f5f1dad88e0c522cb9c..6a5197f3095ce5b333ee399d5f344fe16a28e080 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,7 +1,6 @@
 BACKUP
 ======
 
-devices as well as mountpoints
 read/writebuffer buggy ?
 
 would be nice someday
index 1163b5a0012be6b0ba157c55aa6ca4bc4a56e236..50cc70a745f9aa070ed6778f12e3455c3df1303a 100644 (file)
@@ -144,26 +144,31 @@ sub readfsys ($) {
 sub parsefsys () {
     my ($dopts,$dopt);
     if ($tf =~ m#^(/\S*)\s+(\w+)([,=0-9a-z]*)$#) {
-        # Line of form '/file/system   dumptype[,options]'
+        # Line of form '[/device:]/file/system dumptype[,options]'
        $atf= $1;
        $tm= $2;
        $dopts= $3;
        $prefix= '<local>';
+       $pcstr= '';
        stat $atf or die "stat $atf: $!";
        -d _ or die "not a dir: $atf";
        $rstr= '';
     } elsif ($tf =~ m#^(/\S*)\s+(\w+)([,=0-9a-z]*)\s+(\w+)$#) {
-        # Line of form '/file/system dumptype[,options] prefix'
+        # Line of form '[/device:]/file/system dumptype[,options] prefix'
         # (used for remote backups)
        $atf= $1;
        $tm= $2;
        $dopts= $3;
        $prefix= $4;
+       $pcstr= "$prefix:";
        defined($prefix{$prefix}) or die "prefix $prefix in $tf ?\n";
        $rstr= $prefix{$prefix}.' ';
     } else {
        die "fsys $tf ?";
     }
+
+    $dev = $atf =~ s,^(.*)\:,, ? $1 : '';
+
     undef %dopt;
     foreach $dopt (split /\,/,$dopts) {
        if (grep { $dopt eq $_ } qw(gz)) {
@@ -175,14 +180,17 @@ sub parsefsys () {
        }
     }
 
-    if ($dopt{'gz'} eq 'y') {
-       $gz= '1';
-    } elsif ($dopt{'gz'} =~ m/^\d$/) {
-       $gz= $dopt{'gz'};
-    } elsif (defined $dopt{'gz'}) {
-       die "$tf bad gz";
-    } else {
-       $gz= 0;
+    my ($gzo);
+    foreach $gzo (qw(gz gzi)) {
+       if ($dopt{$gzo} eq 'y') {
+           $$gzo= '1';
+       } elsif ($dopt{$gzo} =~ m/^\d$/) {
+           $$gzo= $dopt{$gzo};
+       } elsif (defined $dopt{$gzo}) {
+           die "$tf bad $gzo";
+       } else {
+           $$gzo= '';
+       }
     }
 }
 
index fac60a9c0159e4ba401bdd85da0ceb5a55b3e555..953f136f8e8dee3b6de996eafe7dc222b96550ca 100755 (executable)
@@ -56,16 +56,23 @@ while (!defined $tapedone{$tape}) {
     $tape= $next;
 }
 
+proc checkdevspec ($$$) {
+    my ($atf,$devspec,$why);
+    push @{ $devspec{$atf}{$devspec} }, $why;
+}
+
 for $fsg (sort keys %fsgdone) {
     print "filesystem group $fsg: ".join(' ',@{$fsgdone{$fsg}}).":\n ";
     @fsys= ();
     readfsys($fsg);
     for $tf (@fsys) {
        parsefsys();
-       $pstr= $prefix ne '<local>' ? "$prefix:$atf" : $atf;
+       $pstr= "$pcstr$atf";
        &e("dumped twice ($backed{$pstr}, $fsg): $pstr")
            if defined $backed{$pstr};
        $backed{$pstr}= $fsg;
+       checkdevspec($pstr,"$pcstr$dev","filesystem group $fsg")
+           if length $dev;
        print " $pstr";
     }
     print "\n";
@@ -76,8 +83,9 @@ print "incremental group:\n ";
 readfsys('all');
 for $tf (@fsys) {
     parsefsys();
-    $pstr= $prefix ne '<local>' ? "$prefix:$atf" : $atf;
+    $pstr= "$pcstr$atf";
     $incrd{$pstr}= $fsg;
+    checkdevspec($pstr,"$pcstr$dev","incremental group") if length $dev;
     print " $pstr";
 }
 print "\n";
@@ -89,21 +97,22 @@ for $pfx ('', sort keys %prefix) {
     $cmd= "$rstr $dfstr";
     open X, "$cmd |" or die $!;
     $_= <X>; m/^Filesystem/ or die "$cmd => $_ ?";
-    $ppstr= length($pfx) ? $pfx : '<local>';
-    $pstr= length($pfx) ? "$pfx:" : '';
-    print "mount points: $ppstr:";
+    $prefix= length($pfx) ? $pfx : '<local>';
+    $pcstr= length($pfx) ? "$pfx:" : '';
+    print "mount points: $prefix:";
     while (<X>) {
        chomp;
        next if m,^procfs\s,;
        m,^/dev/(\S+)\s.*\s(/\S*)\s*$, or die "$_ ?";
        ($dev,$mp) = ($1,$2);
-       $mounted{"$pstr$mp"}="$pstr$dev"; print " $1-$2";
-       if (defined($backto= $backed{"$pstr$mp"})) {
+       checkdevspec("$pcstr$imp","$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} .= " + $pstr$mp";
+               $unkkb{$backto} .= " + $prefix:$mp";
            }
        }
     }
@@ -115,6 +124,14 @@ foreach $fsg (keys %usedkb) {
     print "filesystem group $fsg: $usedkb{$fsg} 1K-blocks$unkkb{$fsg}\n";
 }
 
+foreach $dsk (keys $devspec) {
+    if (@{ $devspec{$dsk} } != 1) {
+       foreach $devspec @{ $devspec{$dsk} } {
+           &e("inconsistent devices for $dsk: $devspec");
+       }
+    }
+}
+
 # We check that all mounted filesystems are dumped and all
 # filesystems to be dumped are mounted. The expected-diffs
 # config file allows us to make exceptions.
@@ -150,7 +167,9 @@ 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) { length($backed{$fs}) || &e("mount point ($mounted{$fs}), not dumped: $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($incrd{$fs}) || &e("mount point ($mounted{$fs}), not increm'd: $fs"); }
 
 $emsg.= "configuration ok\n" unless $e;
index ddd15ce215a2ff69e4c1ac4204b8c7efbec0bd3b..c25f2d0b96cd47daa1cd65532a32a24ae24c9927 100755 (executable)
@@ -214,8 +214,7 @@ for $tf (@fsys) {
         $dumpcmd = "afio -b $softblocksizebytes -Zo -";
         $dumpin = '<&FINDOR';
     } elsif ($tm eq 'ntfsimage') {
-# fixme have to find device rather than mountpoint (atf is mountpoint)
-       $dumpcmd= "ntfsimage -vvf --dirty $atf";
+       $dumpcmd= "ntfsimage -vvf --dirty $dev";
     } else {
        die "unknown method $tm for $prefix:$atf\n";
     }
index e3037e8068e10617447b20ddeb18e00f64d795dd..9bad0f1c6e3229b3cd2d4fdf53ff3f4c0e748408 100755 (executable)
@@ -98,6 +98,7 @@ for $tf (@fsys) {
     pipe(DUMPOR,DUMPOW) or die $!;
     pipe(BUFOR,BUFOW) or die $!;
 
+    $gz= $gzi if length $gzi;
     if ($gz) {
        $bufir='GZOR';
        pipe(GZOR,GZOW) or die $!;
index 9c39ab740e44a0156f23d4a593512bf872cc8d7a..5de4276dcb28d30b13ee6edb7646c9b1de5dac59 100644 (file)
@@ -69,9 +69,12 @@ volumes, requires device name).  Only `dump' type backups perform
 incremental backups.
 
 <options> is a comma-separated list of <option> or <option>=<value>.
-The only currently support option is gz[=<compressionlevel>], to
+The only currently support options are gz[i][=<compressionlevel>], to
 indicate that the whole stream should be compressed with gzip.  The
-compression level defaults to 1.
+compression level defaults to 1 if gz is specified by the level isn't.
+gzi appliies only to the incrementals; gz applies to both unless gzi
+is also specified.  compression level 0 means not to run gzip at all
+and is the default if gz[i] is not mentioned.
 
 expected-diffs is a config file to indicate which 
 filesystems should *not* be backed up. The scripts do a config
index 5f20d7a5ea13817bcce165ac7f3ad092e0571132..794b1527684fa2b13a6ab2537d87e648ae254380 100644 (file)
@@ -3,6 +3,7 @@ chiark-utils (3.0.3.99) unstable; urgency=low
   * chiark-backup: full dumps have tapedesc in TAPEID
   * compression support (gz as a style option).
   * $nice and $nasty in settings.pl.
+  * ntfsimage support.
 
  --