Закончилось место на диске, хотя оно есть (Linux/Debian)

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

Вот тут видно что место есть

 df -h |grep /sda1
/dev/sda1          120G          78G   37G           68% /

А если сделать вот так, то увидим что его нет

df -i /
Файловая система  Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в
/dev/sda1        7987200       7987200      0              100% /

Как такое получается, ну видимо так зарезервировали свободное место на диске...

На веб-сервере чаще всего проблема в сессиях, но удалить их так просто не получится, нужно сделать примерно вот так (предварительно зайдя в папку с сессиями или указав путь до нее вместо точки)

find . -name "sess*" -delete -print

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

rm -r /path/

т.е. не так ./*, а просто до папки...

Дальше выяснилось, что не только сессиями заполнен диск, нужно искать дальше, на помощь приходит примерно такой скрипт

du -s --inodes * 2>/dev/null |sort -g

Перейдем в корень и попробуем выяснить где тут много файлов...

Можно конкретно указывать где смотреть...

du -s --inodes /var/* 2>/dev/null |sort -g

или

du -s --inodes /var 2>/dev/null |sort -g

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

find /path/to/sess -name "sess_*" -mmin +43200 -delete 

Это чистит куки, у которых время изменения больше 43200 минут, т.е. более месяца... Добавим это в кронтаб раз в 15 минут и можем жить спокойно... За месяц примерно 343278 сессий, при посещаемости 200 человек в сутки должно быть 6000 сессий в месяц, это значит что слишком много кто получает страницы не используя куки, т.е. каждая страница как новый посетитель, это скорей всего, всякие поисковые роботы, парсеры конкурентов...

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