Dubrowsky
Хроники одного дупла
Блогово  →  WebDev  → 

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

12 Апреля 2012 года

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

 

Ну, я ж тупой... поковырялся, то-се, ничего не выходит. Что делать - написал в саппорт. Кстати, саппорт у 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. Но  в нашем обществе потребления возможно все!

Камменты

Vovan07.08.2012, 11:52#
tmpwatch Вам в помощ в этом деле и забудьте про "sess_0*, sess_1*, sess_a*, sess_b*"
Дуброн самый09.08.2012, 18:04#
Vovan, спасибо, это крутая штука, буду знать =) Хотя в том случае я порешал проблему довольно тупо, засунув данные сессий в БД.
Sergey Antipov26.12.2012, 14:37#
Вам на заметку как удалить много файлов не перегружая память, как это сделает rm -rf по маске.
perl -e 'chdir "/path/to/dir/" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'

После opendir D идет маска файлов.

Написать коммент: памятка постеру

 

Крутые посты wtf??? →

28.04.2008 · 44 каммента · рейтинг 9.67
06.03.2008 · 29 камментов · рейтинг 7.79
29.08.2007 · 28 камментов · рейтинг 7.45
28.03.2008 · 23 каммента · рейтинг 6.96
19.01.2008 · 20 камментов · рейтинг 6.43

Последне камменты

22.07.2017  СергейПочему не работает form.submit(): Также столкнулся с неработающим .submit() при отпр...
20.07.2017  СергейСвязь: Здравствуйте. Хочу предложить Вам тройной обмен п...
17.07.2017  Илья АрхипкинСколько журналистов в России?: Мне рассказывали как журналисты освещали акцию в К...
21.05.2017  Vadim GukОбработка кликов и цели в Яндекс.Метрике, улучшенный вариант: Большое спасибо за решение задачи.
20.05.2017  ДмитрийТестовое задание для PHP-программиста (Junior): А джуны ещё нужны у вас в компании?

Статсы