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