X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=btrfsmaint;h=8e7214187a13e7709880f6d6d1fd169fed22074e;hb=ae10fa08bb841b99b0df8e827735bef08c05f3ca;hp=bcad450bad786b99cf372a9f20142f98d923573c;hpb=12cab163424e3a7b0815646d1d4407f9b5839bcb;p=distro-setup diff --git a/btrfsmaint b/btrfsmaint index bcad450..8e72141 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 @@ -91,10 +100,15 @@ main() { cat $tmp >$mnt/btrfs-dev-stats fi fi + rm -f $tmp 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 +132,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 (( date > EPOCHSECONDS - 60*60*24*30 )); then + if $dryrun; then + echo "$0: skiping scrub of $mnt, last was $(( (EPOCHSECONDS - date) / 60/60/24 )) days ago, < 30 days" + fi continue fi fi @@ -140,12 +165,15 @@ main() { done } -if $check; then - # this is to prevent systemd from filling up the journal - for (( runcount=0; runcount < 90; runcount++ )); do +loop-main() { + while true; do main sleep 60 done +} + +if $check; then + loop-main else main fi