← Назад к вопросам

С чем может быть связана ошибка, если на Linux есть свободное место на диске, но файл добавить нельзя

1.8 Middle🔥 211 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отличный и очень частый вопрос на собеседованиях. Проблема, когда на Linux есть свободное место, но записать файл нельзя, — классический кейс, демонстрирующий понимание работы файловой системы за пределами простой метрики df -h.

Основных причин несколько, и они связаны с различными лимитами и квотами файловой системы и ядра Linux.

1. Исчерпание inode (индексных дескрипторов)

Это самая первая вещь, которую должен проверить DevOps-инженер. Свободное место (df -h) показывает доступные блоки для данных, но не учитывает inode — структуры метаданных, в которых хранится информация о файле (права владельца, размер, указатели на данные и т.д.).

  • Каждый файл, директория или символьная ссылка требует один inode.
  • Количество inode фиксируется при создании файловой системы (например, для ext4 можно задать при форматировании) и не может быть динамически увеличено.

Диагностика:

# Проверить использование inode
df -i

# Более подробно (для конкретной точки монтирования)
df -i /path/to/directory

Вывод покажет столбцы IUse% и IFree. Если IUse% равен или близок к 100%, — проблема найдена.

Решение: Удалить ненужные мелкие файлы (например, логи, кэш, временные файлы в /tmp). Если проблема систематическая, возможно, потребуется пересоздание файловой системы с увеличенным количеством inode (параметр -N для mkfs.ext4) или использование другой ФС (например, XFS имеет динамические inode).

2. Дисковые квоты (disk quotas)

Система может ограничивать не только общее дисковое пространство, но и количество файлов или объем данных для конкретного пользователя или группы.

Диагностика:

# Проверить квоты для текущего пользователя
quota -vs

# Для конкретного пользователя (требует прав root)
sudo quota -vu username
sudo repquota -a

Если квоты включены, вывод покажет лимиты и текущее использование.

Решение: Увеличить квоты (с помощью edquota или setquota) или очистить место от файлов данного пользователя/группы.

3. Ограничения прав доступа (permissions)

Ошибка может быть на уровне файловой системы, даже если место есть.

  • Права на запись в директорию: У пользователя/процесса должны быть права w на целевую директорию.
  • Атрибуты файловой системы: Проверьте, не установлен ли атрибут read-only (ro) на точку монтирования.
  • Расширенные атрибуты (extended attributes): Например, атрибут immutable (i), который запрещает любые изменения файла.

Диагностика:

# Проверить права на директорию
ls -ld /target/directory/

# Проверить атрибуты монтирования
mount | grep /path/to/mountpoint

# Проверить расширенные атрибуты на директории или родительском каталоге
lsattr /target/directory/
# Особенно обратите внимание на атрибуты 'i' (immutable) и 'a' (append-only)

4. Ограничения ядра (kernel limits)

Существуют системные лимиты на уровне всей ОС.

  • fs.file-max: Максимальное количество файловых дескрипторов, которые могут быть открыты одновременно во всей системе.
  • fs.nr_open: Максимальное количество файловых дескрипторов для одного процесса.
  • User Limits (ulimit): Лимиты для сессии пользователя или процесса, устанавливаемые через PAM (limits.conf). Ключевые параметры:
    *   `nofile` — максимальное количество открытых файловых дескрипторов.
    *   `fsize` — максимальный размер создаваемого файла.

Диагностика:

# Проверить системные лимиты
cat /proc/sys/fs/file-max
cat /proc/sys/fs/nr_open

# Проверить лимиты для текущего процесса (оболочки)
ulimit -a

# Проверить жесткие (hard) и мягкие (soft) лимиты для пользователя 'appuser'
sudo su - appuser -c "ulimit -a"
# Или посмотреть настройки в конфигах
cat /etc/security/limits.conf
cat /etc/security/limits.d/*.conf

5. Особенности файловых систем (LVM, тонкое выделение, RAID)

  • LVM Thin Provisioning: В виртуальных средах или при использовании LVM с тонкими пулами (thin pools) физическое пространство может быть выделено "по мере необходимости". Свободное место в df может показывать объем из виртуального пула, в то время как физический пул (lvs) может быть исчерпан.
  • RAID-массивы: В некоторых конфигурациях (например, при выходе из строя диска в RAID5) массив может автоматически перейти в режим read-only для сохранности данных.

Диагностика:

# Для LVM: проверить физический объем пула
sudo lvs
# Обратите внимание на столбец "Data%" для thin pool

# Проверить состояние RAID
cat /proc/mdstat
sudo mdadm --detail /dev/mdX

Порядок действий при диагностике (чек-лист DevOps):

  1. df -h — Быстрая проверка свободного места (вы уже знаете, что оно есть).
  2. df -iПервым делом! Проверка исчерпания inode.
  3. ls -ld /target/dir — Проверка прав на запись в директорию.
  4. mount | grep ... — Не смонтирована ли ФС в ro?
  5. quota -vs / repquota -a — Проверка квот пользователя/группы.
  6. ulimit -a (в контексте проблемного процесса) — Проверка лимитов на число файлов.
  7. Для продвинутых сценариев: Проверить LVM (lvs), RAID (mdadm), расширенные атрибуты (lsattr) и системные лимиты ядра (/proc/sys/fs/).

Понимание этого спектра причин отличает специалиста, который просто следит за графиками "свободного места", от инженера, способного глубоко диагностировать проблему в сложной распределенной системе.

С чем может быть связана ошибка, если на Linux есть свободное место на диске, но файл добавить нельзя | PrepBro