
Нет ничего страшнее, чем не заметить как развалился ZFS пул, или массив дисков (кому как удобнее) … Особенно когда речь идет о важных данных. Недавно был в такой ситуации, и решил настругать скрипт для мониторинга.
#! /bin/bash LOGFILE="/home/bear/zpool.log" TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"` POOLSTATUS=$(/sbin/zpool status | /bin/grep 'state:' | /usr/bin/cut -c 9-) /bin/echo "$TIMESTAMP $POOLSTATUS" >> $LOGFILE if [ "$POOLSTATUS" != ONLINE ] then /usr/bin/wget -q -O /dev/null 'https://api.telegram.org/bot831187410:AAEqggdfgr4aEdy3vIUFFuE68vk/sendMessage?chat_id=385210248&text=ZFS status: '$POOLSTATUS else exit 0 fi
Данный скрипт при каждом запуске записывает в лог файл /home/bear/zpool.log дату и состояние пула на момент проверки.
Если состояние НЕ соответствует ONLINE (считай авария, или ресильвер в процессе) — он отправляет сообщение в telegram, и в этом сообщении пишет статус на момент проверки.
Как настроить отправку сообщений в telegram, прочитать можно вот тут
Запуск данного скрипта делаем в crontab -e
1 12 * * * sh /home/bear/zpool-telegram >>/var/log/cronrun 2>&1
Часто запускать проверку смысла нет. Обратите внимание что иногда ZFS делает самообслуживание (ресильвер), и если скрипт будет запущен в этот момент, будет ложная тревога.
Выражаю благодарность своему другу Алексею за помощь в отладке этого скрипта.