]> 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 4e727920f91ca2f79c0a4d9633fe27604ce07049..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,7 +77,7 @@ 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
@@ -101,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