]> code.delx.au - monosys/commitdiff
lib-ext-backup
authorJames Bunton <jamesbunton@delx.net.au>
Mon, 27 Apr 2020 09:16:50 +0000 (19:16 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Mon, 27 Apr 2020 09:16:50 +0000 (19:16 +1000)
- support multiple backing disks
- backup zfs props

lib-ext-backup

index ba2e4087d774d39da21df52d9b4a1cdd48c05035..1a5fa8fa7472f4f4434b2fbc9982f4976ef21cc8 100644 (file)
@@ -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
 }