15711d393Sloli#!/bin/ksh -p 25711d393Sloli# 35711d393Sloli# CDDL HEADER START 45711d393Sloli# 55711d393Sloli# The contents of this file are subject to the terms of the 65711d393Sloli# Common Development and Distribution License (the "License"). 75711d393Sloli# You may not use this file except in compliance with the License. 85711d393Sloli# 95711d393Sloli# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 105711d393Sloli# or http://www.opensolaris.org/os/licensing. 115711d393Sloli# See the License for the specific language governing permissions 125711d393Sloli# and limitations under the License. 135711d393Sloli# 145711d393Sloli# When distributing Covered Code, include this CDDL HEADER in each 155711d393Sloli# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 165711d393Sloli# If applicable, add the following below this CDDL HEADER, with the 175711d393Sloli# fields enclosed by brackets "[]" replaced with your own identifying 185711d393Sloli# information: Portions Copyright [yyyy] [name of copyright owner] 195711d393Sloli# 205711d393Sloli# CDDL HEADER END 215711d393Sloli# 225711d393Sloli 235711d393Sloli# 245711d393Sloli# Copyright 2017, loli10K. All rights reserved. 255711d393Sloli# 265711d393Sloli 275711d393Sloli. $STF_SUITE/include/libtest.shlib 285711d393Sloli. $STF_SUITE/tests/functional/cli_root/zpool_create/zpool_create.shlib 295711d393Sloli 305711d393Sloli# 315711d393Sloli# DESCRIPTION: 325711d393Sloli# 'zpool replace -o ashift=<n> ...' should work with different ashift 335711d393Sloli# values. 345711d393Sloli# 355711d393Sloli# STRATEGY: 365711d393Sloli# 1. Create various pools with different ashift values. 375711d393Sloli# 2. Verify 'replace -o ashift=<n>' works only with allowed values. 385711d393Sloli# 395711d393Sloli 405711d393Sloliverify_runnable "global" 415711d393Sloli 425711d393Slolifunction cleanup 435711d393Sloli{ 445711d393Sloli poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1 455711d393Sloli log_must rm -f $disk1 465711d393Sloli log_must rm -f $disk2 475711d393Sloli} 485711d393Sloli 495711d393Slolilog_assert "zpool replace -o ashift=<n>' works with different ashift values" 505711d393Slolilog_onexit cleanup 515711d393Sloli 525711d393Slolidisk1=$TEST_BASE_DIR/$FILEDISK0 535711d393Slolidisk2=$TEST_BASE_DIR/$FILEDISK1 54*0ac89930SBrian Behlendorflog_must truncate -s $SIZE $disk1 55*0ac89930SBrian Behlendorflog_must truncate -s $SIZE $disk2 565711d393Sloli 575711d393Slolitypeset ashifts=("9" "10" "11" "12" "13" "14" "15" "16") 585711d393Slolifor ashift in ${ashifts[@]} 595711d393Slolido 605711d393Sloli for cmdval in ${ashifts[@]} 615711d393Sloli do 625711d393Sloli log_must zpool create -o ashift=$ashift $TESTPOOL1 $disk1 635711d393Sloli verify_ashift $disk1 $ashift 645711d393Sloli if [[ $? -ne 0 ]] 655711d393Sloli then 665711d393Sloli log_fail "Pool was created without setting ashift " \ 675711d393Sloli "value to $ashift" 685711d393Sloli fi 695711d393Sloli # ashift_of(replacing_disk) <= ashift_of(existing_vdev) 705711d393Sloli if [[ $cmdval -le $ashift ]] 715711d393Sloli then 725711d393Sloli log_must zpool replace -o ashift=$cmdval $TESTPOOL1 \ 735711d393Sloli $disk1 $disk2 745711d393Sloli verify_ashift $disk2 $ashift 755711d393Sloli if [[ $? -ne 0 ]] 765711d393Sloli then 775711d393Sloli log_fail "Device was replaced without " \ 785711d393Sloli "setting ashift value to $ashift" 795711d393Sloli fi 805711d393Sloli wait_replacing $TESTPOOL1 815711d393Sloli else 825711d393Sloli log_mustnot zpool replace -o ashift=$cmdval $TESTPOOL1 \ 835711d393Sloli $disk1 $disk2 845711d393Sloli fi 855711d393Sloli # clean things for the next run 865711d393Sloli log_must zpool destroy $TESTPOOL1 87*0ac89930SBrian Behlendorf log_must zpool labelclear $disk1 88*0ac89930SBrian Behlendorf log_must zpool labelclear $disk2 895711d393Sloli done 905711d393Slolidone 915711d393Sloli 925711d393Slolitypeset badvals=("off" "on" "1" "8" "17" "1b" "ff" "-") 935711d393Slolifor badval in ${badvals[@]} 945711d393Slolido 955711d393Sloli log_must zpool create $TESTPOOL1 $disk1 965711d393Sloli log_mustnot zpool replace -o ashift=$badval $TESTPOOL1 $disk1 $disk2 975711d393Sloli log_must zpool destroy $TESTPOOL1 985711d393Sloli log_must zpool labelclear $disk1 995711d393Sloli log_mustnot zpool labelclear $disk2 1005711d393Slolidone 1015711d393Sloli 1025711d393Slolilog_pass "zpool replace -o ashift=<n>' works with different ashift values" 103