Решение проблем с ограничением по количеству файлов (inodes)

Около месяца мы боролись с тем, что на сервере постоянно кончаются inodes (по-русски: иноды или айноды). Это индексные дескрипторы файлов. Одна айнода соответствует одному файлу на сервере. В ней хранится некоторая метаинформация, кроме названия и пути к файлу. Подробнее о нашей проблеме - ниже.

Поиск проблемы осложняется тем, что линукс постоянно заявляет, что no space left on device. Но по факту место на самом деле есть (в нашем случае около 5 гигов), но места все равно нет. Значит надо смотреть айноды.

df -h - посмотреть информацию о занятом пространстве на жестком диске
df -i - посмотреть информацию об айнодах

Первоначально я пытался просто удалять некоторые папки, которые содержат очень много файлов. Я считал, что здесь нет никакой проблемы, просто файлов с логами стало слишком много, и их надо немного почистить. Однако освобожденные 55000 айнод забились через 3 дня.

Вечер понедельника

Утро четверга

Это было очень странно. В результате было принято логичное решение найти в системе такую папку, где очень много непонятных файлов.

Чтобы построить дерево всех каталогов и файлов, выполняем команду:

1
tree / > dirs.txt

Команду нужно выполнить с root-правами для того, чтобы в выдачу попали все каталоги системы. Если утилита tree не установлена, устаналиваем ее из репозиторией, например так: apt-get install tree.

В нашем случае сгенерировался файл на 73МБ. После его анализа была найдена папка, в которой скопилось очень много файлов. Для упрощения поиска полного пути до папки, выполняем команду

1
du -h / > dirs.txt

Она покажет нам вес каждой папки и полный путь до нее. Опять же, команда должна выполняться с root-правами.

После того, как был найден полный путь до папки, выяснилось, что в ней содержатся 1098902 файлов на 231 МБ. В получении этих данных помогли команды:

du -h . - подсчет размера текущей папки
ls -f . | wc -l - подсчет количества файлов в текущей папке

Теперь начинаем удалять файлы с помощью

1
rm /path/to/dir -rf

где /path/to/dir - путь до проблемной папки.

После этих операций количество свободных айнод перевалило за миллион. Победа!

Спасибо Андрею Романову за помощь в решении проблем!