1d583b39bSJohn Wren Kennedy#!/bin/ksh -p 2d583b39bSJohn Wren Kennedy# 3d583b39bSJohn Wren Kennedy# CDDL HEADER START 4d583b39bSJohn Wren Kennedy# 5d583b39bSJohn Wren Kennedy# The contents of this file are subject to the terms of the 6d583b39bSJohn Wren Kennedy# Common Development and Distribution License (the "License"). 7d583b39bSJohn Wren Kennedy# You may not use this file except in compliance with the License. 8d583b39bSJohn Wren Kennedy# 9d583b39bSJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10d583b39bSJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing. 11d583b39bSJohn Wren Kennedy# See the License for the specific language governing permissions 12d583b39bSJohn Wren Kennedy# and limitations under the License. 13d583b39bSJohn Wren Kennedy# 14d583b39bSJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each 15d583b39bSJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16d583b39bSJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the 17d583b39bSJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying 18d583b39bSJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner] 19d583b39bSJohn Wren Kennedy# 20d583b39bSJohn Wren Kennedy# CDDL HEADER END 21d583b39bSJohn Wren Kennedy# 22d583b39bSJohn Wren Kennedy 23d583b39bSJohn Wren Kennedy# 24d583b39bSJohn Wren Kennedy# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 25d583b39bSJohn Wren Kennedy# Use is subject to license terms. 26d583b39bSJohn Wren Kennedy# 27d583b39bSJohn Wren Kennedy 28d583b39bSJohn Wren Kennedy# 29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved. 30d583b39bSJohn Wren Kennedy# 31d583b39bSJohn Wren Kennedy 32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib 33d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.kshlib 34d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zpool_import/zpool_import.cfg 35d583b39bSJohn Wren Kennedy 36d583b39bSJohn Wren Kennedy# 37d583b39bSJohn Wren Kennedy# DESCRIPTION: 38d583b39bSJohn Wren Kennedy# Once a pool has been exported, it should be recreated after a 39d583b39bSJohn Wren Kennedy# successful import, all the sub-filesystems within it should all be restored, 40d583b39bSJohn Wren Kennedy# include mount & share status. Verify that is true. 41d583b39bSJohn Wren Kennedy# 42d583b39bSJohn Wren Kennedy# STRATEGY: 43d583b39bSJohn Wren Kennedy# 1. Create the test pool and hierarchical filesystems. 44d583b39bSJohn Wren Kennedy# 2. Export the test pool, or destroy the test pool, 45d583b39bSJohn Wren Kennedy# depend on testing import [-Df]. 46d583b39bSJohn Wren Kennedy# 3. Import it using the various combinations. 47d583b39bSJohn Wren Kennedy# - Regular import 48d583b39bSJohn Wren Kennedy# - Alternate Root Specified 49d583b39bSJohn Wren Kennedy# 4. Verify the mount & share status is restored. 50d583b39bSJohn Wren Kennedy# 51d583b39bSJohn Wren Kennedy 52d583b39bSJohn Wren Kennedyverify_runnable "global" 53d583b39bSJohn Wren Kennedy 54d583b39bSJohn Wren Kennedyset -A pools "$TESTPOOL" "$TESTPOOL1" 55d583b39bSJohn Wren Kennedyset -A devs "" "-d $DEVICE_DIR" 56d583b39bSJohn Wren Kennedyset -A options "" "-R $ALTER_ROOT" 57d583b39bSJohn Wren Kennedyset -A mtpts "$TESTDIR" "$TESTDIR1" 58d583b39bSJohn Wren Kennedy 59d583b39bSJohn Wren Kennedy 60d583b39bSJohn Wren Kennedyfunction cleanup 61d583b39bSJohn Wren Kennedy{ 62d583b39bSJohn Wren Kennedy typeset -i i=0 63d583b39bSJohn Wren Kennedy 64d583b39bSJohn Wren Kennedy while ((i < ${#pools[*]})); do 65d583b39bSJohn Wren Kennedy if poolexists ${pools[i]}; then 66*1d32ba66SJohn Wren Kennedy log_must zpool export ${pools[i]} 67d583b39bSJohn Wren Kennedy log_note "Try to import ${devs[i]} ${pools[i]}" 68*1d32ba66SJohn Wren Kennedy zpool import ${devs[i]} ${pools[i]} 69d583b39bSJohn Wren Kennedy else 70d583b39bSJohn Wren Kennedy log_note "Try to import $option ${devs[i]} ${pools[i]}" 71*1d32ba66SJohn Wren Kennedy zpool import $option ${devs[i]} ${pools[i]} 72d583b39bSJohn Wren Kennedy fi 73d583b39bSJohn Wren Kennedy 74d583b39bSJohn Wren Kennedy if poolexists ${pools[i]}; then 75d583b39bSJohn Wren Kennedy is_shared ${pools[i]} && \ 76*1d32ba66SJohn Wren Kennedy log_must zfs set sharenfs=off ${pools[i]} 77d583b39bSJohn Wren Kennedy 78d583b39bSJohn Wren Kennedy ismounted "${pools[i]}/$TESTFS" || \ 79*1d32ba66SJohn Wren Kennedy log_must zfs mount ${pools[i]}/$TESTFS 80d583b39bSJohn Wren Kennedy fi 81d583b39bSJohn Wren Kennedy 82d583b39bSJohn Wren Kennedy ((i = i + 1)) 83d583b39bSJohn Wren Kennedy done 84d583b39bSJohn Wren Kennedy 85d583b39bSJohn Wren Kennedy destroy_pool $TESTPOOL1 86d583b39bSJohn Wren Kennedy 87d583b39bSJohn Wren Kennedy if datasetexists $TESTPOOL/$TESTFS; then 88*1d32ba66SJohn Wren Kennedy log_must zfs destroy -Rf $TESTPOOL/$TESTFS 89d583b39bSJohn Wren Kennedy fi 90*1d32ba66SJohn Wren Kennedy log_must zfs create $TESTPOOL/$TESTFS 91*1d32ba66SJohn Wren Kennedy log_must zfs set mountpoint=$TESTDIR $TESTPOOL/$TESTFS 92d583b39bSJohn Wren Kennedy 93d583b39bSJohn Wren Kennedy [[ -d $ALTER_ROOT ]] && \ 94*1d32ba66SJohn Wren Kennedy log_must rm -rf $ALTER_ROOT 95d583b39bSJohn Wren Kennedy} 96d583b39bSJohn Wren Kennedy 97d583b39bSJohn Wren Kennedylog_onexit cleanup 98d583b39bSJohn Wren Kennedy 99d583b39bSJohn Wren Kennedylog_assert "Verify all mount & share status of sub-filesystems within a pool \ 100d583b39bSJohn Wren Kennedy can be restored after import [-Df]." 101d583b39bSJohn Wren Kennedy 102d583b39bSJohn Wren Kennedysetup_filesystem "$DEVICE_FILES" $TESTPOOL1 $TESTFS $TESTDIR1 103d583b39bSJohn Wren Kennedy# create a heirarchy of filesystem 104d583b39bSJohn Wren Kennedyfor pool in ${pools[@]} ; do 105*1d32ba66SJohn Wren Kennedy log_must zfs create $pool/$TESTFS/$TESTCTR 106*1d32ba66SJohn Wren Kennedy log_must zfs create $pool/$TESTFS/$TESTCTR/$TESTCTR1 107*1d32ba66SJohn Wren Kennedy log_must zfs set canmount=off $pool/$TESTFS/$TESTCTR 108*1d32ba66SJohn Wren Kennedy log_must zfs set canmount=off $pool/$TESTFS/$TESTCTR/$TESTCTR1 109*1d32ba66SJohn Wren Kennedy log_must zfs create $pool/$TESTFS/$TESTCTR/$TESTFS1 110*1d32ba66SJohn Wren Kennedy log_must zfs create $pool/$TESTFS/$TESTCTR/$TESTCTR1/$TESTFS1 111*1d32ba66SJohn Wren Kennedy log_must zfs create $pool/$TESTFS/$TESTFS1 112*1d32ba66SJohn Wren Kennedy log_must zfs snapshot $pool/$TESTFS/$TESTFS1@snap 113*1d32ba66SJohn Wren Kennedy log_must zfs clone $pool/$TESTFS/$TESTFS1@snap $pool/$TESTCLONE1 114d583b39bSJohn Wren Kennedydone 115d583b39bSJohn Wren Kennedy 116d583b39bSJohn Wren Kennedytypeset mount_fs="$TESTFS $TESTFS/$TESTFS1 $TESTCLONE1 \ 117d583b39bSJohn Wren Kennedy $TESTFS/$TESTCTR/$TESTFS1 $TESTFS/$TESTCTR/$TESTCTR1/$TESTFS1" 118d583b39bSJohn Wren Kennedytypeset nomount_fs="$TESTFS/$TESTCTR $TESTFS/$TESTCTR/$TESTCTR1" 119d583b39bSJohn Wren Kennedy 120d583b39bSJohn Wren Kennedytypeset -i i=0 121d583b39bSJohn Wren Kennedytypeset -i j=0 122d583b39bSJohn Wren Kennedytypeset -i nfs_share_bit=0 123d583b39bSJohn Wren Kennedytypeset -i guid_bit=0 124d583b39bSJohn Wren Kennedytypeset basedir 125d583b39bSJohn Wren Kennedy 126d583b39bSJohn Wren Kennedyfor option in "" "-Df"; do 127d583b39bSJohn Wren Kennedy i=0 128d583b39bSJohn Wren Kennedy while ((i < ${#pools[*]})); do 129d583b39bSJohn Wren Kennedy pool=${pools[i]} 130d583b39bSJohn Wren Kennedy guid=$(get_pool_prop guid $pool) 131d583b39bSJohn Wren Kennedy j=0 132d583b39bSJohn Wren Kennedy while ((j < ${#options[*]})); do 133d583b39bSJohn Wren Kennedy # set sharenfs property off/on 134d583b39bSJohn Wren Kennedy nfs_share_bit=0 135d583b39bSJohn Wren Kennedy while ((nfs_share_bit <= 1)); do 136d583b39bSJohn Wren Kennedy typeset f_share="" 137d583b39bSJohn Wren Kennedy typeset nfs_flag="sharenfs=off" 138d583b39bSJohn Wren Kennedy if ((nfs_share_bit == 1)); then 139d583b39bSJohn Wren Kennedy log_note "Set sharenfs=on $pool" 140*1d32ba66SJohn Wren Kennedy log_must zfs set sharenfs=on $pool 141d583b39bSJohn Wren Kennedy log_must is_shared $pool 142d583b39bSJohn Wren Kennedy f_share="true" 143d583b39bSJohn Wren Kennedy nfs_flag="sharenfs=on" 144d583b39bSJohn Wren Kennedy fi 145d583b39bSJohn Wren Kennedy # for every off/on nfs bit import guid/pool_name 146d583b39bSJohn Wren Kennedy guid_bit=0 147d583b39bSJohn Wren Kennedy while ((guid_bit <= 1)); do 148d583b39bSJohn Wren Kennedy typeset guid_flag="pool name" 149d583b39bSJohn Wren Kennedy if [[ -z $option ]]; then 150*1d32ba66SJohn Wren Kennedy log_must zpool export $pool 151d583b39bSJohn Wren Kennedy else 152*1d32ba66SJohn Wren Kennedy log_must zpool destroy $pool 153d583b39bSJohn Wren Kennedy fi 154d583b39bSJohn Wren Kennedy 155d583b39bSJohn Wren Kennedy typeset target=$pool 156d583b39bSJohn Wren Kennedy if ((guid_bit == 1)); then 157d583b39bSJohn Wren Kennedy log_note "Import by guid." 158d583b39bSJohn Wren Kennedy if [[ -z $guid ]]; then 159d583b39bSJohn Wren Kennedy log_fail "guid should "\ 160d583b39bSJohn Wren Kennedy "not be empty!" 161d583b39bSJohn Wren Kennedy else 162d583b39bSJohn Wren Kennedy target=$guid 163d583b39bSJohn Wren Kennedy guid_flag="$guid" 164d583b39bSJohn Wren Kennedy fi 165d583b39bSJohn Wren Kennedy fi 166d583b39bSJohn Wren Kennedy log_note "Import with $nfs_flag and " \ 167d583b39bSJohn Wren Kennedy "$guid_flag" 168*1d32ba66SJohn Wren Kennedy zpool import $option ${devs[i]} \ 169d583b39bSJohn Wren Kennedy ${options[j]} $target 170d583b39bSJohn Wren Kennedy #import by GUID if import by pool name fails 171d583b39bSJohn Wren Kennedy if [[ $? != 0 ]]; then 172d583b39bSJohn Wren Kennedy log_note "Possible pool name" \ 173d583b39bSJohn Wren Kennedy "duplicates. Try GUID import" 174d583b39bSJohn Wren Kennedy target=$guid 175*1d32ba66SJohn Wren Kennedy log_must zpool import $option \ 176d583b39bSJohn Wren Kennedy ${devs[i]} ${options[j]} \ 177d583b39bSJohn Wren Kennedy $target 178d583b39bSJohn Wren Kennedy fi 179d583b39bSJohn Wren Kennedy log_must poolexists $pool 180d583b39bSJohn Wren Kennedy 181d583b39bSJohn Wren Kennedy for fs in $mount_fs; do 182d583b39bSJohn Wren Kennedy log_must ismounted $pool/$fs 183d583b39bSJohn Wren Kennedy [[ -n $f_share ]] && \ 184d583b39bSJohn Wren Kennedy log_must is_shared $pool/$fs 185d583b39bSJohn Wren Kennedy done 186d583b39bSJohn Wren Kennedy 187d583b39bSJohn Wren Kennedy for fs in $nomount_fs; do 188d583b39bSJohn Wren Kennedy log_mustnot ismounted $pool/$fs 189d583b39bSJohn Wren Kennedy log_mustnot is_shared $pool/$fs 190d583b39bSJohn Wren Kennedy done 191d583b39bSJohn Wren Kennedy ((guid_bit = guid_bit + 1)) 192d583b39bSJohn Wren Kennedy done 193d583b39bSJohn Wren Kennedy # reset nfsshare=off 194d583b39bSJohn Wren Kennedy if [[ -n $f_share ]]; then 195*1d32ba66SJohn Wren Kennedy log_must zfs set sharenfs=off $pool 196d583b39bSJohn Wren Kennedy log_mustnot is_shared $pool 197d583b39bSJohn Wren Kennedy fi 198d583b39bSJohn Wren Kennedy ((nfs_share_bit = nfs_share_bit + 1)) 199d583b39bSJohn Wren Kennedy done 200d583b39bSJohn Wren Kennedy 201d583b39bSJohn Wren Kennedy ((j = j + 1)) 202d583b39bSJohn Wren Kennedy done 203d583b39bSJohn Wren Kennedy 204d583b39bSJohn Wren Kennedy ((i = i + 1)) 205d583b39bSJohn Wren Kennedy done 206d583b39bSJohn Wren Kennedydone 207d583b39bSJohn Wren Kennedy 208d583b39bSJohn Wren Kennedylog_pass "All mount & share status of sub-filesystems within a pool \ 209d583b39bSJohn Wren Kennedy can be restored after import [-Df]." 210