]> code.delx.au - monosys/commitdiff
lib-ext-backup
authorJames Bunton <jamesbunton@delx.net.au>
Mon, 26 Aug 2019 02:23:12 +0000 (12:23 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Mon, 26 Aug 2019 02:23:12 +0000 (12:23 +1000)
lib-ext-backup [new file with mode: 0644]

diff --git a/lib-ext-backup b/lib-ext-backup
new file mode 100644 (file)
index 0000000..ba2e408
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+function find_device {
+    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
+        fi
+    done
+
+    echo "ERROR! Couldn't find a backup device"
+    exit 1
+}
+
+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"
+    fi
+}
+
+function pool_export {
+    echo "> zpool export $ZPOOLNAME"
+    for i in $(seq 10); do
+        zpool export "$ZPOOLNAME" && break
+    done
+    echo "> cryptsetup luksClose $CRYPTNAME"
+    cryptsetup luksClose "$CRYPTNAME"
+}
+
+function cleanup_snapshots {
+    echo "> Cleaning snapshots"
+
+    sanoid --configdir=/etc/sanoid/ext-backup --verbose --prune-snapshots
+
+    zfs list -t snapshot -r "$ZPOOLNAME" -H -o name \
+        | grep -F @syncoid_ \
+        | grep -Fv "@syncoid_$ZPOOLNAME" \
+        | xargs -rn1 zfs destroy -v
+}
+
+function syncoidw {
+    syncoid --identifier "$ZPOOLNAME" "$@"
+}
+
+function main {
+    find_device
+    pool_import
+    sync_snapshots
+    cleanup_snapshots
+    pool_export
+}