cron: Do not error if already scrubbing

If a pool is already scrubbing, zpool scrub will return an error.  This
breaks the cron scrub script.  It outputs that error and then does not
scrub any further pools.

This change checks to see if the pool is scrubbing before attempting to
start a scrub.  This addresses long-running scrubs.  Note that a
"long-running" scrub here is not necessarily a month long.  If the
system is shut off or the pool is exported, the scrub will resume later.

(cherry picked from 41e457da7bfc837a52f3389cb6961bc6737b874d [0])

[0]  https://salsa.debian.org/zfsonlinux-team/zfs.git

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
Richard Laager 2020-03-20 17:28:41 +01:00 committed by Fabian Grünbichler
parent 9fda81f807
commit 4472322f60

View File

@ -1,9 +1,12 @@
#!/bin/sh -eu
# Scrub all healthy pools.
# Scrub all healthy pools that are not already scrubbing.
zpool list -H -o health,name 2>&1 | \
awk 'BEGIN {FS="\t"} {if ($1 ~ /^ONLINE/) print $2}' | \
while read pool
do
zpool scrub "$pool"
if ! zpool status "$pool" | grep -q "scrub in progress"
then
zpool scrub "$pool"
fi
done