15602294fSDan Kimmel#!/usr/bin/ksh 25602294fSDan Kimmel 35602294fSDan Kimmel# 45602294fSDan Kimmel# This file and its contents are supplied under the terms of the 55602294fSDan Kimmel# Common Development and Distribution License ("CDDL"), version 1.0. 65602294fSDan Kimmel# You may only use this file in accordance with the terms of version 75602294fSDan Kimmel# 1.0 of the CDDL. 85602294fSDan Kimmel# 95602294fSDan Kimmel# A full copy of the text of the CDDL should have accompanied this 105602294fSDan Kimmel# source. A copy of the CDDL is also available via the Internet at 115602294fSDan Kimmel# http://www.illumos.org/license/CDDL. 125602294fSDan Kimmel# 135602294fSDan Kimmel 145602294fSDan Kimmel# 155602294fSDan Kimmel# Copyright (c) 2015 by Delphix. All rights reserved. 16*e3bf7d5aSKody Kantor# Copyright 2020 Joyent, Inc. 175602294fSDan Kimmel# 185602294fSDan Kimmel 195602294fSDan Kimmel. $STF_SUITE/tests/functional/rsend/rsend.kshlib 205602294fSDan Kimmel 215602294fSDan Kimmel# 225602294fSDan Kimmel# Description: 235602294fSDan Kimmel# Verify that compressed send correctly handles volumes 245602294fSDan Kimmel# 255602294fSDan Kimmel# Strategy: 265602294fSDan Kimmel# 1. Write compressible data into a volume, take a snap 275602294fSDan Kimmel# 2. Verify the compressed stream is the correct size, and has the correct data 285602294fSDan Kimmel# 3. Repeat step 2 for an incremental compressed stream 295602294fSDan Kimmel# 305602294fSDan Kimmel 315602294fSDan Kimmelfunction cleanup 325602294fSDan Kimmel{ 335602294fSDan Kimmel log_must zfs destroy -r $vol 345602294fSDan Kimmel cleanup_pool $POOL2 355602294fSDan Kimmel} 365602294fSDan Kimmel 375602294fSDan Kimmelverify_runnable "both" 385602294fSDan Kimmel 395602294fSDan Kimmellog_assert "Verify compressed send works with volumes" 405602294fSDan Kimmellog_onexit cleanup 415602294fSDan Kimmel 425602294fSDan Kimmeltypeset vol="$POOL/newvol" 435602294fSDan Kimmeltypeset vol2="$POOL2/newvol" 445602294fSDan Kimmeltypeset voldev="/dev/zvol/rdsk/$POOL/newvol" 455602294fSDan Kimmeltypeset voldev2="/dev/zvol/rdsk/$POOL2/newvol" 465602294fSDan Kimmeltypeset data1=$BACKDIR/file.0 475602294fSDan Kimmeltypeset data2=$BACKDIR/file.1 485602294fSDan Kimmeltypeset megs=8 495602294fSDan Kimmel 505602294fSDan Kimmellog_must zfs create -V 256m -o compress=lz4 $vol 515602294fSDan Kimmel 525602294fSDan Kimmelwrite_compressible $BACKDIR ${megs}m 2 53*e3bf7d5aSKody Kantormd5_1=$(digest -a md5 $data1) 54*e3bf7d5aSKody Kantormd5_2=$(digest -a md5 $data2) 555602294fSDan Kimmel 565602294fSDan Kimmellog_must dd if=$data1 of=$voldev bs=1024k 575602294fSDan Kimmellog_must zfs snapshot $vol@snap 585602294fSDan Kimmel 595602294fSDan Kimmellog_must eval "zfs send -c $vol@snap >$BACKDIR/full" 605602294fSDan Kimmellog_must eval "zfs recv -d $POOL2 <$BACKDIR/full" 615602294fSDan Kimmel 625602294fSDan Kimmelverify_stream_size $BACKDIR/full $vol 635602294fSDan Kimmelverify_stream_size $BACKDIR/full $vol2 64*e3bf7d5aSKody Kantormd5=$(dd if=$voldev2 bs=1024k count=$megs 2>/dev/null | digest -a md5) 655602294fSDan Kimmel[[ $md5 = $md5_1 ]] || log_fail "md5 mismatch: $md5 != $md5_1" 665602294fSDan Kimmel 675602294fSDan Kimmel# Repeat, for an incremental send 685602294fSDan Kimmellog_must dd oseek=$megs if=$data2 of=$voldev bs=1024k 695602294fSDan Kimmellog_must zfs snapshot $vol@snap2 705602294fSDan Kimmel 715602294fSDan Kimmellog_must eval "zfs send -c -i snap $vol@snap2 >$BACKDIR/inc" 725602294fSDan Kimmellog_must eval "zfs recv -d $POOL2 <$BACKDIR/inc" 735602294fSDan Kimmel 745602294fSDan Kimmelverify_stream_size $BACKDIR/inc $vol 90 $vol@snap 755602294fSDan Kimmelverify_stream_size $BACKDIR/inc $vol2 90 $vol2@snap 76*e3bf7d5aSKody Kantormd5=$(dd iseek=$megs if=$voldev2 bs=1024k count=$megs 2>/dev/null \ 77*e3bf7d5aSKody Kantor | digest -a md5) 78*e3bf7d5aSKody Kantor 795602294fSDan Kimmel[[ $md5 = $md5_2 ]] || log_fail "md5 mismatch: $md5 != $md5_2" 805602294fSDan Kimmel 815602294fSDan Kimmellog_pass "Verify compressed send works with volumes" 82