ZFS: scrub: cron --> systemd-timer (#341)
Co-authored-by: Michael Grote <michael.grote@posteo.de> Reviewed-on: mg/ansible#341 Co-authored-by: mg <michael.grote@posteo.de> Co-committed-by: mg <michael.grote@posteo.de>
This commit is contained in:
parent
78b315e031
commit
49f3c00885
9 changed files with 122 additions and 41 deletions
|
@ -21,7 +21,7 @@
|
||||||
# https://forum.restic.net/t/exclude-syntax-confusion/1531/12
|
# https://forum.restic.net/t/exclude-syntax-confusion/1531/12
|
||||||
restic_mount_timeout: "10 min"
|
restic_mount_timeout: "10 min"
|
||||||
restic_failure_delay: "30 s"
|
restic_failure_delay: "30 s"
|
||||||
restic_schedule: "0/6:00"
|
restic_schedule: "0/6:00" # alle 6 Stunden
|
||||||
restic_folders_to_backup: "/" # --one-file-system ist gesetzt, also werden weitere Dateisysteme nicht eigeschlossen, es sei denn sie werden hier explizit angegeben; https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files
|
restic_folders_to_backup: "/" # --one-file-system ist gesetzt, also werden weitere Dateisysteme nicht eigeschlossen, es sei denn sie werden hier explizit angegeben; https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files
|
||||||
restic_repository: "//fileserver2.grote.lan/restic"
|
restic_repository: "//fileserver2.grote.lan/restic"
|
||||||
restic_repository_password: "{{ lookup('keepass', 'restic_repository_password', 'password') }}"
|
restic_repository_password: "{{ lookup('keepass', 'restic_repository_password', 'password') }}"
|
||||||
|
|
|
@ -42,14 +42,6 @@
|
||||||
zfs_extra_arc_max_size: "2147483648" # 2GB in Bytes
|
zfs_extra_arc_max_size: "2147483648" # 2GB in Bytes
|
||||||
zfs_extra_zfs_pools:
|
zfs_extra_zfs_pools:
|
||||||
- name: "rpool"
|
- name: "rpool"
|
||||||
cron_minutes_zfs_scrub: "5"
|
systemd_timer_schedule: "*-01,04,07,10-01 23:00"
|
||||||
cron_hour_zfs_scrub: "23"
|
|
||||||
cron_day_of_month_zfs_scrub: "14"
|
|
||||||
cron_day_of_week_zfs_scrub: "*"
|
|
||||||
cron_month_zfs_scrub: "*/2"
|
|
||||||
- name: "hdd_vm_mirror"
|
- name: "hdd_vm_mirror"
|
||||||
cron_minutes_zfs_scrub: "10"
|
systemd_timer_schedule: "*-01,04,07,10-01 23:00"
|
||||||
cron_hour_zfs_scrub: "23"
|
|
||||||
cron_day_of_month_zfs_scrub: "14"
|
|
||||||
cron_day_of_week_zfs_scrub: "*"
|
|
||||||
cron_month_zfs_scrub: "*/2"
|
|
||||||
|
|
|
@ -177,17 +177,9 @@
|
||||||
zfs_extra_arc_max_size: "8589934592" # 8GB in Bytes
|
zfs_extra_arc_max_size: "8589934592" # 8GB in Bytes
|
||||||
zfs_extra_zfs_pools:
|
zfs_extra_zfs_pools:
|
||||||
- name: "rpool"
|
- name: "rpool"
|
||||||
cron_minutes_zfs_scrub: "0"
|
systemd_timer_schedule: "*-01,04,07,10-01 23:00" # jeden ersten eines jeden Quartals
|
||||||
cron_hour_zfs_scrub: "23"
|
|
||||||
cron_day_of_month_zfs_scrub: "14"
|
|
||||||
cron_day_of_week_zfs_scrub: "*"
|
|
||||||
cron_month_zfs_scrub: "*/2"
|
|
||||||
- name: "hdd_data_raidz"
|
- name: "hdd_data_raidz"
|
||||||
cron_minutes_zfs_scrub: "0"
|
systemd_timer_schedule: "*-01,04,07,10-01 23:00"
|
||||||
cron_hour_zfs_scrub: "23"
|
|
||||||
cron_day_of_month_zfs_scrub: "14"
|
|
||||||
cron_day_of_week_zfs_scrub: "*"
|
|
||||||
cron_month_zfs_scrub: "*/2"
|
|
||||||
|
|
||||||
### mgrote.zfs_sanoid
|
### mgrote.zfs_sanoid
|
||||||
sanoid_datasets:
|
sanoid_datasets:
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
**/**cache***/**
|
**/**cache***/**
|
||||||
**/**Cache***/**
|
**/**Cache***/**
|
||||||
**/**AppData***/**
|
**/**AppData***/**
|
||||||
# timeout for cifs mount; systemd notation
|
# timeout for cifs mount; systemd notation(systemd-analyze calendar "Sun *-0/2-* 23:00")
|
||||||
restic_mount_timeout: "10 min"
|
restic_mount_timeout: "10 min"
|
||||||
# delay for restartung task; systemd notation
|
# delay for restartung task; systemd notation(systemd-analyze calendar "Sun *-0/2-* 23:00")
|
||||||
restic_failure_delay: "30 s"
|
restic_failure_delay: "30 s"
|
||||||
# when should restic run; systemd notation
|
# when should restic run; systemd notation(systemd-analyze calendar "Sun *-0/2-* 23:00")
|
||||||
restic_schedule: "*:0/2"
|
restic_schedule: "*:0/2"
|
||||||
# welche ordner sollen gesichert werden
|
# welche ordner sollen gesichert werden
|
||||||
restic_folders_to_backup: "/usr/local /etc /root /var/www /home"
|
restic_folders_to_backup: "/usr/local /etc /root /var/www /home"
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
## mgrote.zfs_scrub
|
## mgrote.zfs_scrub
|
||||||
|
|
||||||
### Beschreibung
|
### Beschreibung
|
||||||
Richtet regelmaessige Scrubs(jeden Sonntag) ein.
|
Richtet regelmaessige Scrubs mit systemd-timer ein.
|
||||||
|
|
||||||
|
|
||||||
### getestet auf
|
### getestet auf
|
||||||
- [x] ProxMox 6.1
|
- [x] ProxMox 7*
|
||||||
|
|
||||||
### Variablen + Defaults
|
### Variablen + Defaults
|
||||||
- see [defaults](./defaults/main.yml)
|
- see [defaults](./defaults/main.yml)
|
||||||
- Variablen für ``mgrote.zfs_health/trim/scrub/zed/arc_mem/`` sind zusammengefasst unter zfs_extra_*
|
- Variablen für ``mgrote.zfs_health/trim/scrub/zed/arc_mem/`` sind zusammengefasst unter zfs_extra_*
|
||||||
- see [default-filter](./tasks/main.yml)
|
|
||||||
|
|
|
@ -1,20 +1,84 @@
|
||||||
---
|
---
|
||||||
- name: remove system scrub job #https://forum.proxmox.com/threads/script-sequential-zfs-scrub-for-cron.25124/
|
- name: template unit-template
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: zpool-scrub@.service.j2
|
||||||
|
dest: /etc/systemd/system/zpool-scrub@.service
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
register: template_unit
|
||||||
|
|
||||||
|
- name: template timer
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: zpool-scrub@.timer.j2
|
||||||
|
dest: "/etc/systemd/system/zpool-scrub@{{ item.name }}.timer"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
loop: "{{ zfs_extra_zfs_pools }}"
|
||||||
|
register: template_timer
|
||||||
|
|
||||||
|
- name: template mail.service
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: zpool-scrub-mail.service.j2
|
||||||
|
dest: "/etc/systemd/system/zpool-scrub-mail.service"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
register: template_mail
|
||||||
|
|
||||||
|
- name: systemctl daemon-reload
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
daemon_reload: yes
|
||||||
|
when:
|
||||||
|
- template_unit.changed
|
||||||
|
- template_timer.changed
|
||||||
|
|
||||||
|
- name: systemctl enable units - timer
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: "zpool-scrub@{{ item.name }}.timer"
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
loop: "{{ zfs_extra_zfs_pools }}"
|
||||||
|
when:
|
||||||
|
- template_unit.changed
|
||||||
|
- template_timer.changed
|
||||||
|
|
||||||
|
- name: systemctl enable units - mail
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: "zpool-scrub-mail.service"
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
when:
|
||||||
|
- template_mail
|
||||||
|
|
||||||
|
- name: systemctl start units
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: "zpool-scrub@{{ item.name }}.timer"
|
||||||
|
state: restarted
|
||||||
|
enabled: yes
|
||||||
|
loop: "{{ zfs_extra_zfs_pools }}"
|
||||||
|
when:
|
||||||
|
- template_unit.changed
|
||||||
|
- template_timer.changed
|
||||||
|
|
||||||
|
- name: remove old cronjobs
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.cron:
|
||||||
|
name: zfs-scrub - "{{ item.name }}"
|
||||||
|
state: absent
|
||||||
|
with_items: "{{ zfs_extra_zfs_pools }}"
|
||||||
|
|
||||||
|
- name: remove proxmox system scrub job #https://forum.proxmox.com/threads/script-sequential-zfs-scrub-for-cron.25124/
|
||||||
become: true
|
become: true
|
||||||
ansible.builtin.lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/cron.d/zfsutils-linux
|
path: /etc/cron.d/zfsutils-linux
|
||||||
state: absent
|
state: absent
|
||||||
line: '24 0 8-14 * * root [ $(date +\%w) -eq 0 ] && [ -x /usr/lib/zfs-linux/scrub ] && /usr/lib/zfs-linux/scrub'
|
line: '24 0 8-14 * * root [ $(date +\%w) -eq 0 ] && [ -x /usr/lib/zfs-linux/scrub ] && /usr/lib/zfs-linux/scrub'
|
||||||
|
|
||||||
- name: add cronjob "zfs-scrub"
|
|
||||||
become: yes
|
|
||||||
ansible.builtin.cron:
|
|
||||||
name: zfs-scrub - "{{ item.name }}"
|
|
||||||
state: present
|
|
||||||
job: "{{ zfs_extra_path_zpool }} scrub {{ item.name }}"
|
|
||||||
month: "{{ item.cron_month_zfs_scrub | default('*') }}"
|
|
||||||
weekday: "{{ item.cron_day_of_week_zfs_scrub | default('7') }}"
|
|
||||||
day: "{{ item.cron_day_of_month_zfs_scrub | default('*/21') }}"
|
|
||||||
hour: "{{ item.cron_hour_zfs_scrub | default('23') }}"
|
|
||||||
minute: "{{ item.cron_minutes_zfs_scrub | default('30') }}"
|
|
||||||
with_items: "{{ zfs_extra_zfs_pools }}"
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{{ file_header | default () }}
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Send a Mail in case of an error in zpool-scrub@.service.
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash -c '{{ zfs_extra_path_zpool }} status | mail -s "[ERROR] zpool scrub - %H" {{ empfaenger_mail }}'
|
13
roles/mgrote.zfs_scrub/templates/zpool-scrub@.service.j2
Normal file
13
roles/mgrote.zfs_scrub/templates/zpool-scrub@.service.j2
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{ file_header | default () }}
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Scrub ZFS pool "%i"
|
||||||
|
Requires=zfs.target
|
||||||
|
After=zfs.target
|
||||||
|
OnFailure=zpool-scrub-mail.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStartPre=-{{ zfs_extra_path_zpool }} scrub -s %i
|
||||||
|
ExecStart={{ zfs_extra_path_zpool }} scrub -w %i
|
||||||
|
ExecStop={{ zfs_extra_path_zpool }} scrub -s %i
|
13
roles/mgrote.zfs_scrub/templates/zpool-scrub@.timer.j2
Normal file
13
roles/mgrote.zfs_scrub/templates/zpool-scrub@.timer.j2
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{ file_header | default () }}
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Scrub ZFS pool "%i"
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar={{ item.systemd_timer_schedule }}
|
||||||
|
Persistent=true
|
||||||
|
Unit=zpool-scrub@%i.service
|
||||||
|
RandomizedDelaySec=30 min
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
Loading…
Reference in a new issue