X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=server-src%2Famverify.sh.in;h=451da620e326402a210325a1c8bc8021def936b8;hb=a5525d21600e0d3354eef378f9a5113c9c08d079;hp=8b052e12fb6c3a081157d46ce32b970d4771731d;hpb=c9bb64dd8260123d77b6f7be0f051f450b193e66;p=debian%2Famanda diff --git a/server-src/amverify.sh.in b/server-src/amverify.sh.in index 8b052e1..451da62 100644 --- a/server-src/amverify.sh.in +++ b/server-src/amverify.sh.in @@ -1,6 +1,6 @@ -#! /bin/sh +#! @SHELL@ # -# $Id: amverify.sh.in,v 1.7.2.13.4.5.2.6.2.2 2004/11/19 18:12:30 martinea Exp $ +# $Id: amverify.sh.in,v 1.38 2006/07/25 19:00:56 martinea Exp $ # # (C) 1996 by ICEM Systems GmbH # Author: Axel Zinser (fifi@icem.de) @@ -64,7 +64,7 @@ report() { } getparm() { - $AMGETCONF $CONFIG $1 2>/dev/null | grep -v BUGGY + $AMGETCONF $CONFIG $1 2>/dev/null } sendreport() { @@ -119,8 +119,8 @@ doonefile() { echo "** No header" > $TEMP/errors else set X $HEADER - shift - shift 9 + # XXX meh, while[] is dangerous, what about a bad header? + while [ X"$1" != X"program" ]; do shift; done if [ X"$1" = X"program" -a X"$2" != X"" ]; then if [ X"$TAR" != X"" \ -a \( X"`basename $2`" = X"`basename $TAR`" \ @@ -158,7 +158,13 @@ doonefile() { echo "** Cannot find dump type" > $TEMP/errors fi fi - if [ X"$CMD" != X"" ]; then + echo $CMD > $TEMP/onefile.cmd + if [ X"`echo $HEADER | grep '^AMANDA: SPLIT_FILE'`" != X"" ]; then + result=500 + set X $HEADER + shift 7 + echo $1 | cut -f7 -d' ' > $TEMP/onefile.partnum + elif [ X"$CMD" != X"" ]; then if [ -x $CMD ]; then $CMD $ARGS > /dev/null 2> $TEMP/errors result=$? @@ -346,6 +352,7 @@ report "" # ---------------------------------------------------------------------------- +SPLIT_DUMPS= # this will keep track of split dumps that we'll tally later while [ $SLOT -lt $SLOTS ]; do SLOT=`expr $SLOT + 1` # @@ -432,14 +439,21 @@ while [ $SLOT -lt $SLOTS ]; do # amrestore: 0: restoring sundae._mnt_sol1_usr.19961127.1 if [ X"$FILE" != X"" -a X"$RESULT" = X"0" ]; then report "Checked $FILE" + elif [ X"$FILE" != X"" -a X"$RESULT" = X"500" ]; then + report "Skipped `cat $TEMP/onefile.cmd` check on partial dump $FILE" + dump="`echo $FILE | cut -d'.' -f'1,2,3,4'`" + cat $TEMP/onefile.partnum >> $TEMP/$dump.parts + if [ X"`echo $SPLIT_DUMPS | grep $dump`" = X"" ]; then + SPLIT_DUMPS="$dump $SPLIT_DUMPS" + fi elif [ X"$FILE" != X"" -a X"$RESULT" = X"999" ]; then report "Skipped $FILE (`cat $TEMP/errors`)" elif [ -n "$EOF" ]; then report "End-of-Tape detected." break elif [ -n "$EOI" ]; then - report "End-of-Information detected." - break + report "End-of-Information detected." + break else report "** Error detected ($FILE)" echo "$VOLUME ($FILE):" >>$DEFECTS @@ -466,6 +480,8 @@ while [ $SLOT -lt $SLOTS ]; do $TEMP/amtape.out \ $TEMP/amrestore.out \ $TEMP/errors \ + $TEMP/onefile.cmd \ + $TEMP/onefile.partnum \ $TEMP/onefile.errors done @@ -473,6 +489,44 @@ done && $Echoe "Errors found: " \ && cat $DEFECTS +# Work out whether any split dumps we saw had all their parts +for dump in $SPLIT_DUMPS;do + report "" + numparts=0 + max=0 + max_known=0 + missing=0 + # figure out + for part in `cat $TEMP/$dump.parts`;do + cur="`echo $part | cut -d/ -f1`" + max="`echo $part | cut -d/ -f2`" + if [ $max != "UNKNOWN" ]; then + numparts=$max + max_known=1 + break; + fi + if [ $cur -gt $numparts ]; then + numparts=$cur + fi + done + report "Split dump $dump should have $numparts total pieces" + if [ $max_known != 1 ]; then + report "NOTE: Header field for total pieces was UNKNOWN, $numparts is best guess" + fi + part=1 + while [ $part -lt $numparts ];do + part=`expr $part + 1` + if [ X"`grep \"^$part/\" $TEMP/$dump.parts`" = X"" ];then + report "Spanning chunk part $part is missing!" + missing=`expr $missing + 1` + fi + done + if [ $missing = 0 ];then + report "All parts found" + fi + rm -f $TEMP/$dump.parts +done + sendreport exit 0