diff --git a/common/defaults/main.yml b/common/defaults/main.yml index 1f8fcb6..6c4ce47 100755 --- a/common/defaults/main.yml +++ b/common/defaults/main.yml @@ -8,6 +8,8 @@ ipv6_accept_ra_interfaces: [] disk_maintenance: # systemd OnCalendar for fstrim.timer; unset keeps the distribution schedule. fstrim_on_calendar: + # Mountpoints fstrim.service trims; unset trims every fstab filesystem. + fstrim_mountpoints: # Cron "minute hour" of the monthly ZFS trim and scrub from zfsutils-linux; unset keeps 00:24. zfs_cron_time: diff --git a/common/tasks/disk_maintenance.yml b/common/tasks/disk_maintenance.yml index 6e3719e..4a29a38 100644 --- a/common/tasks/disk_maintenance.yml +++ b/common/tasks/disk_maintenance.yml @@ -25,6 +25,36 @@ daemon_reload: yes state: restarted +- name: Create the fstrim service drop-in directory + when: disk_maintenance.fstrim_mountpoints | default(none) is not none + file: + path: /etc/systemd/system/fstrim.service.d + state: directory + +- name: Set the fstrim mountpoints + when: disk_maintenance.fstrim_mountpoints | default(none) is not none + copy: + dest: /etc/systemd/system/fstrim.service.d/mountpoints.conf + content: | + [Service] + ExecStart= + {% for m in disk_maintenance.fstrim_mountpoints %} + ExecStart=/sbin/fstrim --verbose --quiet-unsupported {{ m }} + {% endfor %} + register: fstrim_mountpoints + +- name: Trim every fstab filesystem + when: disk_maintenance.fstrim_mountpoints | default(none) is none + file: + path: /etc/systemd/system/fstrim.service.d/mountpoints.conf + state: absent + register: fstrim_mountpoints_removed + +- name: Reload systemd for the fstrim mountpoints + when: fstrim_mountpoints.changed or fstrim_mountpoints_removed.changed + systemd: + daemon_reload: yes + - name: Schedule the monthly ZFS trim and scrub when: disk_maintenance.zfs_cron_time | default(none) is not none lineinfile: