ZFS - Scrub periódico con notificación vía ntfy
Scrub semanal de ZFS con systemd + notificación ntfy
Para automatizar un scrub de todos los pools ZFS cada domingo de madrugada, se usa un script y un timer systemd.
Guardar el script
Guardar en ~/dotfiles/sbin/zfs-scrub-all y dar permisos de ejecución:
chmod +x ~/dotfiles/sbin/zfs-scrub-allCrear symlink en /usr/local/sbin para que lo use systemd:
sudo ln -s /ruta/dotfiles/sbin/zfs-scrub-all /usr/local/sbin/zfs-scrub-allUnidad systemd
Archivo /etc/systemd/system/zfs-scrub.service:
[Unit]
Description=Run ZFS scrub on all pools and notify via ntfy
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
Environment=NTFY_URL=https://ntfy.sh/canal
ExecStart=/usr/local/sbin/zfs-scrub-all
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7Temporizados
Archivo /etc/systemd/system/zfs-scrub.timer:
[Unit]
Description=Weekly ZFS scrub (Sundays 03:30) with jitter
[Timer]
OnCalendar=Sun 03:30
RandomizedDelaySec=45m
Persistent=true
[Install]
WantedBy=timers.targetActivar
sudo systemctl daemon-reload
sudo systemctl enable --now zfs-scrub.timerVerificar
systemctl list-timers | grep zfs-scrub
sudo systemctl start zfs-scrub.service # prueba manual
journalctl -u zfs-scrub.service -n 50 --no-pagerEl script
zfs-scrub-alllanza scrubs en todos los pools, espera a que terminen y envía notificación al canalomven ntfy.
Ejecutar de forma puntual
sudo systemd-run --on-calendar="03:30" --unit=zfs-scrub-once /usr/local/sbin/zfs-scrub-allEliminar temporizador
sudo systemctl stop zfs-scrub-once.timer
sudo systemctl disable zfs-scrub-once.timer
sudo systemctl reset-failed zfs-scrub-once.timerEditar y volver a habilitar
Editamos el fichero /etc/systemd/system/zfs-scrub.timer
[Timer]
OnCalendar=Sun 01:00
RandomizedDelaySec=45m
Persistent=trueRecargamos y reactivamos
sudo systemctl daemon-reload
sudo systemctl enable --now zfs-scrub.timer