Add zfs scrubbing and filesystem trim

This commit is contained in:
Wojciech Kozlowski 2022-08-28 04:02:18 +02:00
parent 6f87c559e0
commit e1beb5e38c
7 changed files with 162 additions and 0 deletions

View File

@ -114,3 +114,89 @@
daemon_reload: true daemon_reload: true
when: when:
systemd_status_mail_service_file is changed systemd_status_mail_service_file is changed
# ----------------------------------------------------------------------------------------------
# ZFS scrubbing.
# ----------------------------------------------------------------------------------------------
- name: Zpool status mail script
template:
src: ./root/usr/local/bin/zpool-status-mail.j2
dest: /usr/local/bin/zpool-status-mail
mode: 0755
- name: Zfs scrub service file
copy:
src: ./root/etc/systemd/system/zfs-scrub@.service
dest: /etc/systemd/system/zfs-scrub@.service
mode: 0644
register: systemd_zfs_scrub_service_file
- name: Zfs scrub timer file
copy:
src: ./root/etc/systemd/system/zfs-scrub-monthly@.timer
dest: /etc/systemd/system/zfs-scrub-monthly@.timer
mode: 0644
register: systemd_zfs_scrub_monthly_timer_file
- name: SystemD daemon reload
systemd:
daemon_reload: true
when:
systemd_zfs_scrub_service_file is changed or
systemd_zfs_scrub_monthly_timer_file is changed
- name: Enable zfs scrub of bpool
service:
name: zfs-scrub-monthly@bpool.timer
enabled: yes
state: started
- name: Enable zfs scrub of rpool
service:
name: zfs-scrub-monthly@rpool.timer
enabled: yes
state: started
# ----------------------------------------------------------------------------------------------
# Filesystem TRIM.
# ----------------------------------------------------------------------------------------------
- name: Enable fstrim
service:
name: fstrim.timer
enabled: yes
state: started
- name: Zfs trim service file
copy:
src: ./root/etc/systemd/system/zfs-trim@.service
dest: /etc/systemd/system/zfs-trim@.service
mode: 0644
register: systemd_zfs_trim_service_file
- name: Zfs trim timer file
copy:
src: ./root/etc/systemd/system/zfs-trim-monthly@.timer
dest: /etc/systemd/system/zfs-trim-monthly@.timer
mode: 0644
register: systemd_zfs_trim_monthly_timer_file
- name: SystemD daemon reload
systemd:
daemon_reload: true
when:
systemd_zfs_trim_service_file is changed or
systemd_zfs_trim_monthly_timer_file is changed
- name: Enable zfs trim of bpool
service:
name: zfs-trim-monthly@bpool.timer
enabled: yes
state: started
- name: Enable zfs trim of rpool
service:
name: zfs-trim-monthly@rpool.timer
enabled: yes
state: started

View File

@ -0,0 +1,8 @@
[Unit]
Description=Status email for %i
[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-mail %i
User=nobody
Group=systemd-journal

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,17 @@
[Unit]
Description=Zpool scrub on %i
Documentation=man:zpool-scrub(8)
Requires=zfs.target
After=zfs.target
ConditionACPower=true
ConditionPathIsDirectory=/sys/module/zfs
OnFailure=status-mail@%n.service
[Service]
EnvironmentFile=-/etc/default/zfs
ExecStart=/bin/sh -c '\
if /usr/sbin/zpool status %i | grep -q "scrub in progress"; then\
exec /usr/sbin/zpool wait -t scrub %i;\
else exec /usr/sbin/zpool scrub -w %i; fi'
ExecStop=-/bin/sh -c '/usr/sbin/zpool scrub -p %i 2>/dev/null || true'
ExecStopPost=/bin/sh -c '/usr/local/bin/zpool-status-mail %i'

View File

@ -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

View File

@ -0,0 +1,16 @@
[Unit]
Description=Zpool trim on %i
Documentation=man:zpool-trim(8)
Requires=zfs.target
After=zfs.target
ConditionACPower=true
ConditionPathIsDirectory=/sys/module/zfs
OnFailure=status-mail@%n.service
[Service]
EnvironmentFile=-/etc/default/zfs
ExecStart=/bin/sh -c '\
if /usr/sbin/zpool status %i | grep -q "(trimming)"; then\
exec /usr/sbin/zpool wait -t trim %i;\
else exec /usr/sbin/zpool trim -w %i; fi'
ExecStop=-/bin/sh -c '/usr/sbin/zpool trim -s %i 2>/dev/null || true'

View File

@ -0,0 +1,11 @@
#!/bin/sh
/usr/sbin/sendmail -t <<SYSTEMDMAIL
To: root
From: systemd <{{ hostname }}>
Subject: zpool status $1
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
$(zpool status "$1")
SYSTEMDMAIL