November 4th, 2015

kot

Cannot create temporary directory /tmp No space left on device (28)

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

Для начала на сервере упало почти всё. В логах ошибка:

Cannot create temporary directory /tmp No space left on device (28)

Команда df -h показала наличие как минимум 10 гигов свободного места. Получается, свободное место есть, а записать ничего нельзя.

В итоге суть проблемы выяснилась после выполнения команды df -ih : как оказалось, в Ubuntu есть ограничение на количество индексных дескрипторов (inodes), и в моём случае оно достигло максимума. Под виндой, признаться, мне и в голову не могло прийти, что такая проблема вообще может существовать.

Осталось только найти место максимального скопления файлов:

for i in /*; do echo $i; sudo find $i | wc -l; done

Потом вместо /* подставил путь с наибольшим количеством:

for i in /var/*; do echo $i; find $i | wc -l; done

И так до последней точки.

В моём конкретном случае причиной проблем оказалось огромное количество файлов сессий в /usr/lib/php5/ -- в настройках php не был включен GC для сессий (session.gc_probability). Для начала включил GC, а потом минут на 20 запустил команду для чистки старых сессий:

find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

Не уверен, что это всё, возможно это команду ещё нужно будет в cron поставить. Будем посмотреть, в общем.