Files
apfstests/tests/btrfs/125
T
Filipe Manana 97b35b3db9 btrfs: fix computation of max fs size for multiple device fs tests
We were sorting numerical values with the 'sort' tool without telling it
that we are sorting numbers, giving us unexpected ordering. So just pass
the '-n' option to the 'sort' tool.

Example:

$ echo -e "11\n9\n20" | sort
11
20
9

$ echo -e "11\n9\n20" | sort -n
9
11
20

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2018-11-11 22:20:09 +08:00

168 lines
4.1 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2016 Oracle. All Rights Reserved.
#
# FS QA Test 125
#
# This test verify if the reconstructed data on the RAID5 is good.
# Steps:
# Initialize RAID5 with some data
#
# Re-mount RAID5 degraded with dev3 missing and write data
# Save md5sum checkpoint1
#
# Re-mount healthy RAID5
#
# Let balance fix the RAID5.
# Save md5sum checkpoint2
#
# Re-mount RAID5 degraded with dev1 as missing.
# Save md5sum checkpoint3
#
# Verify if all three checkpoints match
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/module
# remove previous $seqres.full before test
rm -f $seqres.full
# real QA test starts here
_supported_fs btrfs
_supported_os Linux
_require_scratch_dev_pool 3
_test_unmount
_require_loadable_fs_module "btrfs"
_scratch_dev_pool_get 3
dev1=`echo $SCRATCH_DEV_POOL | awk '{print $1}'`
dev2=`echo $SCRATCH_DEV_POOL | awk '{print $2}'`
dev3=`echo $SCRATCH_DEV_POOL | awk '{print $3}'`
echo dev1=$dev1 >> $seqres.full
echo dev2=$dev2 >> $seqres.full
echo dev3=$dev3 >> $seqres.full
# Balance won't be successful if filled too much
dev1_sz=`blockdev --getsize64 $dev1`
dev2_sz=`blockdev --getsize64 $dev2`
dev3_sz=`blockdev --getsize64 $dev3`
# get min of both.
max_fs_sz=`echo -e "$dev1_sz\n$dev2_sz\n$dev3_sz" | sort -n | head -1`
# Need disks with more than 2G
if [ $max_fs_sz -lt 2000000000 ]; then
_scratch_dev_pool_put
_test_mount
_notrun "Smallest dev size $max_fs_sz, Need at least 2G"
fi
max_fs_sz=100000000
bs="1M"
count=$(($max_fs_sz / 1000000))
#-------------normal init-------------------
echo >> $seqres.full
echo "max_fs_sz=$max_fs_sz count=$count" >> $seqres.full
echo "-----Initialize -----" >> $seqres.full
_scratch_pool_mkfs "-mraid5 -draid5" >> $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1
dd if=/dev/zero of="$SCRATCH_MNT"/tf1 bs=$bs count=1 \
>>$seqres.full 2>&1
_run_btrfs_util_prog filesystem show
_run_btrfs_util_prog filesystem df $SCRATCH_MNT
count=$(( count-- ))
#-------------degraded-init-------------------
echo >> $seqres.full
echo "-----Write degraded mount fill upto $max_fs_sz bytes-----" >> $seqres.full
echo
echo "Write data with degraded mount"
echo "unmount" >> $seqres.full
_scratch_unmount
echo "clean btrfs ko" >> $seqres.full
# un-scan the btrfs devices
_reload_fs_module "btrfs"
_mount -o degraded,device=$dev2 $dev1 $SCRATCH_MNT >>$seqres.full 2>&1
dd if=/dev/zero of="$SCRATCH_MNT"/tf2 bs=$bs count=$count \
>>$seqres.full 2>&1
_run_btrfs_util_prog filesystem show
_run_btrfs_util_prog filesystem df $SCRATCH_MNT
checkpoint1=`md5sum $SCRATCH_MNT/tf2`
echo $checkpoint1 >> $seqres.full 2>&1
#-------------balance-------------------
echo >> $seqres.full
echo "-----Mount normal-----" >> $seqres.full
echo
echo "Mount normal and balance"
_scratch_unmount
_run_btrfs_util_prog device scan
_scratch_mount >> $seqres.full 2>&1
echo >> $seqres.full
_run_btrfs_util_prog balance start ${SCRATCH_MNT}
_run_btrfs_util_prog filesystem show
_run_btrfs_util_prog filesystem df ${SCRATCH_MNT}
checkpoint2=`md5sum $SCRATCH_MNT/tf2`
echo $checkpoint2 >> $seqres.full 2>&1
#-------------degraded-mount-------------------
echo >> $seqres.full
echo "-----Mount degraded with dev1 missing-----" >> $seqres.full
echo
echo "Mount degraded but with other dev"
_scratch_unmount
# un-scan the btrfs devices
_reload_fs_module "btrfs"
_mount -o degraded,device=${dev2} $dev3 $SCRATCH_MNT >>$seqres.full 2>&1
_run_btrfs_util_prog filesystem show
_run_btrfs_util_prog filesystem df $SCRATCH_MNT
checkpoint3=`md5sum $SCRATCH_MNT/tf2`
echo $checkpoint3 >> $seqres.full 2>&1
if [ "$checkpoint1" != "$checkpoint2" ]; then
echo $checkpoint1
echo $checkpoint2
echo "Inital sum does not match with after balance"
fi
if [ "$checkpoint1" != "$checkpoint3" ]; then
echo $checkpoint1
echo $checkpoint3
echo "Inital sum does not match with data on dev2 written by balance"
fi
$UMOUNT_PROG $dev2
_scratch_dev_pool_put
_test_mount
status=0
exit