mirror_zfs/tests/zfs-tests/tests/functional/redundancy/redundancy_draid3.ksh
Brian Behlendorf 50d9ff93df
ZTS: Improve redundancy test scripts
- Add additional logging to provide more information about why the
  test failed.  This including logging more of the individual commands
  and the contents and differences of the record files on failure.

- Updated get_vdevs() to properly exclude all top-level vdevs
  including raidz3 and draid[1-3].

- Replaced gnudd with dd.  This is the only remaining place in the
  test suite gnudd is used and it shouldn't be needed.

- The refill_test_env function expects the pool as the first argument
  but never sets the pool variable.

- Only fill the test pools to 50% of capacity instead of 75% to help
  speed up the tests.

- Fix replace_missing_devs() calculation, MINDEVSIZE should be
  MINVDEVSIZE.

- Fix damage_devs() so it overwrites almost all of the device so
  we're guaranteed to damage filesystem blocks.

- redundancy_stripe.ksh should not use log_mustnot to check if the
  pool is healthy since the return value may be misinterpreted.
  Just perform a normal conditional check and log the failure.

Reviewed-by: George Melikov <mail@gmelikov.ru>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #11906
2021-04-18 21:58:36 -07:00

86 lines
2.3 KiB
Bash
Executable File

#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#
# Copyright (c) 2013 by Delphix. All rights reserved.
# Copyright (c) 2020 by Lawrence Livermore National Security, LLC.
#
. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/redundancy/redundancy.kshlib
#
# DESCRIPTION:
# A draid3 pool can withstand 3 devices are failing or missing.
#
# STRATEGY:
# 1. Create N(>5,<6) virtual disk files.
# 2. Create draid3 pool based on the virtual disk files.
# 3. Fill the filesystem with directories and files.
# 4. Record all the files and directories checksum information.
# 5. Damaged at most three of the virtual disk files.
# 6. Verify the data is correct to prove draid3 can withstand 3 devices
# are failing.
#
verify_runnable "global"
log_assert "Verify draid3 pool can withstand three devices failing."
log_onexit cleanup
typeset -i cnt=$(random_int_between 5 6)
setup_test_env $TESTPOOL draid3 $cnt
#
# Inject data corruption errors for draid3 pool
#
for i in 1 2 3; do
damage_devs $TESTPOOL $i "label"
log_must is_data_valid $TESTPOOL
log_must clear_errors $TESTPOOL
done
#
# Inject bad devices errors for draid3 pool
#
for i in 1 2 3; do
damage_devs $TESTPOOL $i
log_must is_data_valid $TESTPOOL
log_must recover_bad_missing_devs $TESTPOOL $i
done
#
# Inject missing device errors for draid3 pool
#
for i in 1 2 3; do
remove_devs $TESTPOOL $i
log_must is_data_valid $TESTPOOL
log_must recover_bad_missing_devs $TESTPOOL $i
done
log_pass "draid3 pool can withstand three devices failing passed."