]> code.delx.au - monosys/blobdiff - hacks/lib-ext-backup
lib-ext-backup: don't fail if LUKS volume is already opened
[monosys] / hacks / lib-ext-backup
index f90faba007b2719b37a8b2a6eecf0f00b88b4dfb..4a1d11988e925546687963da232871e84ac235fb 100644 (file)
@@ -7,6 +7,9 @@ function cryptsetup_open {
         fi
         DISKNAME="$(basename "$DEVICE")"
         CRYPTNAME="crypt-$DISKNAME"
+        if [ -L "/run/ext-backup-crypt/$CRYPTNAME" ]; then
+            continue
+        fi
         echo "> cryptsetup luksOpen $DEVICE $CRYPTNAME"
         cryptsetup luksOpen "$DEVICE" "$CRYPTNAME" --key-file "/etc/lukskeys/${DISKNAME}"
         mkdir -p /run/ext-backup-crypt/
@@ -48,7 +51,7 @@ function pool_export {
 }
 
 function pool_setup {
-    zpool set failmode=continue "$ZPOOLNAME"
+    zpool set failmode=wait "$ZPOOLNAME"
     zfs set mountpoint="/mnt/$ZPOOLNAME" "$ZPOOLNAME"
     chmod 0700 "/mnt/$ZPOOLNAME"
     zfs set compression=lz4 "$ZPOOLNAME"
@@ -74,11 +77,16 @@ function pool_maybe_scrub {
     echo "> zpool scrub $ZPOOLNAME"
     zpool scrub "$ZPOOLNAME"
 
-    while zpool status "$ZPOOLNAME" | grep -q "scrub in progress"; do
+    while zpool status "$ZPOOLNAME" | awk '/state: ONLINE|scan: scrub in progress/ {x++} END {exit x-2}'; do
         echo -n .
         sleep 60
     done
     echo " done"
+
+    if zpool list -H -o health "$ZPOOLNAME" | grep -qv ONLINE; then
+        zpool status -v "$ZPOOLNAME"
+        return 1
+    fi
 }
 
 function syncoidw {
@@ -96,6 +104,19 @@ function snapshot_cleanup {
         | xargs -rn1 zfs destroy -v
 }
 
+function snapshot_convert_to_bookmarks {
+    local fs
+    local snap
+
+    for fs in "$@"; do
+        for snap in $(zfs list -H -o name -t snapshot -r "$fs"); do
+            echo "> zfs bookmark $snap"
+            zfs bookmark "$snap" "${snap/@/#}"
+            zfs destroy "$snap"
+        done
+    done
+}
+
 function main {
     zfs get all -s local -H > /root/zfs-props.txt
     cryptsetup_open