1f38cb554SJohn Wren Kennedy#!/bin/ksh -p 2f38cb554SJohn Wren Kennedy# 3f38cb554SJohn Wren Kennedy# CDDL HEADER START 4f38cb554SJohn Wren Kennedy# 5f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the 6f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License"). 7f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License. 8f38cb554SJohn Wren Kennedy# 9f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing. 11f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions 12f38cb554SJohn Wren Kennedy# and limitations under the License. 13f38cb554SJohn Wren Kennedy# 14f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each 15f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the 17f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying 18f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner] 19f38cb554SJohn Wren Kennedy# 20f38cb554SJohn Wren Kennedy# CDDL HEADER END 21f38cb554SJohn Wren Kennedy# 22f38cb554SJohn Wren Kennedy 23f38cb554SJohn Wren Kennedy# 24f38cb554SJohn Wren Kennedy# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 25f38cb554SJohn Wren Kennedy# Use is subject to license terms. 26f38cb554SJohn Wren Kennedy# 27f38cb554SJohn Wren Kennedy 28f38cb554SJohn Wren Kennedy# 291d32ba66SJohn Wren Kennedy# Copyright (c) 2013, 2016 by Delphix. All rights reserved. 30f38cb554SJohn Wren Kennedy# 31f38cb554SJohn Wren Kennedy 32f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/rsend/rsend.kshlib 33f38cb554SJohn Wren Kennedy 34f38cb554SJohn Wren Kennedy# 35f38cb554SJohn Wren Kennedy# DESCRIPTION: 36f38cb554SJohn Wren Kennedy# zfs send -R will backup all the filesystem properties correctly. 37f38cb554SJohn Wren Kennedy# 38f38cb554SJohn Wren Kennedy# STRATEGY: 39f38cb554SJohn Wren Kennedy# 1. Setting properties for all the filesystem and volumes randomly 40f38cb554SJohn Wren Kennedy# 2. Backup all the data from POOL by send -R 41f38cb554SJohn Wren Kennedy# 3. Restore all the data in POOL2 42f38cb554SJohn Wren Kennedy# 4. Verify all the perperties in two pools are same 43f38cb554SJohn Wren Kennedy# 44f38cb554SJohn Wren Kennedy 45f38cb554SJohn Wren Kennedyverify_runnable "global" 46f38cb554SJohn Wren Kennedy 47f38cb554SJohn Wren Kennedyfunction edited_prop 48f38cb554SJohn Wren Kennedy{ 49f38cb554SJohn Wren Kennedy typeset behaviour=$1 50f38cb554SJohn Wren Kennedy typeset ds=$2 51f38cb554SJohn Wren Kennedy typeset backfile=$TESTDIR/edited_prop_$ds 52f38cb554SJohn Wren Kennedy 53f38cb554SJohn Wren Kennedy case $behaviour in 54f38cb554SJohn Wren Kennedy "get") 551d32ba66SJohn Wren Kennedy typeset props=$(zfs inherit 2>&1 | \ 561d32ba66SJohn Wren Kennedy awk '$2=="YES" {print $1}' | \ 571d32ba66SJohn Wren Kennedy egrep -v "^vol|\.\.\.$") 58f38cb554SJohn Wren Kennedy for item in $props ; do 59f38cb554SJohn Wren Kennedy if [[ $item == "mlslabel" ]] && \ 60f38cb554SJohn Wren Kennedy ! is_te_enabled ; then 61f38cb554SJohn Wren Kennedy continue 62f38cb554SJohn Wren Kennedy fi 631d32ba66SJohn Wren Kennedy zfs get -H -o property,value $item $ds >> \ 64f38cb554SJohn Wren Kennedy $backfile 65f38cb554SJohn Wren Kennedy if (($? != 0)); then 66f38cb554SJohn Wren Kennedy log_fail "zfs get -H -o property,value"\ 67f38cb554SJohn Wren Kennedy "$item $ds > $backfile" 68f38cb554SJohn Wren Kennedy fi 69f38cb554SJohn Wren Kennedy done 70f38cb554SJohn Wren Kennedy ;; 71f38cb554SJohn Wren Kennedy "set") 72f38cb554SJohn Wren Kennedy if [[ ! -f $backfile ]] ; then 73f38cb554SJohn Wren Kennedy log_fail "$ds need backup properties firstly." 74f38cb554SJohn Wren Kennedy fi 75f38cb554SJohn Wren Kennedy 76f38cb554SJohn Wren Kennedy typeset prop value 77f38cb554SJohn Wren Kennedy while read prop value ; do 781d32ba66SJohn Wren Kennedy eval zfs set $prop='$value' $ds 79f38cb554SJohn Wren Kennedy if (($? != 0)); then 801d32ba66SJohn Wren Kennedy log_fail "zfs set $prop=$value $ds" 81f38cb554SJohn Wren Kennedy fi 82f38cb554SJohn Wren Kennedy done < $backfile 83f38cb554SJohn Wren Kennedy ;; 84f38cb554SJohn Wren Kennedy *) 85f38cb554SJohn Wren Kennedy log_fail "Unrecognized behaviour: $behaviour" 86f38cb554SJohn Wren Kennedy esac 87f38cb554SJohn Wren Kennedy} 88f38cb554SJohn Wren Kennedy 89f38cb554SJohn Wren Kennedyfunction cleanup 90f38cb554SJohn Wren Kennedy{ 91f38cb554SJohn Wren Kennedy log_must cleanup_pool $POOL 92f38cb554SJohn Wren Kennedy log_must cleanup_pool $POOL2 93f38cb554SJohn Wren Kennedy 94f38cb554SJohn Wren Kennedy log_must edited_prop "set" $POOL 95f38cb554SJohn Wren Kennedy log_must edited_prop "set" $POOL2 96f38cb554SJohn Wren Kennedy 97f38cb554SJohn Wren Kennedy typeset prop 98f38cb554SJohn Wren Kennedy for prop in $(fs_inherit_prop) ; do 991d32ba66SJohn Wren Kennedy log_must zfs inherit $prop $POOL 1001d32ba66SJohn Wren Kennedy log_must zfs inherit $prop $POOL2 101f38cb554SJohn Wren Kennedy done 102f38cb554SJohn Wren Kennedy 103f38cb554SJohn Wren Kennedy #if is_shared $POOL; then 1041d32ba66SJohn Wren Kennedy # log_must zfs set sharenfs=off $POOL 105f38cb554SJohn Wren Kennedy #fi 106f38cb554SJohn Wren Kennedy log_must setup_test_model $POOL 107f38cb554SJohn Wren Kennedy 108f38cb554SJohn Wren Kennedy if [[ -d $TESTDIR ]]; then 1091d32ba66SJohn Wren Kennedy log_must rm -rf $TESTDIR/* 110f38cb554SJohn Wren Kennedy fi 111f38cb554SJohn Wren Kennedy} 112f38cb554SJohn Wren Kennedy 113f38cb554SJohn Wren Kennedylog_assert "Verify zfs send -R will backup all the filesystem properties " \ 114f38cb554SJohn Wren Kennedy "correctly." 115f38cb554SJohn Wren Kennedylog_onexit cleanup 116f38cb554SJohn Wren Kennedy 117f38cb554SJohn Wren Kennedylog_must edited_prop "get" $POOL 118f38cb554SJohn Wren Kennedylog_must edited_prop "get" $POOL2 119f38cb554SJohn Wren Kennedy 120f38cb554SJohn Wren Kennedyfor fs in "$POOL" "$POOL/pclone" "$POOL/$FS" "$POOL/$FS/fs1" \ 121f38cb554SJohn Wren Kennedy "$POOL/$FS/fs1/fs2" "$POOL/$FS/fs1/fclone" ; do 122f38cb554SJohn Wren Kennedy rand_set_prop $fs aclinherit "discard" "noallow" "secure" "passthrough" 123f38cb554SJohn Wren Kennedy rand_set_prop $fs checksum "on" "off" "fletcher2" "fletcher4" "sha256" 124f38cb554SJohn Wren Kennedy rand_set_prop $fs aclmode "discard" "groupmask" "passthrough" 125f38cb554SJohn Wren Kennedy rand_set_prop $fs atime "on" "off" 126f38cb554SJohn Wren Kennedy rand_set_prop $fs checksum "on" "off" "fletcher2" "fletcher4" "sha256" 127f38cb554SJohn Wren Kennedy rand_set_prop $fs compression "on" "off" "lzjb" "gzip" \ 128f38cb554SJohn Wren Kennedy "gzip-1" "gzip-2" "gzip-3" "gzip-4" "gzip-5" "gzip-6" \ 129f38cb554SJohn Wren Kennedy "gzip-7" "gzip-8" "gzip-9" 130f38cb554SJohn Wren Kennedy rand_set_prop $fs copies "1" "2" "3" 131f38cb554SJohn Wren Kennedy rand_set_prop $fs devices "on" "off" 132f38cb554SJohn Wren Kennedy rand_set_prop $fs exec "on" "off" 133f38cb554SJohn Wren Kennedy rand_set_prop $fs quota "512M" "1024M" 134f38cb554SJohn Wren Kennedy rand_set_prop $fs recordsize "512" "2K" "8K" "32K" "128K" 135*0774d909SNed Bass rand_set_prop $fs dnodesize "legacy" "auto" "1k" "2k" "4k" "8k" "16k" 136f38cb554SJohn Wren Kennedy rand_set_prop $fs setuid "on" "off" 137f38cb554SJohn Wren Kennedy rand_set_prop $fs snapdir "hidden" "visible" 138f38cb554SJohn Wren Kennedy rand_set_prop $fs xattr "on" "off" 139f38cb554SJohn Wren Kennedy rand_set_prop $fs user:prop "aaa" "bbb" "23421" "()-+?" 140f38cb554SJohn Wren Kennedydone 141f38cb554SJohn Wren Kennedy 142f38cb554SJohn Wren Kennedyfor vol in "$POOL/vol" "$POOL/$FS/vol" ; do 143f38cb554SJohn Wren Kennedy rand_set_prop $vol checksum "on" "off" "fletcher2" "fletcher4" "sha256" 144f38cb554SJohn Wren Kennedy rand_set_prop $vol compression "on" "off" "lzjb" "gzip" \ 145f38cb554SJohn Wren Kennedy "gzip-1" "gzip-2" "gzip-3" "gzip-4" "gzip-5" "gzip-6" \ 146f38cb554SJohn Wren Kennedy "gzip-7" "gzip-8" "gzip-9" 147f38cb554SJohn Wren Kennedy rand_set_prop $vol readonly "on" "off" 148f38cb554SJohn Wren Kennedy rand_set_prop $vol copies "1" "2" "3" 149f38cb554SJohn Wren Kennedy rand_set_prop $vol user:prop "aaa" "bbb" "23421" "()-+?" 150f38cb554SJohn Wren Kennedydone 151f38cb554SJohn Wren Kennedy 152f38cb554SJohn Wren Kennedy 153f38cb554SJohn Wren Kennedy# Verify inherited property can be received 154f38cb554SJohn Wren Kennedyrand_set_prop $POOL sharenfs "on" "off" "rw" 155f38cb554SJohn Wren Kennedy 156f38cb554SJohn Wren Kennedy# 157f38cb554SJohn Wren Kennedy# Duplicate POOL2 for testing 158f38cb554SJohn Wren Kennedy# 1591d32ba66SJohn Wren Kennedylog_must eval "zfs send -R $POOL@final > $BACKDIR/pool-final-R" 1601d32ba66SJohn Wren Kennedylog_must eval "zfs receive -d -F $POOL2 < $BACKDIR/pool-final-R" 161f38cb554SJohn Wren Kennedy 162f38cb554SJohn Wren Kennedy# 163f38cb554SJohn Wren Kennedy# Define all the POOL/POOL2 datasets pair 164f38cb554SJohn Wren Kennedy# 165f38cb554SJohn Wren Kennedyset -A pair "$POOL" "$POOL2" \ 166f38cb554SJohn Wren Kennedy "$POOL/$FS" "$POOL2/$FS" \ 167f38cb554SJohn Wren Kennedy "$POOL/$FS/fs1" "$POOL2/$FS/fs1" \ 168f38cb554SJohn Wren Kennedy "$POOL/$FS/fs1/fs2" "$POOL2/$FS/fs1/fs2" \ 169f38cb554SJohn Wren Kennedy "$POOL/pclone" "$POOL2/pclone" \ 170f38cb554SJohn Wren Kennedy "$POOL/$FS/fs1/fclone" "$POOL2/$FS/fs1/fclone" \ 171f38cb554SJohn Wren Kennedy "$POOL/vol" "$POOL2/vol" \ 172f38cb554SJohn Wren Kennedy "$POOL/$FS/vol" "$POOL2/$FS/vol" 173f38cb554SJohn Wren Kennedy 174f38cb554SJohn Wren Kennedytypeset -i i=0 175f38cb554SJohn Wren Kennedywhile ((i < ${#pair[@]})); do 176f38cb554SJohn Wren Kennedy log_must cmp_ds_prop ${pair[$i]} ${pair[((i+1))]} 177f38cb554SJohn Wren Kennedy 178f38cb554SJohn Wren Kennedy ((i += 2)) 179f38cb554SJohn Wren Kennedydone 180f38cb554SJohn Wren Kennedy 181f38cb554SJohn Wren Kennedy 1821d32ba66SJohn Wren Kennedyzpool upgrade -v | grep "Snapshot properties" > /dev/null 2>&1 183f38cb554SJohn Wren Kennedyif (( $? == 0 )) ; then 184f38cb554SJohn Wren Kennedy i=0 185f38cb554SJohn Wren Kennedy while ((i < ${#pair[@]})); do 186f38cb554SJohn Wren Kennedy log_must cmp_ds_prop ${pair[$i]}@final ${pair[((i+1))]}@final 187f38cb554SJohn Wren Kennedy ((i += 2)) 188f38cb554SJohn Wren Kennedy done 189f38cb554SJohn Wren Kennedyfi 190f38cb554SJohn Wren Kennedy 191f38cb554SJohn Wren Kennedylog_pass "Verify zfs send -R will backup all the filesystem properties " \ 192f38cb554SJohn Wren Kennedy "correctly." 193