Объектное хранилище не запускается: нет прав на каталоги данных
Объектные хранилища проверяют каталоги данных при запуске: права, доступность записи и отсутствие посторонних файлов. Отказ на этой проверке — самая частая причина неуспешного старта после переноса данных или смены пользователя службы.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталоги принадлежат не пользователю службы
После переноса или распаковки архива владельцем остаётся root, а служба работает от своего пользователя.
-
Изоляция unit-файла закрывает путь к данным
Параметры защиты системы и домашних каталогов делают пути только для чтения, и служба не может писать.
-
В каталоге данных есть посторонние файлы
Проверка при запуске отвергает каталог с чужим содержимым, чтобы не смешать данные разных хранилищ.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения службы о проверке каталогов.
journalctl -u minio -n 30 --no-pagerМожет ли пользователь службы писать в каталог.
sudo -u minio-user test -w /srv/data1 && echo запись есть || echo записи нетПользователь и параметры изоляции службы.
systemctl show minio -p User -p ProtectSystem -p ReadWritePathsРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- После переноса или распаковки архива владельцем остаётся root, а служба работает от своего пользователя.
- Как проверить
-
Посмотрите владельца каталогов и пользователя службы.
sudo ls -ld /srv/data* 2>/dev/null systemctl show minio -p User -p Group
- Как исправить
-
Передайте каталоги пользователю службы. Для новых каталогов удобнее объявлять их через
StateDirectory=: права выставит systemd.
- Почему происходит
- Параметры защиты системы и домашних каталогов делают пути только для чтения, и служба не может писать.
- Как проверить
-
Посмотрите параметры изоляции и попробуйте записать от имени службы.
systemctl show minio -p ProtectSystem -p ProtectHome -p ReadWritePaths sudo -u minio-user test -w /srv/data1 && echo запись есть || echo записи нет
- Как исправить
-
Добавьте каталоги данных в
ReadWritePaths=. Это правильнее, чем отключать защиту целиком.[Service] ProtectSystem=strict ReadWritePaths=/srv/data1 /srv/data2
- Почему происходит
- Проверка при запуске отвергает каталог с чужим содержимым, чтобы не смешать данные разных хранилищ.
- Как проверить
-
Посмотрите содержимое каталогов.
sudo ls -a /srv/data1 | head
- Как исправить
- Используйте пустые каталоги под данные или отдельные точки монтирования. Каталог, где уже что-то лежит, брать под хранилище не стоит.
Пример вывода
Каталог данных принадлежит root, служба работает от своего пользователя. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
minio[5300]: Unable to initialize backend: file access denied, drive: /srv/data1
systemd[1]: minio.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: minio.service: Failed with result 'exit-code'.
Связанные ошибки
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- status=238/STATE_DIRECTORY в systemd Код 238/STATE_DIRECTORY: не удалось подготовить постоянный каталог службы в /var/lib из StateDirectory=.
- Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- status=210/CHROOT в systemd Код 210/CHROOT: не удалось сменить корневой каталог из RootDirectory= или подключить образ RootImage=.
- status=218/CAPABILITIES в systemd Код 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
- status=229/SELINUX_CONTEXT в systemd Код 229/SELINUX_CONTEXT: не удалось определить или сменить контекст SELinux для процесса службы.
Источники
-
systemd.exec(5)
ReadWritePaths=, StateDirectory= и защита файловой системы. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено каталогом данных с владельцем root и строгой защитой системы.