1*f38cb554SJohn Wren Kennedy#!/bin/ksh -p 2*f38cb554SJohn Wren Kennedy# 3*f38cb554SJohn Wren Kennedy# CDDL HEADER START 4*f38cb554SJohn Wren Kennedy# 5*f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the 6*f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License"). 7*f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License. 8*f38cb554SJohn Wren Kennedy# 9*f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing. 11*f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions 12*f38cb554SJohn Wren Kennedy# and limitations under the License. 13*f38cb554SJohn Wren Kennedy# 14*f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each 15*f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the 17*f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying 18*f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner] 19*f38cb554SJohn Wren Kennedy# 20*f38cb554SJohn Wren Kennedy# CDDL HEADER END 21*f38cb554SJohn Wren Kennedy# 22*f38cb554SJohn Wren Kennedy 23*f38cb554SJohn Wren Kennedy# 24*f38cb554SJohn Wren Kennedy# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 25*f38cb554SJohn Wren Kennedy# Use is subject to license terms. 26*f38cb554SJohn Wren Kennedy# 27*f38cb554SJohn Wren Kennedy 28*f38cb554SJohn Wren Kennedy# 29*f38cb554SJohn Wren Kennedy# Copyright (c) 2013 by Delphix. All rights reserved. 30*f38cb554SJohn Wren Kennedy# 31*f38cb554SJohn Wren Kennedy 32*f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/redundancy/redundancy.kshlib 33*f38cb554SJohn Wren Kennedy 34*f38cb554SJohn Wren Kennedy# 35*f38cb554SJohn Wren Kennedy# DESCRIPTION: 36*f38cb554SJohn Wren Kennedy# A mirrored pool can withstand N-1 device are failing or missing. 37*f38cb554SJohn Wren Kennedy# 38*f38cb554SJohn Wren Kennedy# STRATEGY: 39*f38cb554SJohn Wren Kennedy# 1. Create N(>2,<5) virtual disk files. 40*f38cb554SJohn Wren Kennedy# 2. Create mirror pool based on the virtual disk files. 41*f38cb554SJohn Wren Kennedy# 3. Fill the filesystem with directories and files. 42*f38cb554SJohn Wren Kennedy# 4. Record all the files and directories checksum information. 43*f38cb554SJohn Wren Kennedy# 5. Damaged at most N-1 of the virtual disk files. 44*f38cb554SJohn Wren Kennedy# 6. Verify the data are correct to prove mirror can withstand N-1 devices 45*f38cb554SJohn Wren Kennedy# are failing. 46*f38cb554SJohn Wren Kennedy# 47*f38cb554SJohn Wren Kennedy 48*f38cb554SJohn Wren Kennedyverify_runnable "global" 49*f38cb554SJohn Wren Kennedy 50*f38cb554SJohn Wren Kennedylog_assert "Verify mirrored pool can withstand N-1 devices are failing or missing." 51*f38cb554SJohn Wren Kennedylog_onexit cleanup 52*f38cb554SJohn Wren Kennedy 53*f38cb554SJohn Wren Kennedytypeset -i cnt=$(random 2 5) 54*f38cb554SJohn Wren Kennedysetup_test_env $TESTPOOL mirror $cnt 55*f38cb554SJohn Wren Kennedy 56*f38cb554SJohn Wren Kennedytypeset -i i=1 57*f38cb554SJohn Wren Kennedy 58*f38cb554SJohn Wren Kennedy# 59*f38cb554SJohn Wren Kennedy# Inject data corruption errors for mirrored pool 60*f38cb554SJohn Wren Kennedy# 61*f38cb554SJohn Wren Kennedywhile (( i < cnt )); do 62*f38cb554SJohn Wren Kennedy damage_devs $TESTPOOL $i "label" 63*f38cb554SJohn Wren Kennedy log_must is_data_valid $TESTPOOL 64*f38cb554SJohn Wren Kennedy log_must clear_errors $TESTPOOL 65*f38cb554SJohn Wren Kennedy 66*f38cb554SJohn Wren Kennedy (( i +=1 )) 67*f38cb554SJohn Wren Kennedydone 68*f38cb554SJohn Wren Kennedy 69*f38cb554SJohn Wren Kennedy# 70*f38cb554SJohn Wren Kennedy# Inject bad devices errors for mirrored pool 71*f38cb554SJohn Wren Kennedy# 72*f38cb554SJohn Wren Kennedyi=1 73*f38cb554SJohn Wren Kennedywhile (( i < cnt )); do 74*f38cb554SJohn Wren Kennedy damage_devs $TESTPOOL $i 75*f38cb554SJohn Wren Kennedy log_must is_data_valid $TESTPOOL 76*f38cb554SJohn Wren Kennedy log_must recover_bad_missing_devs $TESTPOOL $i 77*f38cb554SJohn Wren Kennedy 78*f38cb554SJohn Wren Kennedy (( i +=1 )) 79*f38cb554SJohn Wren Kennedydone 80*f38cb554SJohn Wren Kennedy 81*f38cb554SJohn Wren Kennedy# 82*f38cb554SJohn Wren Kennedy# Inject missing device errors for mirrored pool 83*f38cb554SJohn Wren Kennedy# 84*f38cb554SJohn Wren Kennedyi=1 85*f38cb554SJohn Wren Kennedywhile (( i < cnt )); do 86*f38cb554SJohn Wren Kennedy remove_devs $TESTPOOL $i 87*f38cb554SJohn Wren Kennedy log_must is_data_valid $TESTPOOL 88*f38cb554SJohn Wren Kennedy log_must recover_bad_missing_devs $TESTPOOL $i 89*f38cb554SJohn Wren Kennedy 90*f38cb554SJohn Wren Kennedy (( i +=1 )) 91*f38cb554SJohn Wren Kennedydone 92*f38cb554SJohn Wren Kennedy 93*f38cb554SJohn Wren Kennedylog_pass "Mirrored pool can withstand N-1 devices failing as expected." 94