#! /bin/sh # FS QA Test No. 149 # # Exercise xfs_prepair - ensure repeated use doesn't corrupt # This is a clone of test 031 using xfs_prepair instead of xfs_repair # #----------------------------------------------------------------------- # Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. #----------------------------------------------------------------------- # # creator owner=ddiss@sgi.com seq=`basename $0` echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 rm -f $seq.full # get standard environment, filters and checks . ./common.rc . ./common.repair . ./common.filter [ -z $XFS_PARALLEL_REPAIR_PROG ] && _notrun "parallel repair binary xfs_prepair is not installed" # force use of parallel repair export XFS_REPAIR_PROG=$XFS_PARALLEL_REPAIR_PROG _check_repair() { echo "Repairing, round 0" >> $seq.full _scratch_xfs_repair 2>&1 | _filter_repair | tee -a $seq.full >$tmp.0 for i in 1 2 3 4 do echo "Repairing, iteration $i" | tee -a $seq.full _scratch_xfs_repair 2>&1 | _filter_repair >$tmp.$i diff $tmp.0 $tmp.$i >> $seq.full if [ $? -ne 0 ]; then echo "ERROR: repair round $i differs to round 0 (see $seq.full)" | tee -a $seq.full break fi # echo all interesting stuff... perl -ne ' s/(rebuilding directory inode) (\d+)/\1 INO/g; s/internal log/ log/g; s/external log on \S+/ log/g; /^\S+/ && print; ' $tmp.$i done echo } # prototype file to create various directory forms _create_proto() { total=$1 count=0 # take inode size into account for non-shortform directories... [ $total -gt 0 ] && total=`expr $total \* $isize / 512` cat >$tmp.proto <>$tmp.proto <>$tmp.proto } # real QA test starts here _supported_fs xfs _supported_os IRIX Linux _require_nobigloopfs _require_scratch # sanity test - default + one root directory entry # Note: must do this proto/mkfs now for later inode size calcs _create_proto 0 echo "=== one entry (shortform)" _scratch_mkfs_xfs -p $tmp.proto >$tmp.mkfs0 2>&1 _filter_mkfs <$tmp.mkfs0 >/dev/null 2>$tmp.mkfs . $tmp.mkfs _check_repair # block-form root directory & repeat _create_proto 20 echo "=== twenty entries (block form)" _scratch_mkfs_xfs -p $tmp.proto | _filter_mkfs >/dev/null 2>&1 _check_repair # leaf-form root directory & repeat _create_proto 1000 echo "=== thousand entries (leaf form)" _scratch_mkfs_xfs -p $tmp.proto | _filter_mkfs >/dev/null 2>&1 _check_repair # success, all done status=0 exit