- Python 96.6%
- Shell 3.4%
| .github/workflows | ||
| deploy-examples | ||
| tests | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| CHANGELOG.md | ||
| config.example.toml | ||
| CONFIGURATION.md | ||
| INSTALL.md | ||
| install.sh | ||
| LICENSE | ||
| NOTIFICATIONS.md | ||
| pyproject.toml | ||
| README.md | ||
| SECURITY.md | ||
| smart_monitor.py | ||
| SYSTEMD.md | ||
| TESTING.md | ||
| TROUBLESHOOTING.md | ||
| VERSION | ||
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