status=244/BPF в systemd
Код 244/BPF значит, что systemd не сумел применить ограничение, работающее через программу BPF в ядре. Чаще всего речь про RestrictFileSystems=, реже про фильтры сетевого трафика unit.
Что это значит
Отдельно стоит сказать про сам номер. В man-странице systemd.exec(5) этот код указан как 245, но в исходном коде и в выводе systemd-analyze exit-status он равен 244, а 245 занят кодом KSM. Мы приводим фактическое значение: если сверяться с документацией, легко разбирать не тот код.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Ядро без нужной поддержки BPF
RestrictFileSystems=требует LSM BPF в ядре. На ядрах без него ограничение применить нельзя. -
Указана неизвестная файловая система или набор
Значения проверяются по списку известных: опечатка вроде
extвместоext4даёт отказ. -
Окружение запрещает загрузку программ BPF
В контейнере без CAP_BPF и CAP_SYS_ADMIN загрузить программу BPF нельзя.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Показывает шаг BPF и причину отказа.
journalctl -xeu myapp.service --no-pager -n 20Показывает, как этот код называет ваша версия systemd. Полезно именно здесь: документация расходится с кодом.
systemd-analyze exit-status 244Список активных модулей безопасности: без bpf ограничение не заработает.
cat /sys/kernel/security/lsmРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
RestrictFileSystems=требует LSM BPF в ядре. На ядрах без него ограничение применить нельзя.
- Как проверить
-
Посмотрите включённые модули безопасности ядра.
cat /sys/kernel/security/lsm systemctl show myapp.service -p RestrictFileSystems
- Как исправить
-
Уберите параметр для этого ядра либо включите bpf в списке LSM параметром загрузки
lsm=.
- Почему происходит
- Значения проверяются по списку известных: опечатка вроде
extвместоext4даёт отказ.
- Как проверить
-
Посмотрите значение и список наборов.
systemctl show myapp.service -p RestrictFileSystems systemd-analyze filesystems | head -20
- Как исправить
-
Исправьте имена. Наборы вида
@basic-apiперечисляетsystemd-analyze filesystems.
- Почему происходит
- В контейнере без CAP_BPF и CAP_SYS_ADMIN загрузить программу BPF нельзя.
- Как проверить
-
Проверьте окружение и возможности службы.
systemd-detect-virt systemctl show myapp.service -p CapabilityBoundingSet
- Как исправить
- Уберите ограничения на основе BPF в таком окружении.
Пример вывода
RestrictFileSystems= на ядре без LSM BPF. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× myapp.service - My application
Active: failed (Result: exit-code) since Mon 2026-09-15 10:02:07 MSK; 1s ago
Process: 5900 ExecStart=/usr/local/bin/myapp (code=exited, status=244/BPF)
systemd[5900]: myapp.service: Failed at step BPF spawning /usr/local/bin/myapp: Operation not supported
Частые вопросы
В документации systemd написано, что 245 — это BPF. Кому верить?
Исходному коду и выводу systemd-analyze exit-status на вашей машине. Там 244 — BPF, 245 — KSM. Таблица в man systemd.exec(5) в этом месте отстала от кода.
Связанные ошибки
- status=228/SECCOMP в systemd Код 228/SECCOMP: не удалось применить фильтр системных вызовов из SystemCallFilter=. Причины: неизвестное имя вызова, отсутствие поддержки в ядре.
- status=245/KSM в systemd Код 245/KSM: не удалось включить объединение одинаковых страниц памяти через MemoryKSM=. Код появился в systemd 254.
- status=232/ADDRESS_FAMILIES в systemd Код 232/ADDRESS_FAMILIES: не удалось применить ограничение семейств адресов из RestrictAddressFamilies=.
- No such file or directory в журнале службы Служба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Protocol not supported при создании сокета Ошибка 93: семейство или протокол не поддержаны. Разбор для IPv6, ограничений изоляции и контейнеров.
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
Источники
-
exit-status.h: EXIT_BPF идёт сразу за EXIT_CREDENTIALS, то есть 244
Проверено также выводом systemd-analyze exit-status на systemd 255. -
systemd.exec(5)
В таблице кодов этот код указан как 245 — расхождение с исходным кодом. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04), systemd-analyze exit-status
systemd-analyze exit-status на systemd 255 печатает BPF 244, KSM 245.