Skip to content

Commit 6ece8a0

Browse files
committed
Implement {pre,post}-send option for the snapshot replication.
1 parent 6bb45fa commit 6ece8a0

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

src/zfs-auto-snapshot.8

+10
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ aborted.
8080
Command to run after each dataset is snapshotted.
8181
It is passed the dataset and snapshot name.
8282
.TP
83+
\fB\-\-pre-send\fR=\fICOMMAND\fR
84+
Command to run before each snapshot is sent to
85+
remote host. It is passed the snapshot name. If
86+
it returns non-zero, sending this dataset is
87+
aborted.
88+
.TP
89+
\fB\-\-post-send\fR=\fICOMMAND\fR
90+
Command to run after each snapshot have been sent.
91+
It is passed the snapshot name.
92+
.TP
8393
\fB\-\-destroy-only\fR
8494
Do not create new snapshots, but do destroy older
8595
snapshots. Has no effect unless used with \fB\-k\fR.

src/zfs-auto-snapshot.sh

+27-4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ opt_skip_scrub=''
4646
opt_verbose=''
4747
opt_pre_snapshot=''
4848
opt_post_snapshot=''
49+
opt_pre_send=''
50+
opt_post_send=''
4951
opt_do_snapshots=1
5052

5153
# Global summary statistics.
@@ -220,6 +222,7 @@ do_send () # snapname, oldglob
220222
local GLOB="$2"
221223
local ii
222224
local remote="ssh $opt_send_host zfs receive $opt_recv_opts $opt_recv_pool"
225+
local RUNSEND=1
223226

224227
# STEP 1: Go throug all snapshots we've created
225228
for ii in $SNAPS_DONE
@@ -278,11 +281,22 @@ $jj"
278281
# STEP 4: Go through all snapshots that is to be transfered and send them.
279282
for jj in $SNAPS_SEND
280283
do
281-
if [ "$opt_send_type" = "incr" ]; then
282-
do_run "zfs send $opt_send_opts -i $jj $ii | $remote"
283-
else
284-
do_run "zfs send $opt_send_opts -R $jj | $remote"
284+
if [ -n "$opt_pre_send" ]; then
285+
do_run "$opt_pre_send $jj" || RUNSEND=0
286+
fi
287+
288+
if [ $RUNSEND -eq 1 ]; then
289+
if [ "$opt_send_type" = "incr" ]; then
290+
do_run "zfs send $opt_send_opts -i $jj $ii | $remote" || RUNSEND=0
291+
else
292+
do_run "zfs send $opt_send_opts -R $jj | $remote" || RUNSEND=0
293+
fi
294+
fi
295+
296+
if [ $RUNSEND = 1 -a -n "$opt_post_send" ]; then
297+
do_run "$opt_post_send $jj" || RUNSEND=0
285298
fi
299+
286300
done
287301
done
288302
}
@@ -296,6 +310,7 @@ GETOPT=$(getopt \
296310
--longoptions=debug,help,quiet,syslog,verbose \
297311
--longoptions=pre-snapshot:,post-snapshot:,destroy-only \
298312
--longoptions=send-full:,send-incr:,send-opts:,recv-opts: \
313+
--longoptions=pre-send:,post-send: \
299314
--options=dnshe:l:k:p:rs:qgv \
300315
-- "$@" ) \
301316
|| exit 128
@@ -438,6 +453,14 @@ do
438453
opt_post_snapshot="$2"
439454
shift 2
440455
;;
456+
(--pre-send)
457+
opt_pre_send="$2"
458+
shift 2
459+
;;
460+
(--post-send)
461+
opt_post_send="$2"
462+
shift 2
463+
;;
441464
(--destroy-only)
442465
opt_do_snapshots=''
443466
shift 1

0 commit comments

Comments
 (0)