From ef202b7f9d6eea6a2f80aafa56c90e4ec37ffdc5 Mon Sep 17 00:00:00 2001 From: sev Date: Mon, 26 Jul 2021 01:46:03 -0500 Subject: [PATCH 1/2] add raw flag when replicating encrypted datasets --- zap | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/zap b/zap index 5915b23..4a2a0ad 100755 --- a/zap +++ b/zap @@ -364,8 +364,8 @@ rep_full() { if [ -z "$host" ]; then # replicating locally [ -n "$v_opt" ] && \ - echo "zfs send -Lep $C_opt $lsnap | zfs recv -Fu $v_opt -d $rloc" - if zfs send -Lep $C_opt "$lsnap" | zfs recv -Fu $v_opt -d "$rloc"; then + echo "zfs send -Lep $C_opt $raw $lsnap | zfs recv -Fu $v_opt -d $rloc" + if zfs send -Lep $C_opt $raw "$lsnap" | zfs recv -Fu $v_opt -d "$rloc"; then [ -n "$v_opt" ] && \ echo "zfs bookmark $lsnap $(echo "$lsnap" | sed 's/@/#/')" zfs bookmark "$lsnap" "$(echo "$lsnap" | sed 's/@/#/')" @@ -386,7 +386,7 @@ rep_full() { else warn "Failed to replicate $lsnap to $sshto:$rloc" fi else # replicating remotely - if rsend "-Lep $C_opt $lsnap" "zfs recv -Fu $v_opt -d $rloc"; then + if rsend "-Lep $C_opt $raw $lsnap" "zfs recv -Fu $v_opt -d $rloc"; then [ -n "$v_opt" ] && \ echo "zfs bookmark $lsnap $(echo "$lsnap" | sed 's/@/#/')" zfs bookmark "$lsnap" "$(echo "$lsnap" | sed 's/@/#/')" @@ -436,9 +436,9 @@ intermediary snapshots will not be sent." if echo "$sp" | grep -q '@'; then i='-I'; else i='-i'; fi if [ -z "$host" ]; then # replicate locally [ -n "$v_opt" ] && \ - echo "zfs send -Le $C_opt $i $sp $lsnap | zfs recv -du $F_opt $v_opt \ + echo "zfs send -Le $C_opt $raw $i $sp $lsnap | zfs recv -du $F_opt $v_opt \ $rloc" - if zfs send -Le $C_opt $i "$sp" "$lsnap" | zfs recv -du $F_opt $v_opt \ + if zfs send -Le $C_opt $raw $i "$sp" "$lsnap" | zfs recv -du $F_opt $v_opt \ "$rloc"; then [ -n "$v_opt" ] && \ echo "zfs bookmark $lsnap $(echo "$lsnap" | sed 's/@/#/')" @@ -449,7 +449,7 @@ $rloc" else warn "Failed to replicate $lsnap to $sshto:$rloc." fi else # replicate remotely - if rsend "-Le $C_opt $i $sp $lsnap" "zfs recv -du $F_opt $v_opt $rloc"; then + if rsend "-Le $C_opt $raw $i $sp $lsnap" "zfs recv -du $F_opt $v_opt $rloc"; then [ -n "$v_opt" ] && \ echo "zfs bookmark $lsnap $(echo "$lsnap" | sed 's/@/#/')" if zfs bookmark "$lsnap" "$(echo "$lsnap" | sed 's/@/#/')"; then @@ -496,6 +496,12 @@ a resilver in progress." rsnap=$(ssh "$sshto" "sh -c 'zfs list -rd1 -H -tsnap -o name -S \ creation ${rloc}${fs} 2>/dev/null | head -n1'" | sed 's/^.*@/@/') fi + # add raw (-w) flag for encrypted datasets + if [ "$(zfs get -H -o value encryption "$1")" != off ]; then + raw='-w' + else + raw='' + fi if [ -z "$rsnap" ]; then # replicate full stream [ -n "$v_opt" ] && \ echo "No remote snapshots found. Sending full stream." From 5663c29e72b0e49af0f203e207fbce46f9a33151 Mon Sep 17 00:00:00 2001 From: sev Date: Mon, 26 Jul 2021 12:21:25 -0500 Subject: [PATCH 2/2] ignore errors when reading encryption value --- zap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zap b/zap index 4a2a0ad..f61015a 100755 --- a/zap +++ b/zap @@ -497,7 +497,7 @@ a resilver in progress." creation ${rloc}${fs} 2>/dev/null | head -n1'" | sed 's/^.*@/@/') fi # add raw (-w) flag for encrypted datasets - if [ "$(zfs get -H -o value encryption "$1")" != off ]; then + if [ "$(zfs get -H -o value encryption "$1" 2>/dev/null)" != off ]; then raw='-w' else raw=''