]> code.delx.au - monosys/commitdiff
lib-ext-backup: scrub backup pool every week
authorJames Bunton <jamesbunton@delx.net.au>
Wed, 13 May 2020 12:04:41 +0000 (22:04 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Wed, 13 May 2020 12:04:41 +0000 (22:04 +1000)
lib-ext-backup

index 8d3bbba2b07282da6dc8de016b68fe4a2a4fc6c1..900931870ca1b04832422d44bf79bf72535daaa5 100644 (file)
@@ -58,6 +58,28 @@ function pool_setup {
     zfs set acltype=posixacl "$ZPOOLNAME"
 }
 
+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"
@@ -80,6 +102,7 @@ function main {
     pool_setup
     snapshot_sync
     snapshot_cleanup
+    pool_maybe_scrub
     pool_export
     cryptsetup_close
 }