File updates and add function for creating datasets.

This commit is contained in:
Otho 2022-11-20 21:01:46 -05:00
parent bdde2372bf
commit 4eb6470736
Signed by: Otho
GPG Key ID: 16C720CD3BBE21D9

View File

@ -1,25 +1,57 @@
#!/usr/bin/env sh #!/usr/bin/env sh
nodes_file="nodes.txt"
### nodes.txt ### nodes.txt
# <local hostname> <local ssh port> <this host's root zfs> <this host's user> # <local hostname> <local ssh port> <this host's root zfs> <this host's user>
# <remote host 1 address> <host 1 ssh port> <host 1 root zfs> # <remote host 1 address> <host 1 ssh port> <host 1 root zfs>
# <remote host 2 address> <host 2 ssh port> <host 2 root zfs> # <remote host 2 address> <host 2 ssh port> <host 2 root zfs>
# ... # ...
datasets_file="datasets.txt"
### datasets.txt ### datasets.txt
# <dataset 1> # <dataset 1>
# <dataset 1>/<dataset 1a> # <dataset 1>/<dataset 1a>
# <dataset 1>/<dataset 1b> # <dataset 1>/<dataset 1b>
# <dataset 2>
# <dataset 2>/<dataset 2a> # <dataset 2>/<dataset 2a>
# <dataset 3> # <dataset 3>
# ... # ...
list_datasets() list_active_datasets()
{ {
zfs list | tail -n +2 | cut -d' ' -f1|grep ${BR_ROOT} 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() get_latest_snapshot()
{ {
zfs list -t snapshot | zfs list -t snapshot |
@ -32,17 +64,13 @@ get_latest_snapshot()
setup_aggregator() setup_aggregator()
{ {
zfs allow -u ${BR_USER} send,snapshot,hold ${BR_ROOT} zfs allow -u ${BR_USER} send,snapshot,hold ${BR_ROOT}
for dataset in `cat datasets.txt`; do create_datasets
zfs create -p ${BR_ROOT}/$dataset
done
} }
setup_mirror() setup_mirror()
{ {
zfs create -p $BR_ROOT zfs create -p $BR_ROOT
for dataset in `cat datasets.txt`; do create_datasets
zfs create -p ${BR_ROOT}/$dataset
done
zfs allow -u ${BR_USER} send,snapshot,hold ${BR_ROOT} zfs allow -u ${BR_USER} send,snapshot,hold ${BR_ROOT}
zfs allow -u ${BR_USER} \ zfs allow -u ${BR_USER} \
compression,mountpoint,receive,create,mount ${BR_ROOT} compression,mountpoint,receive,create,mount ${BR_ROOT}
@ -61,7 +89,7 @@ create_snapshot()
send_single_snapshot() send_single_snapshot()
{ {
BR_NEW_SNAPSHOT=`get_latest_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 while read BR_REMOTE_ADDR BR_REMOTE_PORT BR_REMOTE_ROOT BR_REMOTE_USER; do
case $BR_REMOTE_ADDR in case $BR_REMOTE_ADDR in
\#*) continue;; \#*) continue;;
@ -119,13 +147,13 @@ while :; do
shift shift
done 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 ### Command
case "$1" in case "$1" in
list) list_datasets ;; list) list_active_datasets ;;
create) create_snapshot ;; create) create_snapshot ;;
setup-mirror) setup_mirror ;; setup-mirror) setup_mirror ;;
send) send)