clone of test 031 using xfs_prepair instead of xfs_repair
authorDavid Disseldorp <ddiss@sgi.com>
Thu, 21 Dec 2006 02:54:59 +0000 (02:54 +0000)
committerDavid Disseldorp <ddiss@sgi.com>
Thu, 21 Dec 2006 02:54:59 +0000 (02:54 +0000)
Merge of master-melb:xfs-cmds:27794a by kenmcd.

  clone of test 031 using xfs_prepair instead of xfs_repair

149 [new file with mode: 0755]
149.out [new file with mode: 0644]
group

diff --git a/149 b/149
new file mode 100755 (executable)
index 0000000..3121c1f
--- /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/<TYPEOF> log/g;
+                       s/external log on \S+/<TYPEOF> 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 <<EOF
+DUMMY1
+0 0
+: root directory
+d--777 3 1
+lost+found d--755 3 1
+$
+EOF
+
+       while [ $count -lt $total ]
+       do
+               count=`expr $count + 1`
+               cat >>$tmp.proto <<EOF
+${count}_of_${total}_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ---755 3 1 /bin/true
+EOF
+       done
+       echo '$' >>$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 (file)
index 0000000..0c65cd9
--- /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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 <TYPEOF> 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 ad797ff7478f7d1a904d649566d88e07baae34c4..361861b0f47b170975cb96a984a0ff17e6c8947e 100644 (file)
--- a/group
+++ b/group
@@ -228,3 +228,4 @@ pattern         ajones@sgi.com
 146 dmapi auto
 147 dmapi auto
 148 repair auto
+149 repair auto