mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
a6ce8c2c9e
Add some helper functions to require that we can reload a given module, and add a helper to actually do that. Refactor the existing users to use the generics. We need to hoist completely the behaviors of the old btrfs module helper because we need to confirm before starting the test that we actually can remove the module. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
183 lines
4.8 KiB
Bash
Executable File
183 lines
4.8 KiB
Bash
Executable File
#! /bin/bash
|
|
# 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
|
|
#
|
|
#---------------------------------------------------------------------
|
|
# Copyright (c) 2016 Oracle. All Rights Reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#---------------------------------------------------------------------
|
|
#
|
|
|
|
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 | 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
|