Как не потерять данные при скачке напряжения или почему NUT живет уже 20 лет

30 июн 2026
4,385
486
58
1 неделя

Представьте: вы сидите дома, дописываете сложный фикс, компиляция проекта в самом разгаре, и вдруг — щелчок. Свет моргнул, сервер под столом жалобно пискнул и ушел в ребут. В лучшем случае вы потеряли полчаса работы, в худшем — файловая система сказала «прощай». Казалось бы, для этого придумали ИБП (источники бесперебойного питания). Но купить «бесперебойник» — это только половина дела. Нужно еще заставить его корректно выключить систему, когда заряд батареи подойдет к концу.

Тут-то мы и сталкиваемся с зоопарком протоколов. У каждого производителя свои кабели, свои USB-дескрипторы и свои капризы. Проект NUT (Network UPS Tools) пытается навести в этом хаосе порядок уже больше двух десятилетий.

Что это такое и зачем оно в 2024 году

NUT — это набор драйверов и клиентских утилит, которые превращают ваш ИБП в сетевой ресурс. По сути, это абстракция. Вам становится неважно, подключен ли бесперебойник по древнему RS-232, через USB или висит где-то в стойке с SNMP-картой. NUT умеет опрашивать железку и отдавать данные в едином формате.

Главная фишка проекта — клиент-серверная архитектура. Один сервер (upsd) общается с железом через драйверы, а куча клиентов (upsmon) на разных машинах могут слушать этот сервер. Если у вас один ИБП питает и основной ПК, и NAS, и роутер, NUT — единственный вменяемый способ выключить их все одновременно и безопасно.

Как это работает внутри

Архитектура проекта разделена на три четких слоя. Это помогает поддерживать тысячи моделей устройств, не переписывая логику мониторинга каждый раз.

Реклама
  1. Драйверы. Это «рабочие лошадки», которые говорят на языке конкретного железа. Есть драйвер usbhid-ups для большинства современных бытовых ИБП, есть snmp-ups для энтерпрайза и даже blazer_ser для старых китайских моделей.
  2. Сервер (upsd). Он собирает данные от драйверов и ждет подключений. Он не знает, как именно драйвер получил вольтаж батареи, он просто транслирует это значение дальше.
  3. Клиенты. Самый популярный — upsmon. Он следит за статусом и выполняет команды: например, запускает скрипт завершения работы, когда уровень заряда падает ниже 10%.

Кстати, проект настолько серьезный, что их протокол управления ИБП недавно был опубликован IETF как информационный RFC 9271. Это уровень, до которого дорастают единицы open-source инструментов.

Практическая польза для разработчика

Если вы держите дома домашний сервер или небольшую лабу, NUT избавляет от необходимости ставить проприетарный софт от производителей (который часто выглядит как привет из Windows 98 и работает только под ней).

Вот пара сценариев, где NUT незаменим:

  • Умный дом. Можно прокинуть данные из NUT в Home Assistant или Grafana через MQTT или InfluxDB. Вы будете видеть графики нагрузки, входного напряжения и примерное время жизни от батареи.
  • Безопасный Shutdown. Можно настроить сложную логику: сначала выключаем тяжелые виртуалки, потом СХД, и в самом конце — управляющий сервер.
  • Удаленный мониторинг. Если вы админите серверы в разных локациях, NUT позволяет видеть состояние всех ИБП в одной консоли.

Как начать пользоваться

В большинстве Linux-дистрибутивов NUT ставится одной командой из репозитория. Но настройка потребует правки конфигов в /etc/nut.

Минимальный конфиг ups.conf выглядит примерно так:

[myups]
    driver = usbhid-ups
    port = auto
    desc = "Мой домашний ИБП"

После этого запускается драйвер и сервер, и вы можете проверить статус командой upsc myups:

battery.charge: 100
battery.runtime: 1250
device.mfr: APC
device.model: Back-UPS ES 700
input.voltage: 232.0
ups.status: OL (On Line)

Если увидели OL — значит, всё хорошо, питание идет от сети. Если OB (On Battery) — пора сохранять файлы.

Стоит ли оно того

Проект написан на C, он очень легкий и стабильный. Да, порог вхождения выше, чем у какой-нибудь GUI-утилиты, потому что придется почитать документацию и разобраться, какой драйвер подходит именно вам. Список поддерживаемого железа в NUT огромен, но иногда попадаются специфические модели, которые требуют «танцев с бубном» в конфигах.

Если у вас в распоряжении больше одного устройства, питающегося от ИБП, или вы хотите интегрировать мониторинг питания в свои скрипты — NUT обязателен к изучению. Это тот случай, когда старый и проверенный инструмент справляется с задачей лучше любых новомодных аналогов.

Загляните в их репозиторий, и если проект вам поможет спасти данные (а он поможет), не забудьте поставить им звезду — авторам это действительно важно для привлечения спонсоров и продолжения разработки.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.