Сервер, о котором этот цикл, — не стойка и не мини-ПК, а ноутбук 2013 года, который иначе пылился бы на полке. Ноутбук неожиданно хорош как домашний сервер: тихий, ест мало, а его батарея — готовый источник бесперебойного питания. Но чтобы он работал круглые сутки и сам поднимался после отключения света, пришлось пройтись по BIOS, systemd и роутеру. А через полтора месяца он «сам перезагрузился», и следствие заняло вечер.
Это вторая часть цикла «Домашняя инфраструктура».
Что за железо
| Узел | Что стоит | Что это значит |
|---|---|---|
| процессор | Core i3-3217U: 2 ядра, 4 потока, 1,8 ГГц без турбо, 17 Вт | на полтора десятка сайтов с кэшем хватает; тяжёлые сборки фронта — уже ощутимо |
| память | 4 ГБ DDR3L, второй слот свободен, максимум 16 | главное узкое место; система видит около 3,2 ГБ |
| диск | SSD 128 ГБ, SMART без ошибок | место кончается раньше всего остального |
| сеть | гигабитный Ethernet | Wi-Fi, Bluetooth и дискретную видеокарту отключили в modprobe.d |
Попутная находка: у этого i3 нет аппаратного ускорения AES — Intel вырезал его у младших моделей поколения. Шифровать диск целиком я не стал: на таком процессоре это заметно медленнее, и вдобавок шифрование требует пароля при загрузке, а сервер должен вставать сам.
BIOS: чтобы вставал без человека
- Wake on LAN — включён. Сначала я записал «в этой модели WoL нет» — оказалось, пункт просто спрятан в BIOS;
- пароль администратора BIOS — задан, пароль на загрузку — выключен. Иначе после пропажи света машина будет ждать ввода пароля у экрана;
- загрузка по сети — выключена, режим диска — AHCI, меню загрузки по F12 — включено (у этой модели по умолчанию выключено, а без него не загрузиться с флешки).
systemd: не спать, не реагировать на крышку
Ноутбук по умолчанию засыпает, когда закрывают крышку или долго не трогают клавиатуру. На сервере это авария. Сон запрещаем целиком и отключаем реакции:
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# /etc/systemd/logind.conf.d/99-server.conf
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore # ноутбук всегда от сети — работает именно эта строка
HandleLidSwitchDocked=ignore
IdleAction=ignore
Экран при открытой крышке пусть гаснет сам: через параметр ядра consoleblank=10800 в GRUB (три часа). setterm --blank больше 60 минут не умеет.
Свет пропал — кто включит сервер
Пока свет моргнул на минуту, ноутбук просто доработает на батарее. Если батарея села, после возвращения питания он сам не включится. Тут помогает роутер: он поднимается первым и умеет будить машины пакетом Wake on LAN.
Со стороны Linux WoL надо разрешить у сетевой карты — в netplan строкой wakeonlan: true и на всякий случай службой, которая при старте делает ethtool -s <интерфейс> wol g. Проверка: ethtool <интерфейс> | grep Wake-on должен показать g.
Со стороны роутера MikroTik — скрипт и планировщик раз в пять минут: два пинга до сервера, если ни одного ответа — разбудить и записать в журнал.
/system script add name=wake-server source={
:if ([/ping 192.168.88.10 count=2] = 0) do={
/tool wol mac=AA:BB:CC:DD:EE:FF interface=bridge
:log warning "server down, WoL sent"
}
}
/system scheduler add name=wake-server interval=5m on-event=wake-server
Хотите на время держать сервер выключенным — отключите планировщик на роутере, иначе через пять минут он включит машину обратно.
Проверка перезагрузкой: весь стек поднялся сам. Перед любыми работами с выключением полезно убедиться, что у всех контейнеров есть политика перезапуска и службы стоят в автозагрузке. У нас при последней проверке у 30 контейнеров из 30 политика была — 10 always, 20 unless-stopped.
«Сервер сам перезагрузился»
Через полтора месяца аптайм показал девять с половиной суток, хотя я ничего не перезагружал так давно. Подозреваемых было четыре: ядро, автоматические обновления, питание, крон. Сначала — где искать следы. И тут три ловушки подряд:
lastпуст: в Ubuntu 26.04 нетwtmp;journalctl --list-bootsбесполезен: при лимите журнала 500 МБ и примерно 140 МБ в неделю он помнит около семи с половиной дней, а нужная загрузка была раньше;- текстовые журналы
/var/log/syslog.Nиauth.log.Nна месте, но время там в ISO:2026-09-07T21:40:10+03:00. Поискgrep "^Sep 7"молча не находит ничего. На этом я потерял два захода.
С правильным шаблоном ответ нашёлся одной строкой:
$ zgrep -h 'Power key' /var/log/auth.log*
2026-09-07T21:40:10+03:00 … systemd-logind: Power key pressed short.
2026-09-07T21:40:10+03:00 … systemd-logind: Powering off...
Кто-то коротко нажал кнопку питания, сервер штатно выключился, через пять с половиной минут его включили обратно. Крышку я обезвредил, а реакцию на кнопку оставил по умолчанию — «выключиться». Остальные версии отпали проверкой: ядро стоит с начала месяца, автоматическая перезагрузка после обновлений закомментирована, при обрыве питания не было бы аккуратной остановки служб, в кроне перезагрузок нет.
# /etc/systemd/logind.conf.d/99-server.conf — что стоит дописать сразу, а не после такого вечера
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff # долгое нажатие по-прежнему выключает — на случай, если очень надо
Что осталось открытым
- батарея всегда заряжена на 100%, ограничения заряда в BIOS нет — со временем она может вздуться. Раз в пару месяцев стоит смотреть на корпус;
- память 4 ГБ — главное ограничение. Второй слот свободен, следующий шаг — +8 ГБ, и об этом будет отдельный разбор после установки;
- живую проверку «выключить и дождаться, что разбудит роутер» я так и не провёл. Пока это работает только на бумаге.
Хотите поднять домашний сервер на старом железе?
Напишите, что за машина, — подскажу, что настроить, чтобы она жила сутками без вашего участия.
// загружаю комментарии…