Мониторинг состояния HDD, SSD и NVMe для самосборных Linux-серверов с SMART-тестами и уведомлениями. https://e-v-s.ru/
  • Python 96.6%
  • Shell 3.4%
Найти файл
2026-09-08 00:55:34 +03:00
.github/workflows Initial release 1.0.0 2026-09-08 00:55:34 +03:00
deploy-examples Initial release 1.0.0 2026-09-08 00:55:34 +03:00
tests Initial release 1.0.0 2026-09-08 00:55:34 +03:00
.gitignore Initial release 1.0.0 2026-09-08 00:55:34 +03:00
ARCHITECTURE.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
CHANGELOG.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
config.example.toml Initial release 1.0.0 2026-09-08 00:55:34 +03:00
CONFIGURATION.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
INSTALL.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
install.sh Initial release 1.0.0 2026-09-08 00:55:34 +03:00
LICENSE Initial release 1.0.0 2026-09-08 00:55:34 +03:00
NOTIFICATIONS.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
pyproject.toml Initial release 1.0.0 2026-09-08 00:55:34 +03:00
README.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
SECURITY.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
smart_monitor.py Initial release 1.0.0 2026-09-08 00:55:34 +03:00
SYSTEMD.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
TESTING.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
TROUBLESHOOTING.md Initial release 1.0.0 2026-09-08 00:55:34 +03:00
VERSION Initial release 1.0.0 2026-09-08 00:55:34 +03:00

SMART Monitor

SMART Monitor — монитор состояния ATA/SATA HDD, SATA SSD и NVMe для обычных Linux-серверов и самосборных хранилищ.

По назначению это аналог встроенного контроля дисков в готовых NAS-системах вроде Synology: регулярное чтение SMART, короткие и длительные самотесты, контроль их завершения и уведомления о проблемах. Разница в том, что SMART Monitor предназначен для обычного Linux и не привязан к конкретному производителю NAS. Проект независимый и не связан с Synology.

На самосборном сервере такую схему обычно приходится собирать вручную из smartctl, cron или systemd и нескольких скриптов. SMART Monitor объединяет эту работу в одну понятную службу.

Возможности

  • проверка основных SMART-показателей HDD и SATA SSD;
  • настраиваемые предупреждения по температуре;
  • проверка состояния и износа NVMe;
  • настраиваемые пороги износа NVMe;
  • запуск коротких и длительных самотестов;
  • одновременный контроль нескольких накопителей;
  • ожидание завершения теста и проверка его результата;
  • автоматическая остановка запущенного программой теста при превышении времени или потере контроля;
  • защита от запуска второго экземпляра;
  • уведомления через Telegram, Matrix и MAX;
  • необязательное резервное SMS через совместимый модем Huawei HiLink;
  • ежедневная проверка состояния, еженедельный короткий и ежемесячный длительный тест через systemd;
  • коды завершения, пригодные для systemd, Zabbix и других систем наблюдения;
  • работа только на стандартной библиотеке Python — дополнительных Python-пакетов для самой программы нет.

Что проверяется

Для ATA-накопителей программа контролирует:

  • общий результат SMART;
  • переназначенные сектора;
  • сектора, ожидающие переназначения;
  • неисправимые сектора;
  • ошибки CRC;
  • температуру;
  • результаты короткого и длительного самотеста.

Для NVMe контролируются:

  • общий результат SMART;
  • Critical Warning;
  • износ;
  • доступный резерв;
  • ошибки носителя и целостности данных;
  • журнал ошибок;
  • результаты короткого и длительного самотеста.

Поддерживаемые накопители

Тип Поддержка
ATA/SATA HDD да
SATA SSD да
NVMe да
ATA через USB/SATA-мост да, если устройство доступно через smartctl; при необходимости используется device_type
SAS/SCSI в версии 1.0.0 не заявляется
Диски за аппаратным RAID-контроллером в версии 1.0.0 не заявляются

Требования

  • Linux;
  • Python 3.11 или новее;
  • smartmontools и команда smartctl; для самотестов NVMe требуется smartmontools 7.4 или новее;
  • root для запуска самотестов и чтения SMART на большинстве систем;
  • systemd для установки штатной службы и расписания из комплекта проекта. Саму программу можно запускать вручную и без systemd.

Проверялось на Debian 13, Python 3.13 и smartmontools 7.4. ATA, USB/SATA и NVMe проверялись на реальном сервере.

Быстрый запуск

apt install python3 smartmontools

git clone https://github.com/egorowitaliy/smart-monitor.git
cd smart-monitor

./install.sh
mcedit /etc/smart-monitor/config.toml

Сначала выполните проверку без уведомлений и без запуска самотестов:

smart-monitor check none --config /etc/smart-monitor/config.toml

Затем короткий тест:

smart-monitor short none --config /etc/smart-monitor/config.toml

Если всё работает, включите расписание:

systemctl enable --now \
  smart-monitor-check.timer \
  smart-monitor-short.timer \
  smart-monitor-long.timer

Расписание по умолчанию

Примеры systemd настроены так:

  • ежедневная проверка состояния — 09:00;
  • короткий самотест — каждое воскресенье в 03:00;
  • длительный самотест — первое воскресенье месяца в 04:00.

Расписание можно изменить обычным редактированием файлов таймеров.

Уведомления

Обычная ежедневная проверка ничего не отправляет, пока всё исправно. При проблеме сообщение отправляется сразу, если в default_destination настроен хотя бы один канал. В примере конфигурации автоматические уведомления изначально отключены (none), чтобы новая установка не считала ненастроенные каналы ошибкой.

Длительный тест всегда формирует отчёт. Для ручной проверки любого режима можно добавить --notify.

Поддерживаются Telegram, Matrix и MAX. Если включено резервное SMS, оно используется, когда не сработал ни один выбранный внешний канал Telegram/MAX.

Длинные отчёты для Telegram и MAX автоматически разбиваются на несколько сообщений.

Подробнее: NOTIFICATIONS.md.

Что проект не делает

SMART Monitor не управляет RAID, не заменяет smartd, не ведёт долговременную базу истории и не предоставляет веб-интерфейс. Он решает более узкую задачу: регулярно проверяет накопители, контролирует самотесты и сообщает о проблемах.

Коды завершения

Код Значение
0 проблем не обнаружено
1 обнаружена проблема с накопителем или его самотестом
2 программа не смогла корректно выполнить проверку
3 требуемое уведомление не удалось доставить
4 запуск пропущен, потому что другой экземпляр уже работает

Для systemd код 1 добавлен в SuccessExitStatus: обнаруженная и уже обработанная проблема не переводит весь сервер в состояние degraded. Штатная служба запускается с --wait-lock, поэтому пересекающиеся задания не пропускаются, а ждут завершения предыдущего. Код 4 остаётся полезным для ручных запусков без ожидания блокировки.

Документация

  • INSTALL.md — установка и обновление;
  • CONFIGURATION.md — все параметры конфигурации;
  • SYSTEMD.md — служба и расписание;
  • NOTIFICATIONS.md — Telegram, Matrix, MAX и резервное SMS;
  • ARCHITECTURE.md — как программа запускает и контролирует самотесты;
  • TROUBLESHOOTING.md — типовые проблемы;
  • SECURITY.md — права, секреты и ограничения;
  • TESTING.md — проверки кода, systemd и реального сервера.

Важно

SMART не способен предсказать все отказы накопителя. Нормальный SMART не заменяет резервные копии. Длительный самотест также создаёт дополнительную нагрузку и на некоторых дисках может идти заметно дольше расчётного времени, особенно при обычной работе сервера.

Лицензия

Проект распространяется по лицензии MIT. Программу можно использовать, изменять и распространять, но она предоставляется без каких-либо гарантий. Автор не несёт ответственности за ущерб, потерю данных или иные последствия использования программы в пределах, предусмотренных лицензией.

Полный текст: LICENSE.

Автор

Разработка: Виталий Егоров

E-mail: egorowitaliy@gmail.com