Короткий ответ
Вероятная причина — исчерпание inode на файловой системе (кончились свободные дескрипторы файлов, хотя блоки данных ещё есть), что типично при большом числе мелких файлов; диагностируется командой df -i.
Как это работает подробнее
Каждая файловая система выделяет при форматировании фиксированное (для ext4) или динамическое (для xfs) количество inode; каждый файл или каталог занимает один inode независимо от своего размера, поэтому миллионы мелких файлов (например, сессии, кэш, временные файлы очереди) могут исчерпать inode задолго до исчерпания блоков данных.
Пример кода
commands.sh
df -i /var
find /var/spool/myqueue -xdev | wc -lЧто использовать на практике
- Практика. нужно найти каталоги с аномально большим числом файлов (find /path -xdev | wc -l по подкаталогам) и либо почистить их, либо изменить архитектуру хранения (например, не хранить миллионы мелких файлов в одном каталоге, использовать объектное хранилище или базу данных); при пересоздании ФС можно заранее задать больше inode через mkfs с параметром -N для ext4.
Подводные камни
- Риск. Частая ошибка — реагировать на 'No space left' только очисткой больших файлов по du, не проверив df -i, и тратить время впустую, пока реальная причина — переполнение inode, а не блоков данных.