From ccfcfc97665d776f9277859c26fd45197dd3a691 Mon Sep 17 00:00:00 2001 From: James Bunton Date: Mon, 27 Apr 2020 19:16:50 +1000 Subject: [PATCH] lib-ext-backup - support multiple backing disks - backup zfs props --- lib-ext-backup | 51 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/lib-ext-backup b/lib-ext-backup index ba2e408..1a5fa8f 100644 --- a/lib-ext-backup +++ b/lib-ext-backup @@ -1,35 +1,50 @@ #!/bin/bash -function find_device { +function cryptsetup_open { for DEVICE in /dev/disk/by-partlabel/ext*backup*; do - if [ -L "$DEVICE" ]; then - ZPOOLNAME="$(basename "$DEVICE")" - CRYPTNAME="crypt-$(basename "$DEVICE")" - echo "> Found: $ZPOOLNAME -> $(readlink -e "$DEVICE")" - return + if ! [ -L "$DEVICE" ]; then + continue fi + DISKNAME="$(basename "$DEVICE")" + CRYPTNAME="crypt-$DISKNAME" + echo "> cryptsetup luksOpen $DEVICE $CRYPTNAME" + cryptsetup luksOpen "$DEVICE" "$CRYPTNAME" --key-file "/etc/lukskeys/${DISKNAME}" + mkdir -p /run/ext-backup-crypt/ + ln -s "/dev/mapper/$CRYPTNAME" /run/ext-backup-crypt/ done +} - echo "ERROR! Couldn't find a backup device" - exit 1 +function cryptsetup_close { + for CRYPTDEVICE in /dev/mapper/crypt-ext*backup*; do + if ! [ -L "$CRYPTDEVICE" ]; then + continue + fi + CRYPTNAME="$(basename "$CRYPTDEVICE")" + echo "> cryptsetup luksClose $CRYPTNAME" + cryptsetup luksClose "$CRYPTNAME" + rm -f "/run/ext-backup-crypt/$CRYPTNAME" + done } function pool_import { - if ! zpool status "$ZPOOLNAME" &> /dev/null; then - echo "> cryptsetup luksOpen $DEVICE $CRYPTNAME" - cryptsetup luksOpen "$DEVICE" "$CRYPTNAME" --key-file "/etc/lukskeys/${ZPOOLNAME}" - echo "> zpool import $ZPOOLNAME" - zpool import "$ZPOOLNAME" + echo "> zpool import -d /run/ext-backup-crypt -a" + zpool import -d /run/ext-backup-crypt -a + + ZPOOLNAME="$(zpool list -H -o name|grep 'ext.*backup'|head -n1)" + if [ -z "$ZPOOLNAME" ]; then + echo "Error! Could not find pool!" + return 1 fi + + echo "> Found: $ZPOOLNAME" } function pool_export { echo "> zpool export $ZPOOLNAME" - for i in $(seq 10); do + for _ in $(seq 60); do zpool export "$ZPOOLNAME" && break + sleep 1 done - echo "> cryptsetup luksClose $CRYPTNAME" - cryptsetup luksClose "$CRYPTNAME" } function cleanup_snapshots { @@ -48,9 +63,11 @@ function syncoidw { } function main { - find_device + zfs get all -s local -H > /root/zfs-props.txt + cryptsetup_open pool_import sync_snapshots cleanup_snapshots pool_export + cryptsetup_close } -- 2.39.2