Sleepy NAS

2022-05-31

Для тех, кого угораздило собрать себе NAS сервер на обычных комплектующих (считай - ПэКэ). Да, при всей моей приверженности ARM – всё ещё есть необходимость держать дома x86-железо.

Зачем

Вот вполне типичные проблемы эксплуатации “самосборного” NAS:

  • Шум БП ATX
  • Потребление энергии в холостом режиме

Но есть решение. Когда-то очень давно я наткнулся на проект, где автор “играет” с сетевым траффиком и, фактически, “будит” сервер по запросу и перенаправляет траффик на него.

Всё отлично, но, во-первых, проект давно почил в бозе, а во-вторых решение с перенаправлением трафика довольно сложное и не особо эффективное.

Однако, есть вторая часть проекта, которая позволяет измерять трафик на заданном интерфейсе и “укладывать спать” сервер при отсутствии оного.

Порядка пяти лет набор скриптов служил верой и правдой, отлично усыплял сервер и работал без сбоев. Но есть нюанс. Я совершенно не контролировал этот исходник и всё работало из серии “завелось и слава Б-гу”.

В рамках оптимизации было принято решение “всё переписать”. Цель – контроль и управляемость.

Требования

  • Linux
  • Работающая команда для перевода системы в спящий режим. Например, systemctl suspend
  • Способ возврата системы из спячки. Отлично подходит WOL (wake-on-lan)
  • Утилита sar (обычно входит в пакет sysstat). Версия имеет значение, подробности в ссылке на проект.
  • Python 3

Как работает

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

В этот момент система остановлена. Если произошло пробуждение, то скрипт ждёт короткое время (дает системе “отстояться”), после чего запускает процесс измерения повторно. Ну и так по кругу.

Проект itself

Как обычно, на GitHub:


В массы

В трубу