1eda14cbcSMatt Macy#!/bin/ksh -p 2eda14cbcSMatt Macy 3eda14cbcSMatt Macy# 4eda14cbcSMatt Macy# This file and its contents are supplied under the terms of the 5eda14cbcSMatt Macy# Common Development and Distribution License ("CDDL"), version 1.0. 6eda14cbcSMatt Macy# You may only use this file in accordance with the terms of version 7eda14cbcSMatt Macy# 1.0 of the CDDL. 8eda14cbcSMatt Macy# 9eda14cbcSMatt Macy# A full copy of the text of the CDDL should have accompanied this 10eda14cbcSMatt Macy# source. A copy of the CDDL is also available via the Internet at 11eda14cbcSMatt Macy# http://www.illumos.org/license/CDDL. 12eda14cbcSMatt Macy# 13eda14cbcSMatt Macy 14eda14cbcSMatt Macy# 15eda14cbcSMatt Macy# Copyright (c) 2016 by Delphix. All rights reserved. 16eda14cbcSMatt Macy# 17eda14cbcSMatt Macy 18eda14cbcSMatt Macy. $STF_SUITE/tests/functional/cli_root/zpool_import/zpool_import.kshlib 19eda14cbcSMatt Macy 20eda14cbcSMatt Macy# 21eda14cbcSMatt Macy# DESCRIPTION: 22eda14cbcSMatt Macy# A pool should be importable even if device paths have changed. 23eda14cbcSMatt Macy# 24eda14cbcSMatt Macy# STRATEGY: 25eda14cbcSMatt Macy# 1. Create a pool. 26eda14cbcSMatt Macy# 2. Export the pool. 27eda14cbcSMatt Macy# 3. Change the paths of some of the devices. 28eda14cbcSMatt Macy# 4. Verify that we can import the pool in a healthy state. 29eda14cbcSMatt Macy# 30eda14cbcSMatt Macy 31eda14cbcSMatt Macyverify_runnable "global" 32eda14cbcSMatt Macy 33eda14cbcSMatt Macylog_onexit cleanup 34eda14cbcSMatt Macy 35eda14cbcSMatt Macyfunction test_new_paths 36eda14cbcSMatt Macy{ 37eda14cbcSMatt Macy typeset poolcreate="$1" 38eda14cbcSMatt Macy typeset pathstochange="$2" 39eda14cbcSMatt Macy 40eda14cbcSMatt Macy log_note "$0: pool '$poolcreate', changing paths of $pathstochange." 41eda14cbcSMatt Macy 42eda14cbcSMatt Macy log_must zpool create $TESTPOOL1 $poolcreate 43eda14cbcSMatt Macy 44eda14cbcSMatt Macy log_must zpool export $TESTPOOL1 45eda14cbcSMatt Macy 46eda14cbcSMatt Macy for dev in $pathstochange; do 47eda14cbcSMatt Macy log_must mv $dev "${dev}_new" 48eda14cbcSMatt Macy done 49eda14cbcSMatt Macy 50eda14cbcSMatt Macy log_must zpool import -d $DEVICE_DIR $TESTPOOL1 51eda14cbcSMatt Macy log_must check_pool_healthy $TESTPOOL1 52eda14cbcSMatt Macy 53eda14cbcSMatt Macy # Cleanup 54eda14cbcSMatt Macy log_must zpool destroy $TESTPOOL1 55eda14cbcSMatt Macy for dev in $pathstochange; do 56eda14cbcSMatt Macy log_must mv "${dev}_new" $dev 57eda14cbcSMatt Macy done 58eda14cbcSMatt Macy 59eda14cbcSMatt Macy log_note "" 60eda14cbcSMatt Macy} 61eda14cbcSMatt Macy 62eda14cbcSMatt Macyfunction test_swap_paths 63eda14cbcSMatt Macy{ 64eda14cbcSMatt Macy typeset poolcreate="$1" 65eda14cbcSMatt Macy typeset pathtoswap1="$2" 66eda14cbcSMatt Macy typeset pathtoswap2="$3" 67eda14cbcSMatt Macy 68eda14cbcSMatt Macy log_note "$0: pool '$poolcreate', swapping paths of $pathtoswap1" \ 69eda14cbcSMatt Macy "and $pathtoswap2." 70eda14cbcSMatt Macy 71eda14cbcSMatt Macy log_must zpool create $TESTPOOL1 $poolcreate 72eda14cbcSMatt Macy 73eda14cbcSMatt Macy log_must zpool export $TESTPOOL1 74eda14cbcSMatt Macy 75eda14cbcSMatt Macy log_must mv $pathtoswap2 "$pathtoswap2.tmp" 76eda14cbcSMatt Macy log_must mv $pathtoswap1 "$pathtoswap2" 77eda14cbcSMatt Macy log_must mv "$pathtoswap2.tmp" $pathtoswap1 78eda14cbcSMatt Macy 79eda14cbcSMatt Macy log_must zpool import -d $DEVICE_DIR $TESTPOOL1 80eda14cbcSMatt Macy log_must check_pool_healthy $TESTPOOL1 81eda14cbcSMatt Macy 82eda14cbcSMatt Macy # Cleanup 83eda14cbcSMatt Macy log_must zpool destroy $TESTPOOL1 84eda14cbcSMatt Macy 85eda14cbcSMatt Macy log_note "" 86eda14cbcSMatt Macy} 87eda14cbcSMatt Macy 88eda14cbcSMatt Macytest_new_paths "$VDEV0 $VDEV1" "$VDEV0 $VDEV1" 89eda14cbcSMatt Macytest_new_paths "mirror $VDEV0 $VDEV1" "$VDEV0 $VDEV1" 90eda14cbcSMatt Macytest_new_paths "$VDEV0 log $VDEV1" "$VDEV1" 91eda14cbcSMatt Macytest_new_paths "raidz $VDEV0 $VDEV1 $VDEV2" "$VDEV1" 927877fdebSMatt Macytest_new_paths "draid $VDEV0 $VDEV1 $VDEV2" "$VDEV1" 93eda14cbcSMatt Macy 94eda14cbcSMatt Macytest_swap_paths "$VDEV0 $VDEV1" "$VDEV0" "$VDEV1" 95eda14cbcSMatt Macytest_swap_paths "raidz $VDEV0 $VDEV1 $VDEV2" "$VDEV0" "$VDEV1" 967877fdebSMatt Macytest_swap_paths "draid $VDEV0 $VDEV1 $VDEV2" "$VDEV0" "$VDEV1" 97eda14cbcSMatt Macytest_swap_paths "mirror $VDEV0 $VDEV1 mirror $VDEV2 $VDEV3" \ 98eda14cbcSMatt Macy "$VDEV0" "$VDEV2" 99eda14cbcSMatt Macy 100eda14cbcSMatt Macylog_pass "zpool import succeeded after changing device paths." 101