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
}
}
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"
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
}