From 4eb6470736a5f947c649c436e41b4ad8f34b972b Mon Sep 17 00:00:00 2001 From: Otho Date: Sun, 20 Nov 2022 21:01:46 -0500 Subject: [PATCH] File updates and add function for creating datasets. --- backup.sh | 52 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/backup.sh b/backup.sh index f1bf12c..651ec6e 100755 --- a/backup.sh +++ b/backup.sh @@ -1,25 +1,57 @@ #!/usr/bin/env sh +nodes_file="nodes.txt" ### nodes.txt # # # # ... +datasets_file="datasets.txt" ### datasets.txt # # / # / -# # / # # ... -list_datasets() +list_active_datasets() { zfs list | tail -n +2 | cut -d' ' -f1|grep ${BR_ROOT} } +read_datasets() { + while read BR_REMOTE_ADDR BR_REMOTE_PORT BR_REMOTE_ROOT BR_REMOTE_USER; do + case $BR_REMOTE_ADDR in + \#*) continue;; + esac + if [ $BR_TEST_MODE = "TRUE" ]; then + echo zfs send -R ${BR_ROOT}@${BR_NEW_SNAPSHOT} + echo ssh -i ~/.ssh/id_rsa -o port=${BR_REMOTE_PORT} \ + ${BR_REMOTE_USER}@${BR_REMOTE_ADDR} \ + zfs receive -vu ${BR_REMOTE_ROOT} + else + zfs send -R ${BR_ROOT}@${BR_NEW_SNAPSHOT} | + ssh -i ~/.ssh/id_rsa -o port=${BR_REMOTE_PORT} \ + ${BR_REMOTE_USER}@${BR_REMOTE_ADDR} \ + zfs receive -dvu ${BR_REMOTE_ROOT} + fi + done < ${datasets_file} +} + +# compare_datasets() + +create_datasets() { + # should compare_datasets and only create missing or possibly error. + for dataset in `cat ${datasets_file}`; do + zfs create -p ${BR_ROOT}/$dataset + done + for dataset in `cat ${datasets_file}`; do + zfs create -p ${BR_ROOT}/$dataset + done +} + get_latest_snapshot() { zfs list -t snapshot | @@ -32,17 +64,13 @@ get_latest_snapshot() setup_aggregator() { zfs allow -u ${BR_USER} send,snapshot,hold ${BR_ROOT} - for dataset in `cat datasets.txt`; do - zfs create -p ${BR_ROOT}/$dataset - done + create_datasets } setup_mirror() { zfs create -p $BR_ROOT - for dataset in `cat datasets.txt`; do - zfs create -p ${BR_ROOT}/$dataset - done + create_datasets zfs allow -u ${BR_USER} send,snapshot,hold ${BR_ROOT} zfs allow -u ${BR_USER} \ compression,mountpoint,receive,create,mount ${BR_ROOT} @@ -61,7 +89,7 @@ create_snapshot() send_single_snapshot() { BR_NEW_SNAPSHOT=`get_latest_snapshot` - tail -n +2 nodes.txt > sendnodes.tmp + tail -n +2 ${nodes_file} > sendnodes.tmp while read BR_REMOTE_ADDR BR_REMOTE_PORT BR_REMOTE_ROOT BR_REMOTE_USER; do case $BR_REMOTE_ADDR in \#*) continue;; @@ -119,13 +147,13 @@ while :; do shift done -read BR_HOST BR_PORT BR_ROOT BR_USER < nodes.txt +read BR_HOST BR_PORT BR_ROOT BR_USER < ${nodes_file} -if [ ! -f nodes.txt ]; then echo "No nodes specified."; exit 2; fi +if [ ! -f ${nodes_file} ]; then echo "No nodes specified."; exit 2; fi ### Command case "$1" in - list) list_datasets ;; + list) list_active_datasets ;; create) create_snapshot ;; setup-mirror) setup_mirror ;; send)