Что делать если закончились inode
Перейти к содержимому

Что делать если закончились inode

  • автор:

Linux: закончились inode

Я недавно рассказывал, как на моем сервачке закончилось место и как я с этим боролся. А тут смотрю — вроде все те же симптомы, хотя вроде все почистил совсем недавно!

Ну, я ж тупой. поковырялся, то-се, ничего не выходит. Что делать — написал в саппорт. Кстати, саппорт у fastvds отменный — отвечают быстро и по делу, хвалю.

Ответили: милый друг Николай, у вас закончились иноды, ща исправим! Ну, и исправили. Я тем временем погуглил в яндексе, что это вообще значит и как с этим бороться в случае чего.

1. Что это значит

inode — оно же index node, оно же индексный дескриптор — это такая структура в никсовых файловых системах, где собственно хранится инфа о файлах, где что лежит, с какими правами, какого типа и т.д. Под них отводится какое-то количество свободного места (типа 1%), если это место заканчивается — мы не можем создавать новые файлы, хотя место на диске есть.

2. Почему такое происходит

На практике, насколько я понял, главная причина — слишком большое количество файлов, как правило это означает, что где-то скапливается мусор. В случае с веб-сервером «мусором» оказываются файлы сессий, если они создаются бездумно и вовремя не чистятся.

3. Как посмотреть

Диагностировать проблему оказалось довольно просто — командой «df -i» в консоли. Она показывает для каждой ФС сколько inodes доступно, сколько использовано, сколько осталось и сколько это будет в процентах.

4. Как бороться

Во-первых, видимо, таки чистить файлы сессий. Я еще не смотрел, что там настроили админы из fastvps, но подозреваю, что это какой-то шелл-скрипт из 10 строчек в кроне. В срочном режиме это решается ручной чисткой директории с сессиями при помощи команды «rf -rm», но есть тонкость. Если попытаться сделать

rm -rf /var/www/tmp/sess_*

под маску может попасть слишком много файлов, и оно будет ругаться в духе «too much arguments». В этом случае я удалял частями тупым перебором — sess_0*, sess_1*, sess_a*, sess_b* и т.д. 🙂 Наверное это можно сделать как-то изящнее одной командой или скриптом. Но когда паника и ничего не работает — не до изяществ 🙂

Во-вторых, хорошо бы настроить рабочие скрипты сайтов так, чтобы файл сессии создавался только когда нужно, а не при каждом обращении. Как это сделать — зависит от ваших скриптов.

Вот так вот, век живи — век учись 🙂

Меня часто спрашивают: нужна ли хипстеру машина в лизинг, особенно грузовая? Если честно, я не могу представить типичного хипстера верхом на какой-нибудь огромной Scania. Но в нашем обществе потребления возможно все!

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

Значения IUsed, IFree, IUse% дадут вам понимание, в какой файловой системе (разделе) у вас проблема.

Потом нужно посмотреть, в какой папке больше всего вложенных элементов (файлов и папок), а потом вывести их списком, список отсортировать в возрастающем порядке, используйте вот такой конвейер:

find . -mindepth 2 | awk -F/ '< print $2"/" >' | sort | uniq -c | sort -n | tail -10

mindepth 2 или 3 потому, что достаточно просмотреть/посчитать файлы в папках 2/3 уровней вложенности. tail -10 это значит будет показан топ 10 папок с наибольшим количеством элементов.

На самом деле, когда в системе все сделано правильно, то такой проблемы как недостаток inodes не возникает.
Как минимум это подтверждает мой опыт использования SCO UNIX 3.2v4.2 на промышленном предприятии, SCO Open Desktop 3, OpenServer 5 в банке для работы банковской системы, RedHat Linux, CentOS в разных «диспетчерских» (колл-центрах). Не было проблем с инодами.

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

количество файлов может быть больше чем количество inode, но обычно совпадает с большой точностью 🙂
ставь утилиту ncdu, удобная консольная вещица для прочистки диска от лишнего
в ней есть режим c — показ количество единиц содержимого каждого каталога со всеми подкаталогами.
смотри help.

мож перейти на фс с динамическим количеством inode ??

Ответ написан более трёх лет назад

lapka-admin

lapka-admin @lapka-admin Автор вопроса

мож перейти на фс с динамическим количеством inode ??

спасибо, подумаю, а какие это фс например?
Александр Комарчук @AlexanderKomarchouk
lapka-admin, XFS статья, и wikipedia XFS например

XFS — высокопроизводительная 64-битная журналируемая файловая система, созданная компанией Silicon Graphics для собственной операционной системы IRIX. 1 мая 2001 года Silicon Graphics выпустила XFS под GNU General Public License. XFS отличается от других файловых систем тем, что она изначально была рассчитана для использования на дисках большого объёма (более 2 терабайт, см. например, RAID-массивы).

Поддержка XFS была включена в ядро Linux версий 2.4 (начиная с 2.4.25, когда Марчело Тозатти (Marcelo Tosatti) посчитал её достаточно стабильной) и 2.6, и, таким образом, она стала довольно универсальной для Linux-систем. Инсталляторы дистрибутивов openSUSE, Gentoo, Mandriva, Slackware, Ubuntu, Fedora и Debian предлагают XFS как вариант файловой системы для установки. FreeBSD стала поддерживать XFS в режиме чтения в декабре 2005 года, с июня 2006 была представлена экспериментальная поддержка записи. Несмотря на это, её предполагалось использовать только для облегчения миграции с Linux, но не основной файловой системы. Поддержка XFS была удалена в FreeBSD 10.[1]
Особенности

64-битная файловая система.
Журналирование только метаданных (если не задать иное параметрами).
Выделение места экстентами (Extent — указатель на начало и число последовательных блоков). В экстентах выделяется место для хранения файлов, а также экстентами хранятся свободные блоки.
B-tree индексы активно используются для хранения различных данных файловой системы: для списка блоков с inode-ами, списка экстентов с содержимым файла, каталогов файлов, списков экстентов свободных блоков (свободные блоки проиндексированы и по размеру блока, и по расположению). Однако использование b-tree индексов не догма — небольшой файл или каталог может быть размещен прямо внутри inode.
Отложенное выделение места (Delayed allocation). При записи файла для него выделяется место в памяти, а на диске выделяется место только при записи файла на диск. Таким образом под файл оптимально выделяется место на диске, что уменьшает фрагментацию.
Изменение размера «на лету» (только увеличение).
Размещение в нескольких линейных областях (по умолчанию — 4 шт.) т. н. «allocation groups» (увеличивает производительность путём выравнивания активности запросов как к разным дискам на RAID-массивах типа «stripe», так и при асинхронном обращении к файловой системе на обычном диске.)
Дефрагментация «на лету».
API ввода-вывода реального времени (для приложений жёсткого или мягкого реального времени, например, для работы с потоковым видео).
Интерфейс (DMAPI) для поддержки иерархического управления носителями (HSM).
Инструменты резервного копирования и восстановления (xfsdump и xfsrestore).
«Индексные блоки» inode выделяются динамически (по мере надобности) и неиспользуемые inode могут освобождаться (высвобождая место для хранения данных).
Малые «накладные расходы» — размер служебных структур данных. На вновь созданной файловой системе XFS на служебные нужды тратится порядка 0,54 %. Это достигается малым количеством заголовков для групп (allocation groups), а также за счет динамического выделения inode.

Невозможно уменьшить размер существующей файловой системы. Если раздел на диске занят XFS, его размер нельзя будет изменить в меньшую сторону (это важно принимать во внимание при разбивке диска).
Восстановление удалённых файлов в XFS — очень сложный процесс, поэтому на данный момент (2014 год) для этого существует всего лишь несколько программных продуктов, например «Raise Data Recovery for XFS» для ОС Windows.
Возможность потери данных во время записи при сбое питания, так как большое количество буферов данных хранится в памяти при том, что метаданные записываются в журнал (на диск) оперативно. Это характерно и для других файловых систем с журналированием метаданных.

Что делать если закончились inode на VPS

Проблема: свободное место (df -h) на диске есть, но ничего не работает. Как правило, проблема эта возникает на VPS. За over9000+ лет c Linux/BSD я не сталкивался с ней на обычном компьютере. И раз я упомянул о VPS, то причины основные такие:

с сервера рассылается спам и у вас огромная почтовая очередь (Как посмотреть и очистить почтовую очередь)

на сервере установлена панель ISPmanager и в каталоге mod-tmp скопилось огромное количество файлов (Проблема с удалением PHP сессий)

невыносимый битрикс со своим /bitrix/cache/ или другие чудо cms

Теперь собственно, как проверить какая директория сколько inode занимает.

Нашёл на 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

Сайт rtfm.wiki использует cookies и трекинг посещений. Продолжая использовать этот сайт, вы соглашаетесь с сохранением файлов cookie на вашем компьютере. Если вы не согласны покиньте сайт или включите Adblock �� ОК Что такое cookies? ��

Закончились ноды. Как освободить inodes в Linux

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

В кратце, иноды такой параметр файловой системы который говорит сколько файлов (именно количество ) вы можете создавать.

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

У меня всегда с горем пополам получалось зайти в систему. Следующий шаг это собственно проверить использование инодов коммандой:

df -i или df -ih
df -i или df -ih

получаем такой примерно ответ:

1 2 3 4 5 6 7 8 9
Filesystem Inodes IUsed IFree IUse% Mounted onbr /> udev 114424 402 114022 1% /devbr /> tmpfs 117681 646 117035 1% /runbr /> /dev/vda1 1935360 335956 1599404 94% /br /> tmpfs 117681 1 117680 1% /dev/shmbr /> tmpfs 117681 5 117676 1% /run/lockbr /> tmpfs 117681 18 117663 1% /sys/fs/cgroupbr /> /dev/vda15 0 0 0 - /boot/efibr /> tmpfs 117681 11 117670 1% /run/user/0
Filesystem Inodes IUsed IFree IUse% Mounted on 
udev 114424 402 114022 1% /dev
tmpfs 117681 646 117035 1% /run
/dev/vda1 1935360 335956 1599404 94% /
tmpfs 117681 1 117680 1% /dev/shm
tmpfs 117681 5 117676 1% /run/lock
tmpfs 117681 18 117663 1% /sys/fs/cgroup
/dev/vda15 0 0 0 - /boot/efi
tmpfs 117681 11 117670 1% /run/user/0

Если видно что сумарно мы близки к 100% поздровляю у вас проблеммы, чаще всего это какието сервисы которые создают постоянно файлы но не удаляют их и через какоето время заполняют весь диск, но не размером а количеством файлов

Чтобы найти в каких папках используются больше всего инодов можно воспользоваться коммандой:

 uniq -c  2>/dev/null
 < find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n; >2>/dev/null

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *