Около месяца мы боролись с тем, что на сервере постоянно кончаются 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
- путь до проблемной папки.
После этих операций количество свободных айнод перевалило за миллион. Победа!
Спасибо Андрею Романову за помощь в решении проблем!