Проверка ZFS

Проверяем вывод команды zpool status -x

Если он не дает "all pools are healthy" - высылаем отчет на e-mail.

Высылаем лог файл по вторникам в любома случае

  1. Download

    zfs-check.sh

    wget -P /root https://eas1804.github.io/Proxmox/sh/zfs-check.sh

    chmod +x /root/zfs-check.sh

    Задать e-mail в скрипте!

    zfs-check.service

    wget -P /etc/systemd/system/ https://eas1804.github.io/Proxmox/sh/zfs-check.service

    zfs-check.timer

    wget -P /etc/systemd/system/ https://eas1804.github.io/Proxmox/sh/zfs-check.timer

  2. cat /root/zfs-check.sh
    #!/bin/bash
    
    # Настройки
    MAIL_TO="admin@srv.com"
    
    IP=$(ip -4 addr show vmbr0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
    ZPOOL="rpool"
    HOSTNAME=$(hostname)
    LOG="/var/log/zfs.log"
    
    date >  ${LOG}
    zpool status >> ${LOG}
    zpool list  >> ${LOG}
    
    # Проверка статуса пула
    STATUS=$(zpool status -x)
    
    # Если есть проблемы (не "all pools are healthy")
    if [[ "$STATUS" != "all pools are healthy" ]]; then
    mutt -s "!!!PROBLEM ZFS. ip:$IP. ${HOSTNAME} " -- ${MAIL_TO} < ${LOG}
    fi
    
    
    # Отправить лог по вторникам
    # Получаем номер дня недели: 2 — вторник (1 — понедельник, 7 — воскресенье)
    DOW=$(date +%u)
    
    if [[ "$DOW" -eq 2 ]]; then
        echo "Вторник. Высылаю отчет на ${MAIL_TO} "
    mutt -s "ZFS OK. ${IP}, ${HOSTNAME}" -- "${MAIL_TO}" < "${LOG}"
    else
        echo "Другой день. Отчет не высылаю"
    fi
    exit 0
    
    
  3. cat /etc/systemd/system/zfs-check.service
    [Unit]
    Description=check ZFS status
    After=network.target
    
    [Service]
    Type=oneshot
    ExecStart=/root/zfs-check.sh
    WorkingDirectory=/root
    Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    
    [Install]
    WantedBy=multi-user.target
    
  4. cat /etc/systemd/system/zfs-check.timer
    [Unit]
    Description= check ZFS status
    [Timer]
    OnBootSec=5min
    OnCalendar=*-*-* 09:03:00
    [Install]
    WantedBy=timers.target
    
  5. systemctl
    systemctl  daemon-reload
    systemctl start zfs-check.service
    systemctl start zfs-check.timer
    systemctl enable  zfs-check.timer
    systemctl list-timers --all | grep  zfs-check.timer