]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Add weekly and monthly systemd timers for trimming
authorJulian Brunner <julian.brunner@gmail.com>
Sat, 11 Jun 2022 01:22:14 +0000 (03:22 +0200)
committerGitHub <noreply@github.com>
Sat, 11 Jun 2022 01:22:14 +0000 (18:22 -0700)
On machines using systemd, trim timers can be enabled on a per-pool
basis. Weekly and monthly timer units are provided. Timers can be
enabled as follows:

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

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

The manpage zpool-trim has been updated accordingly.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Julian Brunner <julian.brunner@gmail.com>
Closes #13544

etc/Makefile.am
etc/systemd/system/zfs-trim-monthly@.timer.in [new file with mode: 0644]
etc/systemd/system/zfs-trim-weekly@.timer.in [new file with mode: 0644]
etc/systemd/system/zfs-trim@.service.in [new file with mode: 0644]
man/man8/zpool-trim.8

index 53064eb6f6ea350c068c40fc446db7d871bbd4d8..b4b3ae1f5798ea638ce5c8d2210d922d587e0fbe 100644 (file)
@@ -59,6 +59,9 @@ systemdunit_DATA = \
        %D%/systemd/system/zfs-scrub-monthly@.timer \
        %D%/systemd/system/zfs-scrub-weekly@.timer \
        %D%/systemd/system/zfs-scrub@.service \
+       %D%/systemd/system/zfs-trim-monthly@.timer \
+       %D%/systemd/system/zfs-trim-weekly@.timer \
+       %D%/systemd/system/zfs-trim@.service \
        %D%/systemd/system/zfs-share.service \
        %D%/systemd/system/zfs-volume-wait.service \
        %D%/systemd/system/zfs-volumes.target \
diff --git a/etc/systemd/system/zfs-trim-monthly@.timer.in b/etc/systemd/system/zfs-trim-monthly@.timer.in
new file mode 100644 (file)
index 0000000..8c13ffb
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Monthly zpool trim timer for %i
+Documentation=man:zpool-trim(8)
+
+[Timer]
+OnCalendar=monthly
+Persistent=true
+RandomizedDelaySec=1h
+Unit=zfs-trim@%i.service
+
+[Install]
+WantedBy=timers.target
diff --git a/etc/systemd/system/zfs-trim-weekly@.timer.in b/etc/systemd/system/zfs-trim-weekly@.timer.in
new file mode 100644 (file)
index 0000000..dced3d8
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Weekly zpool trim timer for %i
+Documentation=man:zpool-trim(8)
+
+[Timer]
+OnCalendar=weekly
+Persistent=true
+RandomizedDelaySec=1h
+Unit=zfs-trim@%i.service
+
+[Install]
+WantedBy=timers.target
diff --git a/etc/systemd/system/zfs-trim@.service.in b/etc/systemd/system/zfs-trim@.service.in
new file mode 100644 (file)
index 0000000..423fb44
--- /dev/null
@@ -0,0 +1,15 @@
+[Unit]
+Description=zpool trim on %i
+Documentation=man:zpool-trim(8)
+Requires=zfs.target
+After=zfs.target
+ConditionACPower=true
+ConditionPathIsDirectory=/sys/module/zfs
+
+[Service]
+EnvironmentFile=-@initconfdir@/zfs
+ExecStart=/bin/sh -c '\
+if @sbindir@/zpool status %i | grep -q "(trimming)"; then\
+exec @sbindir@/zpool wait -t trim %i;\
+else exec @sbindir@/zpool trim -w %i; fi'
+ExecStop=-/bin/sh -c '@sbindir@/zpool trim -s %i 2>/dev/null || true'
index d9a7b4400301a5b48c9bce3a7ccba68ce218348b..ad0909a3b08dd91ac9c548ee652e26bd771a3e72 100644 (file)
@@ -84,8 +84,29 @@ with no flags on the relevant target devices.
 .It Fl w , -wait
 Wait until the devices are done being trimmed before returning.
 .El
+.Sh PERIODIC TRIM
+On machines using systemd, trim timers can be enabled on a 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-trim-\fIweekly\fB@\fIrpool\fB.timer
+.Cm --now
+.It Xo
+.Xc
+.Nm systemctl
+.Cm enable
+.Cm zfs-trim-\fImonthly\fB@\fIotherpool\fB.timer
+.Cm --now
+.El
 .
 .Sh SEE ALSO
+.Xr systemd.timer 5 ,
 .Xr zpoolprops 7 ,
 .Xr zpool-initialize 8 ,
 .Xr zpool-wait 8