Files
apfstests/tests/btrfs/151
T
Liu Bo f711dfad6c btrfs: test if device delete ends up with losing raid profile
Currently running 'btrfs device delete' can end up with losing data
raid profile (if any), this test is to reproduce the problem.

The fix is
     "Btrfs: avoid losing data raid profile when deleting a device"

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-10-22 19:16:56 +08:00

81 lines
2.1 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test 151
#
# Test if it's losing data chunk's raid profile after 'btrfs device
# remove'.
#
# The fix is
# Btrfs: avoid losing data raid profile when deleting a device
#
#-----------------------------------------------------------------------
# Copyright (c) 2017 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
# remove previous $seqres.full before test
rm -f $seqres.full
# real QA test starts here
# Modify as appropriate.
_supported_fs btrfs
_supported_os Linux
_require_scratch
_require_scratch_dev_pool 3
_require_btrfs_dev_del_by_devid
# We need exactly 3 disks to form a fixed stripe layout for this test.
_scratch_dev_pool_get 3
# create raid1 for data
_scratch_pool_mkfs "-d raid1 -b 1G" >> $seqres.full 2>&1
# we need an empty data chunk, so nospace_cache is required.
_scratch_mount -onospace_cache
# if data chunk is empty, 'btrfs device remove' can change raid1 to
# single.
$BTRFS_UTIL_PROG device delete 2 $SCRATCH_MNT >> $seqres.full 2>&1
# save btrfs filesystem df output for debug purpose
$BTRFS_UTIL_PROG filesystem df $SCRATCH_MNT 2>&1 | \
tee -a $seqres.full | $AWK_PROG -F ':' '/Data,/ {print $1}'
_scratch_dev_pool_put
# success, all done
status=0
exit