]> code.delx.au - monosys/blobdiff - lib-ext-backup
remove xfce4-genmon-script
[monosys] / lib-ext-backup
index 06969b8f33f642613f51c831c99d2daf55ecccf4..900931870ca1b04832422d44bf79bf72535daaa5 100644 (file)
@@ -10,7 +10,7 @@ function cryptsetup_open {
         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/
+        ln -sf "/dev/mapper/$CRYPTNAME" /run/ext-backup-crypt/
     done
 }
 
@@ -48,6 +48,8 @@ function pool_export {
 }
 
 function pool_setup {
+    zfs set mountpoint="/mnt/$ZPOOLNAME" "$ZPOOLNAME"
+    chmod 0700 "/mnt/$ZPOOLNAME"
     zfs set compression=lz4 "$ZPOOLNAME"
     zfs set devices=off "$ZPOOLNAME"
     zfs set exec=off "$ZPOOLNAME"
@@ -56,28 +58,51 @@ function pool_setup {
     zfs set acltype=posixacl "$ZPOOLNAME"
 }
 
-function cleanup_snapshots {
-    echo "> Cleaning snapshots"
+function pool_maybe_scrub {
+    local now
+    local last_scrub
+    local last_scrub_days_ago
+    now="$(date +%s)"
+    last_scrub="$(zpool status "$ZPOOLNAME"|sed -nE 's/scan: scrub repaired.* on (.*)/\1/p')"
+    last_scrub_days_ago=$(((now - $(date --date="${last_scrub:-1970-01-01}" +%s)) / 86400))
+
+    if [ $last_scrub_days_ago -lt 7 ]; then
+        return
+    fi
+
+    echo "> zpool scrub $ZPOOLNAME"
+    zpool scrub "$ZPOOLNAME"
+
+    while zpool status "$ZPOOLNAME" | grep -q "scrub in progress"; do
+        echo -n .
+        sleep 60
+    done
+    echo " done"
+}
 
+function syncoidw {
+    echo "> syncoid $1"
+    syncoid "$@" --identifier "$ZPOOLNAME"
+}
+
+function snapshot_cleanup {
+    echo "> Cleaning snapshots"
     sanoid --configdir=/etc/sanoid/ext-backup --verbose --prune-snapshots
 
-    zfs list -t snapshot -r "$ZPOOLNAME" -H -o name \
+    zfs list -t snapshot -H -o name -r "$ZPOOLNAME" \
         | grep -F @syncoid_ \
         | grep -Fv "@syncoid_$ZPOOLNAME" \
         | xargs -rn1 zfs destroy -v
 }
 
-function syncoidw {
-    syncoid --identifier "$ZPOOLNAME" "$@"
-}
-
 function main {
     zfs get all -s local -H > /root/zfs-props.txt
     cryptsetup_open
     pool_import
     pool_setup
-    sync_snapshots
-    cleanup_snapshots
+    snapshot_sync
+    snapshot_cleanup
+    pool_maybe_scrub
     pool_export
     cryptsetup_close
 }