Ошибка No space left on device при свободном месте: кончились inode (df -i)
Симптомы парадоксальной ошибки нехватки места
При попытке создать или сохранить файл система выдает критическую ошибку:
No space left on device (Ошибка: На устройстве не осталось свободного места)Однако при проверке свободного пространства командой df -h вы видите, что свободно еще 20–100 Гигабайт.
Причина: исчерпание таблицы индексных дескрипторов (Inode)
В файловой системе Linux каждый файл, папка или символическая ссылка занимают один дескриптор — inode. Если на сервере сгенерировались миллионы крошечных файлов (файлы сессий PHP, почтовая очередь, кэш), счетчик свободных inode достигает 100%, и новые файлы создать нельзя.
- Проверьте занятость inode:
Найдите раздел сdf -iIUse% = 100%. - Найдите папку, в которой скопились миллионы мелких файлов, запустив сканирование:
sudo find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n | tail -n 15 - Чаще всего виновниками являются:
/var/lib/php/sessions/(зависшие сессии PHP);/var/spool/postfix/maildrop/(застрявшие системные письма);/tmpили папка кэша фреймворка.
- Удалите скопившиеся миллионы файлов (через быстрый find, так как команда rm выдаст ошибку Argument list too long):
sudo find /var/lib/php/sessions/ -type f -delete
Профилактика: Настройте автоматическую ротацию сессий и логов, чтобы предотвратить повторное переполнение inode.
Частые вопросы (FAQ)
Можно ли увеличить количество inode без переформатирования диска?
В файловой системе ext4 количество inode задается жестко один раз в момент создания файловой системы (mkfs). Увеличить их «на лету» нельзя — можно только удалить ненужные файлы.
Почему команда rm * выдает ошибку Argument list too long?
Потому что командная оболочка Bash не может обработать список из сотен тысяч файлов в одном аргументе. Используйте команду find /путь -type f -delete.
Как узнать размер одного inode?
Выполните sudo tune2fs -l /dev/sda1 | grep 'Inode size'. Стандартный размер обычно равен 256 байт.
В каких файловых системах нет фиксированного лимита inode?
Современные файловые системы XFS, Btrfs и ZFS выделяют inode динамически по мере необходимости.