Inode (далее – инода) – это сокращение от «index node» – по-русски – индексный узел.
Математически он представляет собой описатель (дескриптор) файла и является базовым понятием, на котором основаны многие юниксные и линуксные файловые системы. Иноды подобны каталогу фундаментальной академической библиотеки, в котором находится информация, связывающая название-автор книг с их физическим местонахождением – комната хранилища, стеллаж, полка. Другими словами, иноды – это данные о данных или метаданные, как любят выражаться айтишники. Линуксная инода содержит достаточно много метаданных:
Как это работает? Каждый раз, когда создается новый файл, ему предоставляется номер inode и имя, после чего он сохраняется в виде уникальных записей в директории. Здесь важно помнить, что одним из способов исчерпания свободного места на файловой системе является именно использование всех Inodes. Это значит, что даже при наличии свободного места на диске, вы все равно не сможете создать новый файл. Когда все Inodes в вашей системе используются, это может привести к внезапной остановке системы. Может возникнуть ситуация, что у одного пользователя слишком много файлов, но сервер начинает плохо работать для всех. Поэтому и вводится ограничение на количество инодов для различных тарифов хостинга.
Увидеть метаданные директория или файла можно командой stat. Например:
stat /home
Увидеть номера инод файлов текущего директория можно командой
ls -i
Посмотреть, как распределились иноды в вашей системе (сколько использовано и сколько свободно) можно командой
df -hTi
Читайте также:
Количество inodes на диске статическое. Это означает, что если у вас много файлов, то иноды могут закончиться раньше, чем закончится дисковое пространство. Как только закончится файловая система, все новые файлы и папки будут отклонены. До этого времени никаких негативных последствий не будет. Когда inodes будет использовано на 100%, вы начнете замечать:
Если вы заметили что-нибудь из вышеупомянутого, используйте df-i для подтверждения того, что вы достигли лимита inode.
Прежде чем что то делать, нужно убедиться что проблема с inodes. Воспользуйтесь командой df:
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda2 121896960 227651 121669309 1% / /dev/hda1 26104 44 26060 1% /boot tmpfs 64417 1 64416 1% /dev/shm
Значения IUsed, IFree, IUse% дадут вам понимание, в какой файловой системе (разделе) у вас проблема.
Потом нужно посмотреть, в какой папке больше всего вложенных элементов (файлов и папок), а потом вывести их списком, список отсортировать в возрастающем порядке, используйте вот такой конвейер:
find . -mindepth 2 | awk -F/ '{ print $2"/" }' | sort | uniq -c | sort -n | tail -10
mindepth 2 или 3 потому, что достаточно просмотреть/посчитать файлы в папках 2/3 уровней вложенности.
Свободное место (df -h) на диске есть, но ничего не работает. Как правило, проблема эта возникает на VPS.
Сниппет на GitHub
# ls -d1 ~/www/* | while read i; do echo -en "$i\t"; find "$i" -name "*" | wc -l; done;
Также на github есть bash скрипт с названием inodes
# wget -O ~/bin/inodes https://raw.smyl.es/inodes/master/inodes # chmod +x ~/bin/inodes