178 lines
11 KiB
Markdown
178 lines
11 KiB
Markdown
---
|
||
date: '2026-09-13T15:55:00+03:00'
|
||
lastmod: '2026-09-13T15:55:00+03:00'
|
||
draft: false
|
||
title: 'Завис systemd1: почему без перезагрузки не обойтись'
|
||
slug: 'systemd1-hang-systemctl-reboot-force'
|
||
description: 'systemd1 висит: systemctl молчит, bus-активация org.freedesktop.systemd1 таймаутит, docker жив, а PID 1 превратился в один поток. Разбор: почему daemon-reexec не помог, почему Яндекс-Диск был лишь триггером и как перезагрузка с --force --force разрулила ситуацию.'
|
||
|
||
categories:
|
||
- 'DevOps'
|
||
- 'Linux'
|
||
|
||
tags:
|
||
- 'systemd'
|
||
- 'systemctl'
|
||
- 'dbus'
|
||
- 'fuse'
|
||
- 'davfs2'
|
||
- 'reboot'
|
||
- 'admin'
|
||
|
||
keywords:
|
||
- 'systemd1'
|
||
- 'org.freedesktop.systemd1'
|
||
- 'Failed to activate service'
|
||
- 'service_start_timeout'
|
||
- 'daemon-reexec'
|
||
- 'systemctl reboot'
|
||
- '--force --force'
|
||
- 'FUSE'
|
||
- 'davfs2'
|
||
- 'yandex disk'
|
||
|
||
cover:
|
||
image: "hero.svg"
|
||
alt: "Завис systemd1 — systemctl молчит, лечится перезагрузкой"
|
||
---
|
||
|
||
# Завис 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` — это не поломка, а отсутствие настроенного алерта. На рабочие массивы не влияет, можно замаскировать.
|
||
|
||
## Выводы
|
||
|
||
1. **Если systemctl молчит, а docker работает — значит, дело в шине, а не в docker.** Проверяй `busctl | grep systemd1` и `nlwp` у PID 1.
|
||
2. **`daemon-reexec` не всегда реанимирует** — если у systemd остался один поток, перезапускать себя фактически некому.
|
||
3. **Обычный `systemctl reboot` тоже идёт через systemd1** — при висящей шине он не сработает. Нужен `--force --force`.
|
||
4. **FUSE-зависание может быть триггером**, но не обязательно причиной. Если точка перемонтирована и отвечает, а systemd1 всё равно молчит — лечится только перезагрузкой.
|
||
5. **Restart-политики контейнеров себя отрабатывают**: `unless-stopped`/`always` подняли всё после ребута, ничего не пришлось поднимать руками.
|
||
|
||
Полный разбор с командами, как это диагностировать, — в WALKTHROUGH проекта.
|
||
|
||
---
|
||
|
||
**Теги:** #systemd #systemctl #dbus #fuse #davfs2 #reboot #администрирование #грабли
|
||
|
||
Если у вас `systemctl` молчит, а контейнеры живут — проверьте `busctl | grep systemd1` и `ps -o nlwp -p 1`. И не тратьте время на daemon-reexec: при пульсе «один поток» перезагрузка всё равно неизбежна. |