systemd: add weekly and monthly scrub timers

Timers can be enabled as follows:

systemctl enable zfs-scrub-weekly@rpool.timer --now
systemctl enable zfs-scrub-monthly@datapool.timer --now

Each timer will pull in zfs-scrub@${poolname}.service, which is not
schedule-specific.

Added PERIODIC SCRUB section to zpool-scrub.8.

Reviewed-by: Richard Laager <rlaager@wiktel.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Georgy Yakovlev <gyakovlev@gentoo.org>
Closes #12193
This commit is contained in:
Georgy Yakovlev 2021-12-16 11:47:22 -08:00 committed by Tony Hutter
parent d76917b2ec
commit f471a0a0a7
6 changed files with 64 additions and 1 deletions

View File

@ -1,3 +1,4 @@
*.service *.service
*.target *.target
*.preset *.preset
*.timer

View File

@ -12,7 +12,10 @@ systemdunit_DATA = \
zfs-volume-wait.service \ zfs-volume-wait.service \
zfs-import.target \ zfs-import.target \
zfs-volumes.target \ zfs-volumes.target \
zfs.target zfs.target \
zfs-scrub-monthly@.timer \
zfs-scrub-weekly@.timer \
zfs-scrub@.service
SUBSTFILES += $(systemdpreset_DATA) $(systemdunit_DATA) SUBSTFILES += $(systemdpreset_DATA) $(systemdunit_DATA)

View File

@ -0,0 +1,12 @@
[Unit]
Description=Monthly zpool scrub timer for %i
Documentation=man:zpool-scrub(8)
[Timer]
OnCalendar=monthly
Persistent=true
RandomizedDelaySec=1h
Unit=zfs-scrub@%i.service
[Install]
WantedBy=timers.target

View File

@ -0,0 +1,12 @@
[Unit]
Description=Weekly zpool scrub timer for %i
Documentation=man:zpool-scrub(8)
[Timer]
OnCalendar=weekly
Persistent=true
RandomizedDelaySec=1h
Unit=zfs-scrub@%i.service
[Install]
WantedBy=timers.target

View File

@ -0,0 +1,14 @@
[Unit]
Description=zpool scrub on %i
Documentation=man:zpool-scrub(8)
Requires=zfs.target
After=zfs.target
ConditionACPower=true
ConditionPathIsDirectory=/sys/module/zfs
[Service]
ExecStart=/bin/sh -c '\
if @sbindir@/zpool status %i | grep "scrub in progress"; then\
exec @sbindir@/zpool wait -t scrub %i;\
else exec @sbindir@/zpool scrub -w %i; fi'
ExecStop=-/bin/sh -c '@sbindir@/zpool scrub -p %i 2>/dev/null || true'

View File

@ -116,8 +116,29 @@ scanned at 100M/s, and 68.4M of that file data has been
scrubbed sequentially at 10.0M/s. scrubbed sequentially at 10.0M/s.
.El .El
.El .El
.Sh PERIODIC SCRUB
On machines using systemd, scrub timers can be enabled on per-pool basis.
.Nm weekly
and
.Nm monthly
timer units are provided.
.Bl -tag -width Ds
.It Xo
.Xc
.Nm systemctl
.Cm enable
.Cm zfs-scrub-\fIweekly\fB@\fIrpool\fB.timer
.Cm --now
.It Xo
.Xc
.Nm systemctl
.Cm enable
.Cm zfs-scrub-\fImonthly\fB@\fIotherpool\fB.timer
.Cm --now
.El
. .
.Sh SEE ALSO .Sh SEE ALSO
.Xr systemd.timer 5 ,
.Xr zpool-iostat 8 , .Xr zpool-iostat 8 ,
.Xr zpool-resilver 8 , .Xr zpool-resilver 8 ,
.Xr zpool-status 8 .Xr zpool-status 8