From: David Disseldorp Date: Thu, 21 Dec 2006 02:54:59 +0000 (+0000) Subject: clone of test 031 using xfs_prepair instead of xfs_repair X-Git-Tag: v1.1.0~538 X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=commitdiff_plain;h=fdeaa5213dec8e747c8393b147b32b4e20f08c4e clone of test 031 using xfs_prepair instead of xfs_repair Merge of master-melb:xfs-cmds:27794a by kenmcd. clone of test 031 using xfs_prepair instead of xfs_repair --- diff --git a/149 b/149 new file mode 100755 index 00000000..3121c1fc --- /dev/null +++ b/149 @@ -0,0 +1,115 @@ +#! /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 + +[ -x $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 diff --git a/149.out b/149.out new file mode 100644 index 00000000..0c65cd98 --- /dev/null +++ b/149.out @@ -0,0 +1,123 @@ +QA output created by 149 +=== one entry (shortform) +Repairing, iteration 1 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +Phase 7 - verify and correct link counts... +done +Repairing, iteration 2 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +Phase 7 - verify and correct link counts... +done +Repairing, iteration 3 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +Phase 7 - verify and correct link counts... +done +Repairing, iteration 4 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +Phase 7 - verify and correct link counts... +done + +=== twenty entries (block form) +Repairing, iteration 1 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done +Repairing, iteration 2 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done +Repairing, iteration 3 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done +Repairing, iteration 4 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done + +=== thousand entries (leaf form) +Repairing, iteration 1 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done +Repairing, iteration 2 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done +Repairing, iteration 3 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done +Repairing, iteration 4 +Phase 1 - find and verify superblock... +Phase 2 - using log +Phase 3 - for each AG... +Phase 4 - check for duplicate blocks... +Phase 5 - rebuild AG headers and trees... +Phase 6 - check inode connectivity... +rebuilding directory inode INO +Phase 7 - verify and correct link counts... +done + diff --git a/group b/group index ad797ff7..361861b0 100644 --- a/group +++ b/group @@ -228,3 +228,4 @@ pattern ajones@sgi.com 146 dmapi auto 147 dmapi auto 148 repair auto +149 repair auto