status=210/CHROOT в systemd
Код 210/CHROOT появляется при работе с RootDirectory= и RootImage=: systemd не смог сменить корень процесса. Либо каталога нет, либо это не каталог, либо не хватает прав, либо образ не удалось подключить.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог из
RootDirectory=не существует или не является каталогомСмена корня возможна только в существующий каталог. Опечатка в пути или указание файла дают отказ сразу.
-
Внутри нового корня нет самой программы
После смены корня путь из
ExecStart=отсчитывается уже внутри него. Программа снаружи корня становится недоступной, и следом обычно приходит 203/EXEC — но при недостатке прав ошибка возникает раньше, на самом chroot. -
Недостаточно прав для смены корня
Операция требует CAP_SYS_CHROOT. Служба, отказавшаяся от возможностей, или служба пользователя сменить корень не может.
-
Образ из
RootImage=не подключаетсяОбраз повреждён, не той файловой системы, зашифрован или отсутствует нужный модуль ядра. В журнале рядом обычно есть сообщение о неудачном подключении.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Показывает шаг CHROOT и причину: нет каталога, отказ в доступе, неудачное подключение образа.
journalctl -xeu myapp.service --no-pager -n 30Все три параметра, от которых зависит этот шаг.
systemctl show myapp.service -p RootDirectory -p RootImage -p CapabilityBoundingSetРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
RootDirectory= не существует или не является каталогом- Почему происходит
- Смена корня возможна только в существующий каталог. Опечатка в пути или указание файла дают отказ сразу.
- Как проверить
-
Проверьте путь.
systemctl show myapp.service -p RootDirectory ls -ld /srv/chroot/myapp
- Как исправить
- Создайте каталог и разложите в нём минимальное окружение: программу, библиотеки, /etc/resolv.conf при необходимости сети.
- Почему происходит
- После смены корня путь из
ExecStart=отсчитывается уже внутри него. Программа снаружи корня становится недоступной, и следом обычно приходит 203/EXEC — но при недостатке прав ошибка возникает раньше, на самом chroot.
- Как проверить
-
Проверьте наличие файла внутри нового корня.
ls -l /srv/chroot/myapp/usr/local/bin/myapp
- Как исправить
-
Скопируйте программу и её библиотеки внутрь корня. Список библиотек покажет
ldd.ldd /usr/local/bin/myapp
- Почему происходит
- Операция требует CAP_SYS_CHROOT. Служба, отказавшаяся от возможностей, или служба пользователя сменить корень не может.
- Как проверить
-
Посмотрите набор возможностей и способ запуска.
systemctl show myapp.service -p CapabilityBoundingSet -p User -p DynamicUser
- Как исправить
-
Оставьте CAP_SYS_CHROOT в наборе возможностей или используйте вместо chroot более современные средства изоляции:
ProtectSystem=,PrivateTmp=,BindPaths=,RootImage=c нужными правами.
RootImage= не подключается- Почему происходит
- Образ повреждён, не той файловой системы, зашифрован или отсутствует нужный модуль ядра. В журнале рядом обычно есть сообщение о неудачном подключении.
- Как проверить
-
Проверьте файл образа и попробуйте подключить его вручную.
systemctl show myapp.service -p RootImage sudo systemd-dissect /var/lib/machines/myapp.raw
- Как исправить
-
Пересоберите образ или укажите нужные параметры в
RootImageOptions=.
Пример вывода
Указан несуществующий корневой каталог. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× myapp.service - My application
Active: failed (Result: exit-code) since Mon 2026-09-14 18:22:09 MSK; 1s ago
Process: 14001 ExecStart=/usr/local/bin/myapp (code=exited, status=210/CHROOT)
systemd[14001]: myapp.service: Failed at step CHROOT spawning /usr/local/bin/myapp: No such file or directory
Связанные ошибки
- status=203/EXEC в systemd Код 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
- status=226/NAMESPACE в systemd Код 226/NAMESPACE: не удалось настроить пространства имён монтирования, UTS или IPC. Частая причина — путь в ReadOnlyPaths= или ProtectHome=.
- status=218/CAPABILITIES в systemd Код 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
- Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- status=229/SELINUX_CONTEXT в systemd Код 229/SELINUX_CONTEXT: не удалось определить или сменить контекст SELinux для процесса службы.
Источники
-
systemd.exec(5)
210 EXIT_CHROOT: не удалось сменить корневой каталог, см. RootDirectory= и RootImage=. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на несуществующем RootDirectory и на unit без CAP_SYS_CHROOT.