-#! /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)
}
getparm() {
- $AMGETCONF $CONFIG $1 2>/dev/null | grep -v BUGGY
+ $AMGETCONF $CONFIG $1 2>/dev/null
}
sendreport() {
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`" \
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=$?
cd @AMANDA_TMPDIR@ || exit 1
TEMP=@AMANDA_TMPDIR@/amverify.$$
-trap 'rm -fr $TEMP' 0
+trap 'rm -fr $TEMP' EXIT
if ( umask 077 ; mkdir $TEMP ) ; then
:
else
TAPELIST=
EXITSTAT=$TEMP/amrecover.exit; rm -rf $EXITSTAT
-trap 'report "aborted!"; echo "aborted!" >> $DEFECTS; sendreport; rm -fr $TEMP; exit 1' 1 2 3 4 5 6 7 8 10 12 13 14 15
+trap 'report "aborted!"; echo "aborted!" >> $DEFECTS; sendreport; rm -fr $TEMP; exit 1' EXIT
$Echoe "Defects file is $DEFECTS"
report "amverify $CONFIG"
# ----------------------------------------------------------------------------
+SPLIT_DUMPS= # this will keep track of split dumps that we'll tally later
while [ $SLOT -lt $SLOTS ]; do
SLOT=`expr $SLOT + 1`
#
fi
report "Using device $DEVICE"
$Echon "Waiting for device to go ready..."
- until eval $DEVICE_READY >/dev/null 2>&1; do
+ count=1800
+ until eval $DEVICE_READY > $TEMP/ammt.out 2>&1; do
+ [ count -lt 0 ] \
+ && report "Device not ready" \
+ && report "`cat $TEMP/ammt.out`" \
+ && report cat $TEMP/ammt.out >> $DEFECTS \
+ && break;
sleep 3
+ count=`expr $count - 3`
done
$Echon "Rewinding..."
ERRORS=0
if [ $Echon = echon ]; then
$Echon "Waiting for device to go ready..."
fi
- until eval $DEVICE_READY >/dev/null 2>&1; do
+ count=1800
+ until eval $DEVICE_READY > $TEMP/ammt.out 2>&1; do
+ [ count -lt 0 ] \
+ && report "Device not ready" \
+ && report "`cat $TEMP/ammt.out`" \
+ && report cat $TEMP/ammt.out >> $DEFECTS \
+ && break;
sleep 3
+ count=`expr $count - 3`
done
if [ $Echon = echon ]; then
$Echon "Reading..."
# 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
$TEMP/amtape.out \
$TEMP/amrestore.out \
$TEMP/errors \
+ $TEMP/onefile.cmd \
+ $TEMP/onefile.partnum \
$TEMP/onefile.errors
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
+rm -fr $TEMP
+trap - EXIT
+
exit 0