mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
Numerous changes to QA scripts allowing tests to run with external log/rt devices; also allow multiple mkfs/mount options at once now.
This commit is contained in:
@@ -57,15 +57,15 @@ trap "_cleanup" 0 1 2 3 15
|
||||
_populate_scratch()
|
||||
{
|
||||
echo "=== mkfs output ===" >>$seq.full
|
||||
mkfs_xfs $SCRATCH_DEV | tee -a $seq.full | _filter_mkfs 2>$tmp.mkfs
|
||||
_scratch_mkfs_xfs | tee -a $seq.full | _filter_mkfs 2>$tmp.mkfs
|
||||
source $tmp.mkfs
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
|
||||
_scratch_mount
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/foo count=200 bs=4096 >/dev/null 2>&1 &
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/goo count=400 bs=4096 >/dev/null 2>&1 &
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/moo count=800 bs=4096 >/dev/null 2>&1 &
|
||||
wait
|
||||
umount $SCRATCH_MNT # flush everything
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT # and then remount
|
||||
_scratch_mount # and then remount
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ _block_filter()
|
||||
_init()
|
||||
{
|
||||
echo "*** mkfs"
|
||||
if ! mkfs_xfs $SCRATCH_DEV >$tmp.out 2>&1
|
||||
if ! _scratch_mkfs_xfs >$tmp.out 2>&1
|
||||
then
|
||||
cat $tmp.out
|
||||
echo "failed to mkfs $SCRATCH_DEV"
|
||||
@@ -74,7 +74,7 @@ _init()
|
||||
fi
|
||||
|
||||
echo "*** mount"
|
||||
if ! mount $SCRATCH_DEV $SCRATCH_MNT -t xfs
|
||||
if ! _scratch_mount
|
||||
then
|
||||
echo "failed to mount $SCRATCH_DEV"
|
||||
exit 1
|
||||
|
||||
@@ -98,7 +98,7 @@ _do_test()
|
||||
status=1
|
||||
fi
|
||||
|
||||
_check_fs $TEST_DEV
|
||||
_check_test_fs
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ echo "brevity is wit..."
|
||||
|
||||
count=1000
|
||||
|
||||
_check_fs $TEST_DEV
|
||||
_check_test_fs
|
||||
|
||||
# the default
|
||||
|
||||
|
||||
@@ -76,8 +76,8 @@ _filter_dd()
|
||||
# real QA test starts here
|
||||
_require_scratch
|
||||
|
||||
mkfs_xfs -d size=50m $SCRATCH_DEV >/dev/null
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
|
||||
_scratch_mkfs_xfs -d size=50m >/dev/null
|
||||
_scratch_mount
|
||||
out=$SCRATCH_MNT/fillup.$$
|
||||
rm -f $seq.full
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ _init()
|
||||
echo "*** mkfs"
|
||||
force_opts="-dsize=50m -lsize=2097152"
|
||||
echo mkfs_xfs $force_opts $SCRATCH_DEV >>$seq.full
|
||||
mkfs_xfs $force_opts $SCRATCH_DEV | _filter_mkfs >/dev/null 2>$tmp.mkfs
|
||||
_scratch_mkfs_xfs $force_opts | _filter_mkfs >/dev/null 2>$tmp.mkfs
|
||||
source $tmp.mkfs
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ _log_traffic()
|
||||
out=$SCRATCH_MNT/$$.tmp
|
||||
|
||||
echo " *** mount"
|
||||
if ! mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
|
||||
if ! _scratch_mount
|
||||
then
|
||||
echo "failed to mount $SCRATCH_DEV"
|
||||
exit 1
|
||||
@@ -122,14 +122,14 @@ _log_traffic()
|
||||
|
||||
_log_size()
|
||||
{
|
||||
xfs_logprint -tb $SCRATCH_DEV | $AWK_PROG '
|
||||
/log device/ { print $7}
|
||||
_scratch_xfs_logprint -tb | $AWK_PROG '
|
||||
/log file: / || /log device: / { print $7}
|
||||
'
|
||||
}
|
||||
|
||||
_log_head()
|
||||
{
|
||||
xfs_logprint -tb $SCRATCH_DEV | $AWK_PROG '
|
||||
_scratch_xfs_logprint -tb | $AWK_PROG '
|
||||
/head:/ { print $5 }
|
||||
'
|
||||
}
|
||||
|
||||
@@ -53,15 +53,6 @@ _cleanup()
|
||||
}
|
||||
trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15
|
||||
|
||||
_clean_log()
|
||||
{
|
||||
echo "" >>$seq.full
|
||||
echo "*** xfs_logprint ***" >>$seq.full
|
||||
echo "" >>$seq.full
|
||||
xfs_logprint -tb $1 | tee -a $seq.full \
|
||||
| head | grep -q "<CLEAN>" || _fail "DIRTY LOG"
|
||||
}
|
||||
|
||||
# get standard environment, filters and checks
|
||||
. ./common.rc
|
||||
. ./common.filter
|
||||
@@ -76,9 +67,9 @@ rm -f $seq.full
|
||||
umount $SCRATCH_DEV >/dev/null 2>&1
|
||||
echo "*** MKFS ***" >>$seq.full
|
||||
echo "" >>$seq.full
|
||||
mkfs_xfs $SCRATCH_DEV >>$seq.full 2>&1 \
|
||||
_scratch_mkfs_xfs >>$seq.full 2>&1 \
|
||||
|| _fail "mkfs failed"
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$seq.full 2>&1 \
|
||||
_scratch_mount >>$seq.full 2>&1 \
|
||||
|| _fail "mount failed"
|
||||
|
||||
echo "*** test"
|
||||
@@ -88,17 +79,21 @@ do
|
||||
echo " *** test $l"
|
||||
src/fsstress -d $SCRATCH_MNT -n 1000 $FSSTRESS_AVOID >>$seq.full
|
||||
|
||||
mount -o remount,ro $SCRATCH_DEV \
|
||||
_scratch_mount -o remount,ro \
|
||||
|| _fail "remount ro failed"
|
||||
|
||||
_clean_log $SCRATCH_DEV
|
||||
echo "" >>$seq.full
|
||||
echo "*** xfs_logprint ***" >>$seq.full
|
||||
echo "" >>$seq.full
|
||||
_scratch_xfs_logprint -tb | tee -a $seq.full \
|
||||
| head | grep -q "<CLEAN>" || _fail "DIRTY LOG"
|
||||
|
||||
echo "" >>$seq.full
|
||||
echo "*** XFS_CHECK ***" >>$seq.full
|
||||
echo "" >>$seq.full
|
||||
xfs_check $SCRATCH_DEV >>$seq.full 2>&1 \
|
||||
|| _fail "xfs_check failed"
|
||||
mount -o remount,rw $SCRATCH_DEV \
|
||||
_scratch_mount -o remount,rw \
|
||||
|| _fail "remount rw failed"
|
||||
done
|
||||
|
||||
|
||||
@@ -65,18 +65,12 @@ _full()
|
||||
echo "" >>$seq.full
|
||||
}
|
||||
|
||||
_clean_log()
|
||||
{
|
||||
_full "clean_log : xfs_logprint"
|
||||
xfs_logprint -t $1 | tee -a $seq.full \
|
||||
| head | grep -q "<CLEAN>" || _fail "DIRTY LOG"
|
||||
}
|
||||
|
||||
_filter_logprint()
|
||||
{
|
||||
sed '
|
||||
s/data device: 0x[0-9a-f][0-9a-f]*/data device: <DEVICE>/;
|
||||
s/log device: 0x[0-9a-f][0-9a-f]*/log device: <DEVICE>/;
|
||||
s/log file: \".*\"/log device: <DEVICE>/;
|
||||
s/daddr: [0-9][0-9]*/daddr: <DADDR>/;
|
||||
s/length: [0-9][0-9]*/length: <LENGTH>/;
|
||||
s/length: [0-9][0-9]*/length: <LENGTH>/;
|
||||
@@ -103,13 +97,15 @@ _filter_logprint()
|
||||
|
||||
_check_log()
|
||||
{
|
||||
_clean_log $SCRATCH_DEV
|
||||
_full "clean_log : xfs_logprint"
|
||||
_scratch_xfs_logprint -t | tee -a $seq.full \
|
||||
| head | grep -q "<CLEAN>" || _fail "DIRTY LOG"
|
||||
echo "### xfs_logprint output ###"
|
||||
xfs_logprint $SCRATCH_DEV 2>&1 | _filter_logprint
|
||||
_scratch_xfs_logprint 2>&1 | _filter_logprint
|
||||
echo "### xfs_logprint -t -i -s 0 output ###"
|
||||
xfs_logprint -t -i -s 0 $SCRATCH_DEV 2>&1 | _filter_logprint
|
||||
_scratch_xfs_logprint -t -i -s 0 2>&1 | _filter_logprint
|
||||
echo "### xfs_logprint -t -b -s 0 output ###"
|
||||
xfs_logprint -t -b -s 0 $SCRATCH_DEV 2>&1 | _filter_logprint
|
||||
_scratch_xfs_logprint -t -b -s 0 2>&1 | _filter_logprint
|
||||
}
|
||||
|
||||
# real QA test starts here
|
||||
@@ -122,7 +118,7 @@ touch $seq.out
|
||||
umount $SCRATCH_DEV >/dev/null 2>&1
|
||||
|
||||
_full "mkfs"
|
||||
mkfs_xfs -lsize=2000b $SCRATCH_DEV | _filter_mkfs 2>$tmp.mkfs
|
||||
_scratch_mkfs_xfs -lsize=2000b | _filter_mkfs 2>$tmp.mkfs
|
||||
source $tmp.mkfs
|
||||
[ $dbsize -eq 4096 ] \
|
||||
|| _notrun "Logprint test, tailored to 4K blocks ($dbsize in use)"
|
||||
@@ -134,7 +130,7 @@ source $tmp.mkfs
|
||||
rm -f $seq.out $seq.full
|
||||
|
||||
_full " mount"
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$seq.full 2>&1 \
|
||||
_scratch_mount >>$seq.full 2>&1 \
|
||||
|| _fail "mount failed"
|
||||
|
||||
_setup_seq_out
|
||||
|
||||
@@ -130,15 +130,15 @@ _verify_fs()
|
||||
umount $SCRATCH_DEV >/dev/null 2>&1
|
||||
|
||||
_full "mkfs"
|
||||
mkfs_xfs $VERSION -p $protofile $SCRATCH_DEV >>$seqfull 2>&1 \
|
||||
_scratch_mkfs_xfs $VERSION -p $protofile >>$seqfull 2>&1 \
|
||||
|| _fail "mount failed"
|
||||
|
||||
echo "*** check FS"
|
||||
_check_fs $SCRATCH_DEV
|
||||
_check_scratch_fs
|
||||
|
||||
echo "*** mount FS"
|
||||
_full " mount"
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$seqfull 2>&1 \
|
||||
_scratch_mount >>$seqfull 2>&1 \
|
||||
|| _fail "mount failed"
|
||||
|
||||
echo "*** verify FS"
|
||||
@@ -153,7 +153,7 @@ _verify_fs()
|
||||
|| _fail "umount failed"
|
||||
|
||||
echo "*** check FS"
|
||||
_check_fs $SCRATCH_DEV
|
||||
_check_scratch_fs
|
||||
}
|
||||
|
||||
_verify_fs 1
|
||||
|
||||
@@ -94,11 +94,11 @@ rm -f $seq.full
|
||||
umount $SCRATCH_DEV >/dev/null 2>&1
|
||||
|
||||
echo "*** mkfs"
|
||||
mkfs_xfs $SCRATCH_DEV >/dev/null \
|
||||
_scratch_mkfs_xfs >/dev/null \
|
||||
|| _fail "mkfs failed"
|
||||
|
||||
echo "*** mount FS"
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >/dev/null \
|
||||
_scratch_mount >/dev/null \
|
||||
|| _fail "mount failed"
|
||||
|
||||
testfile=$SCRATCH_MNT/testfile
|
||||
|
||||
@@ -51,15 +51,6 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
|
||||
. ./common.rc
|
||||
. ./common.filter
|
||||
|
||||
mkfs_args=""
|
||||
logp_args=""
|
||||
if [ ! -z "$SCRATCH_LOGDEV" ] # test external log if possible
|
||||
then
|
||||
_require_logdev
|
||||
mkfs_args="-l logdev=$SCRATCH_LOGDEV,size=1200b"
|
||||
logp_args="-l $SCRATCH_LOGDEV"
|
||||
fi
|
||||
|
||||
_filter_logprint()
|
||||
{
|
||||
perl -ne '
|
||||
@@ -78,10 +69,10 @@ _filter_logprint()
|
||||
_require_scratch
|
||||
|
||||
echo
|
||||
mkfs_xfs $mkfs_args $SCRATCH_DEV | _filter_mkfs 2>/dev/null
|
||||
_scratch_mkfs_xfs | _filter_mkfs 2>/dev/null
|
||||
|
||||
echo
|
||||
xfs_logprint $logp_args $SCRATCH_DEV | _filter_logprint
|
||||
_scratch_xfs_logprint | _filter_logprint
|
||||
|
||||
status=0
|
||||
exit
|
||||
|
||||
@@ -80,12 +80,12 @@ DSIZE="-dsize=100m"
|
||||
# superblock (hanging around from earlier tests)...
|
||||
#
|
||||
|
||||
mkfs_xfs $DSIZE $SCRATCH_DEV >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $DSIZE >/dev/null 2>&1
|
||||
if [ $? -ne 0 ] # probably don't have a big enough scratch
|
||||
then
|
||||
_notrun "SCRATCH_DEV too small, results would be non-deterministic"
|
||||
else
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
|
||||
_scratch_mount
|
||||
src/feature -U $SCRATCH_DEV && \
|
||||
_notrun "Quota are enabled, test needs controlled sb recovery"
|
||||
src/feature -G $SCRATCH_DEV && \
|
||||
@@ -102,7 +102,7 @@ src/devzero -v -1 -n "$clear" $SCRATCH_DEV >/dev/null
|
||||
|
||||
# now kick off the real repair test...
|
||||
#
|
||||
mkfs_xfs $DSIZE $SCRATCH_DEV | _filter_mkfs 2>$tmp.mkfs
|
||||
_scratch_mkfs_xfs $DSIZE | _filter_mkfs 2>$tmp.mkfs
|
||||
source $tmp.mkfs
|
||||
_check_ag 0
|
||||
_check_ag -1
|
||||
|
||||
@@ -20,7 +20,7 @@ sb realtime bitmap inode INO inconsistent with calculated value INO
|
||||
resetting superblock realtime bitmap ino pointer to INO
|
||||
sb realtime summary inode INO inconsistent with calculated value INO
|
||||
resetting superblock realtime summary ino pointer to INO
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -49,7 +49,7 @@ done
|
||||
Corrupting agf 0 - setting bits to 0
|
||||
Wrote X.XXKb (value 0x0)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
bad magic # 0x0 for agf 0
|
||||
@@ -84,7 +84,7 @@ done
|
||||
Corrupting agi 0 - setting bits to 0
|
||||
Wrote X.XXKb (value 0x0)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
bad magic # 0x0 for agi 0
|
||||
@@ -120,7 +120,7 @@ done
|
||||
Corrupting agfl 0 - setting bits to 0
|
||||
Wrote X.XXKb (value 0x0)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -161,7 +161,7 @@ sb realtime bitmap inode INO inconsistent with calculated value INO
|
||||
resetting superblock realtime bitmap ino pointer to INO
|
||||
sb realtime summary inode INO inconsistent with calculated value INO
|
||||
resetting superblock realtime summary ino pointer to INO
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -192,7 +192,7 @@ done
|
||||
Corrupting agf 0 - setting bits to -1
|
||||
Wrote X.XXKb (value 0xffffffff)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
bad magic # 0xffffffff for agf 0
|
||||
@@ -231,7 +231,7 @@ done
|
||||
Corrupting agi 0 - setting bits to -1
|
||||
Wrote X.XXKb (value 0xffffffff)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
bad magic # 0xffffffff for agi 0
|
||||
@@ -267,7 +267,7 @@ done
|
||||
Corrupting agfl 0 - setting bits to -1
|
||||
Wrote X.XXKb (value 0xffffffff)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
|
||||
@@ -54,11 +54,11 @@ rm -f $seq.full
|
||||
|
||||
_check_repair()
|
||||
{
|
||||
xfs_repair $SCRATCH_DEV >$tmp.0 2>&1
|
||||
_scratch_xfs_repair >$tmp.0 2>&1
|
||||
for i in 1 2 3 4
|
||||
do
|
||||
echo "Repairing, iteration $i" | tee -a $seq.full
|
||||
xfs_repair $SCRATCH_DEV 2>&1 | tee -a $seq.full >$tmp.$i
|
||||
_scratch_xfs_repair 2>&1 | tee -a $seq.full >$tmp.$i
|
||||
diff $tmp.0 $tmp.$i >> $seq.full
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: repair round $i differs (see $seq.full)"
|
||||
@@ -67,6 +67,8 @@ _check_repair()
|
||||
# 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
|
||||
@@ -102,34 +104,34 @@ EOF
|
||||
#
|
||||
_require_scratch
|
||||
|
||||
MKFSV1="-p $tmp.proto -n version=1 $SCRATCH_DEV"
|
||||
MKFSV2="-p $tmp.proto -n version=2 $SCRATCH_DEV"
|
||||
MKFSV1="-p $tmp.proto -n version=1"
|
||||
MKFSV2="-p $tmp.proto -n version=2"
|
||||
|
||||
# sanity test - default + one root directory entry
|
||||
_create_proto 0
|
||||
echo "=== version 1, one entry"
|
||||
mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
|
||||
_check_repair
|
||||
echo "=== version 2, one entry (shortform)"
|
||||
mkfs_xfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
|
||||
_check_repair
|
||||
|
||||
# block-form root directory & repeat
|
||||
_create_proto 20
|
||||
echo "=== version 1, twenty entries"
|
||||
mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
|
||||
_check_repair
|
||||
echo "=== version 2, twenty entries (block form)"
|
||||
mkfs_xfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
|
||||
_check_repair
|
||||
|
||||
# leaf-form root directory & repeat
|
||||
_create_proto 1000
|
||||
echo "=== version 1, thousand entries"
|
||||
mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $MKFSV1 | _filter_mkfs >/dev/null 2>&1
|
||||
_check_repair
|
||||
echo "=== version 2, thousand entries (leaf form)"
|
||||
mkfs_xfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs $MKFSV2 | _filter_mkfs >/dev/null 2>&1
|
||||
_check_repair
|
||||
|
||||
# success, all done
|
||||
|
||||
@@ -2,7 +2,7 @@ QA output created by 031
|
||||
=== version 1, one entry
|
||||
Repairing, iteration 1
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -11,7 +11,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 2
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -20,7 +20,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 3
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -29,7 +29,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 4
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -40,7 +40,7 @@ done
|
||||
=== version 2, one entry (shortform)
|
||||
Repairing, iteration 1
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -49,7 +49,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 2
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -58,7 +58,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 3
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -67,7 +67,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 4
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -78,7 +78,7 @@ done
|
||||
=== version 1, twenty entries
|
||||
Repairing, iteration 1
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -87,7 +87,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 2
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -96,7 +96,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 3
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -105,7 +105,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 4
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -116,7 +116,7 @@ done
|
||||
=== version 2, twenty entries (block form)
|
||||
Repairing, iteration 1
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -126,7 +126,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 2
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -136,7 +136,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 3
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -146,7 +146,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 4
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -158,7 +158,7 @@ done
|
||||
=== version 1, thousand entries
|
||||
Repairing, iteration 1
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -167,7 +167,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 2
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -176,7 +176,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 3
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -185,7 +185,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 4
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -196,7 +196,7 @@ done
|
||||
=== version 2, thousand entries (leaf form)
|
||||
Repairing, iteration 1
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -206,7 +206,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 2
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -216,7 +216,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 3
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
@@ -226,7 +226,7 @@ Phase 7 - verify and correct link counts...
|
||||
done
|
||||
Repairing, iteration 4
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
Phase 3 - for each AG...
|
||||
Phase 4 - check for duplicate blocks...
|
||||
Phase 5 - rebuild AG headers and trees...
|
||||
|
||||
@@ -75,16 +75,16 @@ _check_root_inos()
|
||||
_require_scratch
|
||||
|
||||
# devzero blows away 512byte blocks, so make 512byte inodes (at least)
|
||||
mkfs_xfs $SCRATCH_DEV | _filter_mkfs 2>$tmp.mkfs
|
||||
_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs
|
||||
source $tmp.mkfs
|
||||
[ $isize -lt 512 ] && \
|
||||
mkfs_xfs -isize=512 $SCRATCH_DEV | _filter_mkfs >/dev/null 2>&1
|
||||
_scratch_mkfs_xfs -isize=512 | _filter_mkfs >/dev/null 2>&1
|
||||
|
||||
`xfs_db -r -c sb -c p $SCRATCH_DEV | grep 'ino = ' | \
|
||||
sed -e 's/ //g' -e 's/^/export /'`
|
||||
|
||||
# check we won't get any quota inodes setup on mount
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT
|
||||
_scratch_mount
|
||||
src/feature -U $SCRATCH_DEV && \
|
||||
_notrun "Quota are enabled, test needs controlled sb recovery"
|
||||
src/feature -G $SCRATCH_DEV && \
|
||||
|
||||
@@ -8,7 +8,7 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
|
||||
Corrupting root inode - setting bits to 0
|
||||
Wrote X.XXKb (value 0x0)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -44,7 +44,7 @@ done
|
||||
Corrupting rt bitmap inode - setting bits to 0
|
||||
Wrote X.XXKb (value 0x0)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -80,7 +80,7 @@ done
|
||||
Corrupting rt summary inode - setting bits to 0
|
||||
Wrote X.XXKb (value 0x0)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -116,7 +116,7 @@ done
|
||||
Corrupting root inode - setting bits to -1
|
||||
Wrote X.XXKb (value 0xffffffff)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -154,7 +154,7 @@ done
|
||||
Corrupting rt bitmap inode - setting bits to -1
|
||||
Wrote X.XXKb (value 0xffffffff)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
@@ -192,7 +192,7 @@ done
|
||||
Corrupting rt summary inode - setting bits to -1
|
||||
Wrote X.XXKb (value 0xffffffff)
|
||||
Phase 1 - find and verify superblock...
|
||||
Phase 2 - using internal log
|
||||
Phase 2 - using <TYPEOF> log
|
||||
- zero log...
|
||||
- scan filesystem freespace and inode maps...
|
||||
- found root inode chunk
|
||||
|
||||
@@ -67,14 +67,14 @@ rm -f $seq.full
|
||||
umount $SCRATCH_DEV >/dev/null 2>&1
|
||||
echo "*** MKFS ***" >>$seq.full
|
||||
echo "" >>$seq.full
|
||||
mkfs_xfs $SCRATCH_DEV >>$seq.full 2>&1 \
|
||||
_scratch_mkfs_xfs >>$seq.full 2>&1 \
|
||||
|| _fail "mkfs failed"
|
||||
mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$seq.full 2>&1 \
|
||||
_scratch_mount >>$seq.full 2>&1 \
|
||||
|| _fail "mount failed"
|
||||
|
||||
echo "*** test"
|
||||
|
||||
_check_fs $SCRATCH_DEV
|
||||
_check_scratch_fs
|
||||
|
||||
if ! touch $SCRATCH_MNT/fish
|
||||
then
|
||||
@@ -95,7 +95,7 @@ then
|
||||
fi
|
||||
|
||||
# pv 801241 causes corruption here (inode left in agi_unlinked list)
|
||||
_check_fs $SCRATCH_DEV
|
||||
_check_scratch_fs
|
||||
|
||||
echo "*** done"
|
||||
# happy exit
|
||||
|
||||
@@ -75,8 +75,8 @@ rm -f $seq.full
|
||||
#agsize=16
|
||||
agsize=32
|
||||
echo -n "Make $agsize megabyte filesystem on SCRATCH_DEV and mount... "
|
||||
_do "mkfs_xfs -dsize=${agsize}m,agcount=1 $SCRATCH_DEV"
|
||||
_do "mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
|
||||
_do "_scratch_mkfs_xfs -dsize=${agsize}m,agcount=1"
|
||||
_do "_scratch_mount"
|
||||
echo "done"
|
||||
|
||||
# full allocation group -> partial; partial -> expand partial + new partial;
|
||||
@@ -90,7 +90,7 @@ do
|
||||
_do "Grow filesystem to $size blocks" "xfs_growfs -D ${size} $SCRATCH_MNT"
|
||||
echo -n "Flush filesystem... "
|
||||
_do "umount $SCRATCH_MNT"
|
||||
_do "mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
|
||||
_do "_scratch_mount"
|
||||
echo "done"
|
||||
echo -n "Check files... "
|
||||
if ! _do "src/fill2fs_check $tmp.manifest"; then
|
||||
|
||||
@@ -100,13 +100,11 @@ _cull_files()
|
||||
# xfs_repair is going to need three to verify the superblock
|
||||
|
||||
rm -f $seq.full
|
||||
bmap_cmd="xfs_bmap -v"
|
||||
mnt_cmd="mount -t xfs $SCRATCH_DEV $SCRATCH_MNT"
|
||||
_do_die_on_error=message_only
|
||||
|
||||
echo -n "Make a 48 megabyte filesystem on SCRATCH_DEV and mount... "
|
||||
_do "mkfs_xfs -dsize=48m,agcount=3 $SCRATCH_DEV"
|
||||
_do "$mnt_cmd"
|
||||
_do "_scratch_mkfs_xfs -dsize=48m,agcount=3"
|
||||
_do "_scratch_mount"
|
||||
echo "done"
|
||||
|
||||
echo -n "Reserve 16 1Mb unfragmented regions... "
|
||||
@@ -114,7 +112,7 @@ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
do
|
||||
_do "dd if=/dev/zero of=$SCRATCH_MNT/hole$i bs=4096 count=256"
|
||||
_do "dd if=/dev/zero of=$SCRATCH_MNT/space$i bs=4096 count=1"
|
||||
_do "$bmap_cmd $SCRATCH_MNT/hole$i"
|
||||
_do "xfs_bmap -v $SCRATCH_MNT/hole$i"
|
||||
done
|
||||
echo "done"
|
||||
|
||||
@@ -125,7 +123,7 @@ _do "src/fill2fs $fill_options --dir=$SCRATCH_MNT/fill --list=- > $tmp.manifest"
|
||||
echo "done"
|
||||
# flush the filesystem - make sure there is no space "lost" to pre-allocation
|
||||
_do "umount $SCRATCH_MNT"
|
||||
_do "$mnt_cmd"
|
||||
_do "_scratch_mount"
|
||||
echo -n "Use up any further available space using dd... "
|
||||
_do "dd if=/dev/zero of=$SCRATCH_MNT/pad bs=4096"
|
||||
echo "done"
|
||||
@@ -135,13 +133,13 @@ _do "Delete every second file" "_cull_files"
|
||||
echo -n "Create one very large file... "
|
||||
_do "src/fill2 -d nbytes=16000000,file=$SCRATCH_MNT/fragmented"
|
||||
echo "done"
|
||||
_do "$bmap_cmd $SCRATCH_MNT/fragmented"
|
||||
_do "xfs_bmap -v $SCRATCH_MNT/fragmented"
|
||||
_do "sum $SCRATCH_MNT/fragmented >$tmp.sum1"
|
||||
_do "Remove other files" "rm -rf $SCRATCH_MNT/{pad,hole*}"
|
||||
|
||||
# defragment
|
||||
_do "Run xfs_fsr on filesystem" "xfs_fsr -v $SCRATCH_DEV"
|
||||
_do "$bmap_cmd $SCRATCH_MNT/fragmented"
|
||||
_do "xfs_bmap -v $SCRATCH_MNT/fragmented"
|
||||
_do "Check 4k files" "src/fill2fs_check $tmp.manifest"
|
||||
|
||||
# check
|
||||
@@ -153,7 +151,7 @@ if ! _do "diff $tmp.sum1 $tmp.sum2"; then
|
||||
status=1; exit
|
||||
fi
|
||||
echo "done"
|
||||
_do "Checking filesystem" "_check_fs $SCRATCH_DEV"
|
||||
_do "Checking filesystem" "_check_scratch_fs"
|
||||
|
||||
# success, all done
|
||||
echo "xfs_fsr tests passed."
|
||||
|
||||
@@ -70,7 +70,7 @@ _filter_logprint()
|
||||
_check_mount()
|
||||
{
|
||||
echo " *** mount (expect success)"
|
||||
if ! mount -t xfs -o logdev=$SCRATCH_LOGDEV $SCRATCH_DEV $SCRATCH_MNT
|
||||
if ! _scratch_mount
|
||||
then
|
||||
echo " !!! mount failed (expecting success)"
|
||||
status=1
|
||||
@@ -89,7 +89,7 @@ _check_mount()
|
||||
_check_no_mount()
|
||||
{
|
||||
echo " *** mount (expect failure)"
|
||||
if mount -t xfs -o logdev=$SCRATCH_LOGDEV $SCRATCH_DEV $SCRATCH_MNT >$tmp.err 2>&1
|
||||
if _scratch_mount >$tmp.err 2>&1
|
||||
then
|
||||
cat $tmp.err
|
||||
echo " !!! mount succeeded (expecting failure)"
|
||||
@@ -128,10 +128,7 @@ echo "*** mkfs"
|
||||
|
||||
lversion=1
|
||||
lsize=16777216
|
||||
ldev=$SCRATCH_LOGDEV
|
||||
MKFS_OPTIONS="-llogdev=$ldev,size=$lsize,version=$lversion"; export MKFS_OPTIONS
|
||||
|
||||
mkfs_xfs $logopts $SCRATCH_DEV | _filter_mkfs 2>/dev/null
|
||||
_scratch_mkfs_xfs -lsize=$lsize,version=$lversion | _filter_mkfs 2>/dev/null
|
||||
_check_mount
|
||||
_check_require_logdev
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user