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

Почему при доступном месте файлы не создаются?

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

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

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

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

Общие причины ошибки "No space left on device" при наличии свободного места

Ошибка "No space left on device" (или аналогичная на русском) — классическая проблема в DevOps, которая часто возникает даже при наличии свободного места на диске. Это связано с тем, что в Linux-системах существует несколько типов "лимитов", и исчерпание любого из них приводит к данной ошибке. Ниже разберём основные причины и способы диагностики.

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

Inodes — это структуры метаданных файловой системы, хранящие информацию о файлах (права, владелец, размер, расположение данных на диске и т.д.). Каждый файл или директория занимает один inode. Если inodes закончились, новые файлы создаваться не будут, даже если есть свободное место на диске.

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

# Проверить использование inodes
df -i
# Или с указанием конкретной файловой системы
df -i /dev/sda1

Решение:

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

2. Исчерпание квот диска (disk quotas)

Система квот может ограничивать использование дискового пространства или количества inodes для пользователей или групп.

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

# Проверить квоты для текущего пользователя
quota -vs
# Или для всех пользователей (требует прав root)
repquota -a

Решение:

  • Увеличить квоты через edquota или удалить лишние файлы.

3. Ограничения по доступному пространству для непривилегированных пользователей

Некоторые файловые системы (например, ext3/ext4) резервируют часть пространства (по умолчанию 5%) для суперпользователя (root). Это пространство недоступно для обычных пользователей.

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

# Посмотреть зарезервированные блоки
tune2fs -l /dev/sda1 | grep "Reserved block count"

Решение:

  • Уменьшить или отменить резервирование (для несистемных разделов):
tune2fs -m 1 /dev/sda1  # Установить резерв в 1%
tune2fs -m 0 /dev/sda1  # Отключить резерв (не рекомендуется для корневой ФС)

4. Проблемы с LVM (Logical Volume Manager) или thin provisioning

В виртуальных средах или при использовании LVM с thin-пулами может возникать ситуация, когда физическое пространство закончилось, хотя логический том показывает свободное место.

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

# Проверить физическое использование в LVM
pvs
lvs
# Для thin-пулов
lvs -o+data_percent,metadata_percent

Решение:

  • Расширить физический том (PV) или thin-пул.

5. Достигнут лимит открытых файлов (file descriptors) на уровне процесса или системы

Хотя это обычно вызывает ошибку "too many open files", в некоторых сценариях (например, при интенсивной работе с временными файлами) может проявляться как проблема с созданием файлов.

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

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

Решение:

  • Увеличить лимиты через ulimit (для сессии) или в /etc/security/limits.conf.

6. Повреждение файловой системы или проблемы с монтированием

Если файловая система смонтирована в режиме read-only или есть ошибки в структуре, создание файлов может блокироваться.

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

# Проверить режим монтирования
mount | grep /dev/sda1
# Проверить ошибки ФС
dmesg | tail -20

Решение:

  • Перемонтировать в режиме read-write: mount -o remount,rw /dev/sda1
  • Выполнить проверку ФС: fsck /dev/sda1 (на unmounted ФС).

7. Проблемы с сетевыми файловыми системами (NFS, CIFS)

При работе с сетевыми ФС ошибка может возникать из-за проблем на сервере, квотах на сервере или сетевых сбоях.

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

# Проверить доступное место на NFS-сервере (со стороны сервера)
df -h /exported/path

Решение:

  • Проверить квоты и свободное место на сервере.
  • Перемонтировать сетевую ФС.

Алгоритм диагностики

  1. Проверить базовую информацию о диске:
df -h      # Свободное место
df -i      # Свободные inodes
  1. Определить, куда пытается писать приложение:
# Найти точку монтирования для пути
df /path/to/directory
# Или использовать lsof для процесса
lsof -p <PID> | grep -i "no space"
  1. Проверить системные логи:
dmesg | tail -50
journalctl -xe --since "5 minutes ago"
  1. Проанализировать квоты и резервирование.
  2. Проверить состояние ФС и режим монтирования.

Заключение

Ошибка "No space left on device" при наличии свободного места — многогранная проблема, требующая системного подхода к диагностике. В моей практике наиболее частыми причинами были исчерпание inodes (особенно на серверах с миллионами мелких файлов) и LVM thin provisioning issues в виртуальных средах. Ключевой момент — понимать, что "свободное место" в Linux — это не только физические блоки данных, но и метаресурсы файловой системы (inodes, дескрипторы), а также логические ограничения (квоты, резервирование).

Почему при доступном месте файлы не создаются? | PrepBro