Какая может быть причина, если в Linux есть свободное дисковое пространство и оперативная память, но не получается создавать папки?

«Какая может быть причина, если в Linux есть свободное дисковое пространство и оперативная память, но не получается создавать папки?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Помимо нехватки места на диске, есть несколько менее очевидных причин, которые DevOps-инженер должен проверить:

  1. Исчерпаны inodes (df -i). Файловая система может иметь свободное место, но лимит на количество файлов и папок (inodes) исчерпан. Это часто случается с системами, генерирующими множество мелких файлов (логи, кэш).

    df -i /path/to/directory
  2. Отсутствуют права на запись (ls -ld). У текущего пользователя нет прав w (write) на целевую или родительскую директорию.

    # Проверить права и владельца текущей директории
    ls -ld .
    # Проверить права на родительскую директорию
    ls -ld ..
  3. Файловая система смонтирована в режиме "только для чтения" (mount). Это могло произойти из-за ошибок файловой системы.

    mount | grep "on /path/to/mountpoint"
    # Для исправления (если причина не критическая) можно перемонтировать:
    sudo mount -o remount,rw /path/to/mountpoint
  4. Сработали квоты дискового пространства (quota). На сервере могут быть настроены квоты для пользователей или групп.

    quota -vs <username>
  5. Блокировка со стороны SELinux/AppArmor (getenforce, audit.log). Мандатные системы контроля доступа могут запрещать операции.

    # Проверить режим SELinux
    getenforce
    # Просмотреть соответствующие записи в логах аудита
    sudo grep "AVC.*denied" /var/log/audit/audit.log | tail -20
    # Временно для диагностики можно перевести SELinux в permissive режим
    sudo setenforce 0
  6. Директория помечена как неизменяемая (lsattr). Установлен атрибут i (immutable), который даже для root запрещает создание и удаление.

    lsattr /path/to/parent/directory
    # Снять атрибут (только root)
    sudo chattr -i /path/to/parent/directory