1eda14cbcSMatt Macy#!/bin/ksh -p 2eda14cbcSMatt Macy# 3eda14cbcSMatt Macy# CDDL HEADER START 4eda14cbcSMatt Macy# 5eda14cbcSMatt Macy# The contents of this file are subject to the terms of the 6eda14cbcSMatt Macy# Common Development and Distribution License (the "License"). 7eda14cbcSMatt Macy# You may not use this file except in compliance with the License. 8eda14cbcSMatt Macy# 9eda14cbcSMatt Macy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*271171e0SMartin Matuska# or https://opensource.org/licenses/CDDL-1.0. 11eda14cbcSMatt Macy# See the License for the specific language governing permissions 12eda14cbcSMatt Macy# and limitations under the License. 13eda14cbcSMatt Macy# 14eda14cbcSMatt Macy# When distributing Covered Code, include this CDDL HEADER in each 15eda14cbcSMatt Macy# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16eda14cbcSMatt Macy# If applicable, add the following below this CDDL HEADER, with the 17eda14cbcSMatt Macy# fields enclosed by brackets "[]" replaced with your own identifying 18eda14cbcSMatt Macy# information: Portions Copyright [yyyy] [name of copyright owner] 19eda14cbcSMatt Macy# 20eda14cbcSMatt Macy# CDDL HEADER END 21eda14cbcSMatt Macy# 22eda14cbcSMatt Macy 23eda14cbcSMatt Macy# 24eda14cbcSMatt Macy# Copyright 2008 Sun Microsystems, Inc. All rights reserved. 25eda14cbcSMatt Macy# Use is subject to license terms. 26eda14cbcSMatt Macy# 27eda14cbcSMatt Macy 28eda14cbcSMatt Macy# 29eda14cbcSMatt Macy# Copyright (c) 2013, 2016 by Delphix. All rights reserved. 30eda14cbcSMatt Macy# 31eda14cbcSMatt Macy 32eda14cbcSMatt Macy. $STF_SUITE/tests/functional/rsend/rsend.kshlib 33eda14cbcSMatt Macy 34eda14cbcSMatt Macy# 35eda14cbcSMatt Macy# DESCRIPTION: 36eda14cbcSMatt Macy# zfs send -R -i send incremental from fs@init to fs@final. 37eda14cbcSMatt Macy# 38eda14cbcSMatt Macy# STRATEGY: 39eda14cbcSMatt Macy# 1. Create a set of snapshots and fill with data. 40eda14cbcSMatt Macy# 2. Create sub filesystems. 41eda14cbcSMatt Macy# 3. Create final snapshot 42eda14cbcSMatt Macy# 4. Verify zfs send -R -i will backup all the datasets which has 43eda14cbcSMatt Macy# snapshot suffix @final 44eda14cbcSMatt Macy# 45eda14cbcSMatt Macy 46eda14cbcSMatt Macyverify_runnable "both" 47eda14cbcSMatt Macy 48eda14cbcSMatt Macylog_assert "zfs send -R -i send incremental from fs@init to fs@final." 49eda14cbcSMatt Macylog_onexit cleanup_pool $POOL2 50eda14cbcSMatt Macy 51eda14cbcSMatt Macy# 52eda14cbcSMatt Macy# Duplicate POOL2 for testing 53eda14cbcSMatt Macy# 54eda14cbcSMatt Macylog_must eval "zfs send -R $POOL@final > $BACKDIR/pool-final-R" 55eda14cbcSMatt Macylog_must eval "zfs receive -d -F $POOL2 < $BACKDIR/pool-final-R" 56eda14cbcSMatt Macy 57eda14cbcSMatt Macyif is_global_zone ; then 58eda14cbcSMatt Macy # 59eda14cbcSMatt Macy # Testing send -R -i backup from pool 60eda14cbcSMatt Macy # 61eda14cbcSMatt Macy srclist=$(getds_with_suffix $POOL2 @final) 62eda14cbcSMatt Macy interlist="$srclist $(getds_with_suffix $POOL2 @snapC)" 63eda14cbcSMatt Macy interlist="$interlist $(getds_with_suffix $POOL2 @snapB)" 64eda14cbcSMatt Macy interlist="$interlist $(getds_with_suffix $POOL2 @snapA)" 65eda14cbcSMatt Macy 66eda14cbcSMatt Macy log_must eval "zfs send -R -i @init $POOL2@final > " \ 67eda14cbcSMatt Macy "$BACKDIR/pool-init-final-iR" 68eda14cbcSMatt Macy log_must destroy_tree $interlist 69eda14cbcSMatt Macy log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/pool-init-final-iR" 70eda14cbcSMatt Macy 71eda14cbcSMatt Macy # Get current datasets with suffix @final 72eda14cbcSMatt Macy dstlist=$(getds_with_suffix $POOL2 @final) 73eda14cbcSMatt Macy if [[ $srclist != $dstlist ]]; then 74eda14cbcSMatt Macy log_fail "Unexpected: srclist($srclist) != dstlist($dstlist)" 75eda14cbcSMatt Macy fi 76eda14cbcSMatt Macy log_must cmp_ds_cont $POOL $POOL2 77eda14cbcSMatt Macyfi 78eda14cbcSMatt Macy 79eda14cbcSMatt Macydstds=$(get_dst_ds $POOL $POOL2) 80eda14cbcSMatt Macy# 81eda14cbcSMatt Macy# Testing send -R -i backup from filesystem 82eda14cbcSMatt Macy# 83eda14cbcSMatt Macylog_must eval "zfs send -R -i @init $dstds/$FS@final > " \ 84eda14cbcSMatt Macy "$BACKDIR/fs-init-final-iR" 85eda14cbcSMatt Macy 86eda14cbcSMatt Macysrclist=$(getds_with_suffix $dstds/$FS @final) 87eda14cbcSMatt Macyinterlist="$srclist $(getds_with_suffix $dstds/$FS @snapC)" 88eda14cbcSMatt Macyinterlist="$interlist $(getds_with_suffix $dstds/$FS @snapB)" 89eda14cbcSMatt Macyinterlist="$interlist $(getds_with_suffix $dstds/$FS @snapA)" 90eda14cbcSMatt Macylog_must destroy_tree $interlist 91eda14cbcSMatt Macyif is_global_zone ; then 92eda14cbcSMatt Macy log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/fs-init-final-iR" 93eda14cbcSMatt Macyelse 94eda14cbcSMatt Macy zfs receive -F -d $dstds/$FS < $BACKDIR/fs-init-final-iR 95eda14cbcSMatt Macyfi 96eda14cbcSMatt Macy 97eda14cbcSMatt Macydstlist=$(getds_with_suffix $dstds/$FS @final) 98eda14cbcSMatt Macyif [[ $srclist != $dstlist ]]; then 99eda14cbcSMatt Macy log_fail "Unexpected: srclist($srclist) != dstlist($dstlist)" 100eda14cbcSMatt Macyfi 101eda14cbcSMatt Macylog_must cmp_ds_cont $POOL $POOL2 102eda14cbcSMatt Macy 103eda14cbcSMatt Macyif is_global_zone ; then 104eda14cbcSMatt Macy # 105eda14cbcSMatt Macy # Testing send -R -i backup from volume 106eda14cbcSMatt Macy # 107eda14cbcSMatt Macy srclist=$(getds_with_suffix $POOL2/$FS/vol @final) 108eda14cbcSMatt Macy log_must eval "zfs send -R -i @init $POOL2/$FS/vol@final > " \ 109eda14cbcSMatt Macy "$BACKDIR/vol-init-final-iR" 110eda14cbcSMatt Macy log_must destroy_tree $srclist 111eda14cbcSMatt Macy log_must eval "zfs receive -d $POOL2 < $BACKDIR/vol-init-final-iR" 112eda14cbcSMatt Macy 113eda14cbcSMatt Macy dstlist=$(getds_with_suffix $POOL2/$FS/vol @final) 114eda14cbcSMatt Macy if [[ $srclist != $dstlist ]]; then 115eda14cbcSMatt Macy log_fail "Unexpected: srclist($srclist) != dstlist($dstlist)" 116eda14cbcSMatt Macy fi 117eda14cbcSMatt Macy log_must cmp_ds_cont $POOL $POOL2 118eda14cbcSMatt Macyfi 119eda14cbcSMatt Macy 120eda14cbcSMatt Macylog_pass "zfs send -R -i send incremental from fs@init to fs@final." 121