X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=btrfsmaint;h=1639a8dd48f450e69fdf67558a4780059583ec1d;hb=40dd151ec6ba75633c74568da59e35a45351f194;hp=6c7dbb1f6788119cafa9cac1dc2cae559cd2c07b;hpb=7e673f2615101982a17ffa0e23cb10b5b3803f07;p=distro-setup diff --git a/btrfsmaint b/btrfsmaint index 6c7dbb1..1639a8d 100755 --- a/btrfsmaint +++ b/btrfsmaint @@ -15,7 +15,12 @@ source /a/bin/errhandle/err dusage="5 10" musage="5" -e() { echo "cron: $*"; "$@"; } +e() { + echo "cron: $*" + if ! $dryrun; then + "$@" + fi +} check-idle() { type -p xprintidle &>/dev/null || return 0 @@ -39,7 +44,7 @@ check-idle() { usage() { cat <&2 usage 1 @@ -93,8 +102,12 @@ main() { fi if ! $idle; then - btrfs scrub cancel $mnt &>/dev/null ||: - continue + if $dryrun; then + echo "$0: not idle. if this wasnt a dry run, btrfs scrub cancel $mnt" + else + btrfs scrub cancel $mnt &>/dev/null ||: + continue + fi fi if $check; then continue @@ -118,20 +131,31 @@ main() { e ionice -c 3 btrfs balance start -musage=$usage $mnt done fi - # e btrfs filesystem df $mnt - # e df -H $mnt - date=$( - btrfs scrub status $mnt | \ - sed -rn 's/^\s*scrub started at (.*) and finished.*/\1/p' - ) + date= + scrub_status=$(btrfs scrub status $mnt) + if printf "%s\n" "$scrub_status" | grep -i '^status:[[:space:]]*finished$' &>/dev/null; then + date=$(printf "%s\n" "$scrub_status" | sed -rn 's/^Scrub started:[[:space:]]*(.*)/\1/p') + fi + if [[ ! $date ]]; then + # output from older versions, at least btrfs v4.15.1 + date=$( + printf "%s\n" "$scrub_status" | \ + sed -rn 's/^\s*scrub started at (.*) and finished.*/\1/p' + ) + fi if [[ $date ]]; then + if $dryrun; then + echo "$0: last scrub finish for $mnt: $date" + fi date=$(date --date="$date" +%s) # if date is sooner than 90 days ago # the wiki recommends 30 days or so, but # it makes the comp lag like shit for a day, # so I'm going with 90 days. if (( date > $(date +%s) - 60*60*24*30 )); then - echo "cron: skiping scrub of $mnt" + if $dryrun; then + echo "$0: skiping scrub of $mnt, last was $(( ($(date +%s) - date) / 60/60/24 )) days ago, < 30 days" + fi continue fi fi