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