Закончились inodes как решить проблему

Inode (далее – инода) – это сокращение от «index node» – по-русски – индексный узел.

Математически он представляет собой описатель (дескриптор) файла и является базовым понятием, на котором основаны многие юниксные и линуксные файловые системы. Иноды подобны каталогу фундаментальной академической библиотеки, в котором находится информация, связывающая название-автор книг с их физическим местонахождением – комната хранилища, стеллаж, полка. Другими словами, иноды – это данные о данных или метаданные, как любят выражаться айтишники. Линуксная инода содержит достаточно много метаданных:

  • размер файла
  • идентификатор (ID) устройства, содержащего файл
  • ID пользователя-владельца файла
  • ID группы пользователей, к которой принадлежит владелец
  • права доступа, присвоенные владельцу, группе и т.н. «другим»
  • права чтения, модификации и исполнения для владельца, группы и других
  • таймштампы моментов последнего доступа и изменения файла
  • счётчик количества жёстких ссылок на файл (если он не нулевой, то файл невозможно удалить)
  • указатели на блоки (кластеры) диска, в которых размещён файл
  • имя папки или блочного устройства, где расположен файл
  • размер блока файловой системы (ФС) раздела, в котором находится файл
  • количество блоков, занимаемых файлом

Как это работает? Каждый раз, когда создается новый файл, ему предоставляется номер 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
PQ VPS сервера в 28+ странах.