Завис systemd1: почему без перезагрузки не обойтись
TL;DR: systemd1 (D-Bus-сервис org.freedesktop.systemd1, через который работает systemctl) завис. systemctl молчит, активация сервиса упирается в 25-секундный таймаут, а процесс systemd (PID 1) остаётся с одним-единственным потоком — мёртвый менеджер, который не обслуживает шину. daemon-reexec не помогает. Перезагрузка — единственный выход, и systemctl --force --force reboot справляется даже когда обычный reboot падает с Connection timed out.
Как это выглядело
Всё началось с того, что у меня завис FUSE-модуль с Яндекс-Диском (/mnt/yandex-disk, davfs2). Пока я разбирался, я заметил, что команды systemctl перестали отвечать вообще.
Когда я попробовал перезагрузиться обычным способом:
$ sudo systemctl reboot
Broadcast message from root@bigbox on pts/31 (Sun 2026-09-13 13:08:39 UTC):
The system will reboot now!
Call to Reboot failed: Connection timed out
Failed to start reboot.target: Connection timed out
See system logs and 'systemctl status reboot.target' for details.
It is possible to perform action directly, see discussion of --force --force in man:systemctl(1).
Беда в том, что systemctl reboot сам идёт через systemd1. Если systemd1 висит, то и перезагрузиться через него нельзя — получается «замкнутый круг».
При этом интересная деталь: docker ps и docker info работали нормально, контейнеры — живые, мои агенты продолжали работать. Падал только сам systemd-интерфейс.
Что показала диагностика
1. systemd1 не активируется на D-Bus.
$ busctl | grep systemd1
org.freedesktop.systemd1 - - - (activatable) - - -
(activatable) значит, что сервис зарегистрирован, но не запущен. При попытке его запустить:
$ systemctl is-system-running
[tаймаут через 25 секунд]
$ journalctl | grep systemd1
dbus-daemon[1859]: Failed to activate service 'org.freedesktop.systemd1':
timed out (service_start_timeout=25000ms)
2. PID 1 — systemd — жив, но как будто мёртв внутри.
$ ps -o pid,nlwp,stat,etime -p 1
1 1 Ss 3-06:26:57
Ключевое — nlwp = 1. Нормальный systemd держит десятки потоков (они обслуживают шину, юниты, таймеры…). Один поток означает, что менеджер фактически не работает, а просто висит. Именно поэтому daemon-reexec не реагирует толком — перезапускать некому.
3. Docker тут ни при чём.
dockerdжил,docker psотвечал мгновенно;- все контейнеры —
Up, с restart-политикамиunless-stopped/always; - даже
systemctl restart dockerупал бы в тот же таймаут systemd1, потому что этот вызов тоже идёт через шину.
4. Даже перезагрузка через systemctl не сработала: Call to Reboot failed: Connection timed out.
Почему FUSE-Яндекс-Диск виноват лишь отчасти
Я сначала грешил на зависший davfs2: он висел, и systemd вполне мог залипнуть, пытаясь обратиться к .mount-юниту, который упирается в молчащую FUSE-точку. Это правдоподобный триггер. Но уже к моменту диагностики я перемонтировал Яндекс-Диск заново, и он заработал — а systemd1 так и остался висящим.
Проверка это подтвердила:
ls /mnt/yandex-disk/отвечает мгновенно;- D-state (непрерываемые) процессы отсутствуют;
- демон davfs2 жив.
То есть: точка Yandex больше не блокирует ничего, а systemd1 всё равно не оживает. Вывод — проблема уже в самом systemd, а не в FUSE. FUSE был спусковым крючком, но чинить нужно было не монтирование.
Что мы перепробовали перед ребутом
Попытка 1: systemctl daemon-reexec — перезапуск systemd «на месте», самая мягкая реанимация.
$ sudo systemctl daemon-reexec
# вернуло 0
Вернуло успех, но шину не оживило. Потому что systemd с одним потоком не смог толком выполнить re-exec — команда «прошла», но менеджер остался в том же состоянии. Проверка после:
$ busctl | grep systemd1
org.freedesktop.systemd1 - - - (activatable) ...
$ systemctl is-system-running
[tаймаут]
Ничего не изменилось.
Попытка 2: обычный reboot. Упал с Connection timed out (см. выше). По понятной причине: reboot через systemctl — это тоже запрос к systemd1.
Попытка 3: systemctl --force --force reboot — двойной форсированный перезапуск. Именно он сработал:
$ sudo systemctl --force --force reboot
Rebooting.
Как это работает: зачем два –force
systemctl reboot без флагов просит systemd корректно завершить все юниты. Если systemd1 виснет, запрос не проходит. Два --force — это «мне плевать на зависшие службы, перезагружайся»:
- первый
--force— пропустить остановку юнитов (не ждать, пока всё аккуратно завершится), - второй
--force(для reboot) — выполнить системный вызов перезагрузки напрямую, в обход systemd как менеджера.
То есть это фактически «аварийная» перезагрузка через системный механизм ядра (reboot(2)), минуя зависший менеджер. Риск — грязное завершение: незаписанные данные могут потеряться, но при зависшей шине это часто единственный вариант.
После перезагрузки
Система поднялась за ~11 минут:
systemctl is-system-running→degraded(отвечает мгновенно — шина жива);org.freedesktop.systemd1на busctl теперь активирован (PID systemd,:1.5), а не(activatable);- docker и containerd —
active; - все 27 контейнеров поднялись сами (restart-политики
unless-stopped/alwaysсработали): gitea, netbox, grafana, prometheus, loki, gotosocial, garage, ollama, open-webui, searxng и остальные; /mnt/yandex-diskсмонтирован и отвечает;/opt/hermes/obsidian-vault(s3fs) тоже на месте.
Единственный failed-юнит — mdmonitor.service (мониторинг MD-массивов). Падает с mdadm: No mail address or alert command - not monitoring — это не поломка, а отсутствие настроенного алерта. На рабочие массивы не влияет, можно замаскировать.
Выводы
- Если systemctl молчит, а docker работает — значит, дело в шине, а не в docker. Проверяй
busctl | grep systemd1иnlwpу PID 1. daemon-reexecне всегда реанимирует — если у systemd остался один поток, перезапускать себя фактически некому.- Обычный
systemctl rebootтоже идёт через systemd1 — при висящей шине он не сработает. Нужен--force --force. - FUSE-зависание может быть триггером, но не обязательно причиной. Если точка перемонтирована и отвечает, а systemd1 всё равно молчит — лечится только перезагрузкой.
- Restart-политики контейнеров себя отрабатывают:
unless-stopped/alwaysподняли всё после ребута, ничего не пришлось поднимать руками.
Полный разбор с командами, как это диагностировать, — в WALKTHROUGH проекта.
Теги: #systemd #systemctl #dbus #fuse #davfs2 #reboot #администрирование #грабли
Если у вас systemctl молчит, а контейнеры живут — проверьте busctl | grep systemd1 и ps -o nlwp -p 1. И не тратьте время на daemon-reexec: при пульсе «один поток» перезагрузка всё равно неизбежна.