Ответ
В Linux ошибка No space left on device (ENOSPC) может возникать даже при наличии свободного места на диске. Основные причины, с которыми я сталкивался:
1. Исчерпание inodes Файловая система хранит метаданные о каждом файле и каталоге в структурах, называемых inodes. Если свободные inodes закончились, новые файлы создать нельзя, даже если есть свободные блоки данных.
# Проверка использования inodes
df -i /path/to/filesystem
# Решение: найти и удалить множество мелких файлов (часто в /tmp, кэшах или логах).
find /path -xdev -type f | wc -l # Оценка количества файлов
2. Дисковые квоты пользователя или группы Система может ограничивать объем дискового пространства или число inodes для конкретного пользователя.
# Проверка квот (если включены)
quota -vs <username>
repquota -a
3. Ограничения на уровне каталога
- Атрибут
immutable: Файл или каталог защищен от любых изменений.lsattr /path/to/directory # Если стоит флаг 'i', снять его можно так (требует прав root): chattr -i /path/to/directory - Недостаточные права на запись: Убедитесь, что у пользователя есть право
wна целевой каталог.
4. Файловая система смонтирована в режиме "только для чтения" (read-only) Это может произойти из-за ошибок файловой системы, которые ядро автоматически обрабатывает, перемонтируя раздел в ro для предотвращения повреждения данных.
mount | grep "on /path"
# Решение: проверить журналы ядра (`dmesg | tail`) на наличие ошибок FS и, если возможно, перемонтировать в rw.
mount -o remount,rw /path
Для DevOps: Эта проблема часто возникает на серверах с высоким оборотом мелких файлов (логи приложений, кэши, временные файлы CI/CD). Решением является мониторинг не только свободного места, но и использования inodes, а также настройка log rotation и очистки кэшей.