SystemdDoctor
служба не работает bpf изоляция версии

status=244/BPF в systemd

Код 244/BPF значит, что systemd не сумел применить ограничение, работающее через программу BPF в ядре. Чаще всего речь про RestrictFileSystems=, реже про фильтры сетевого трафика unit.

Что это значит

Отдельно стоит сказать про сам номер. В man-странице systemd.exec(5) этот код указан как 245, но в исходном коде и в выводе systemd-analyze exit-status он равен 244, а 245 занят кодом KSM. Мы приводим фактическое значение: если сверяться с документацией, легко разбирать не тот код.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Ядро без нужной поддержки BPF

    RestrictFileSystems= требует LSM BPF в ядре. На ядрах без него ограничение применить нельзя.

  2. Указана неизвестная файловая система или набор

    Значения проверяются по списку известных: опечатка вроде ext вместо ext4 даёт отказ.

  3. Окружение запрещает загрузку программ 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

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Ядро без нужной поддержки BPF
Почему происходит
RestrictFileSystems= требует LSM BPF в ядре. На ядрах без него ограничение применить нельзя.
Как проверить
Посмотрите включённые модули безопасности ядра.
cat /sys/kernel/security/lsm
systemctl show myapp.service -p RestrictFileSystems
Как исправить
Уберите параметр для этого ядра либо включите bpf в списке LSM параметром загрузки lsm=.
2. Указана неизвестная файловая система или набор
Почему происходит
Значения проверяются по списку известных: опечатка вроде ext вместо ext4 даёт отказ.
Как проверить
Посмотрите значение и список наборов.
systemctl show myapp.service -p RestrictFileSystems
systemd-analyze filesystems | head -20
Как исправить
Исправьте имена. Наборы вида @basic-api перечисляет systemd-analyze filesystems.
3. Окружение запрещает загрузку программ BPF
Почему происходит
В контейнере без 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, systemd main
    сверено 15 сентября 2026
  • systemd.exec(5)
    В таблице кодов этот код указан как 245 — расхождение с исходным кодом.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04), systemd-analyze exit-status
    systemd-analyze exit-status на systemd 255 печатает BPF 244, KSM 245.
    собственная проверка, systemd 255
    сверено 15 сентября 2026