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

На главную

61c46507-12c7-4300-a301-bd8bc30c7c19 Инструкции для серверов

Переполнение inodes

Inodes, или индексные дескрипторы («описатели») — это структуры данных в системах Unix, используемые для хранения информации о файлах и каталогах. Так как дескрипторы являются, по сути, данными о данных, их также называют метаданными.

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

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

Получить информацию о количестве использованных и занятых дескрипторов можно при подключении по SSH, с помощью следующей команды:

df -hTi

Значения в выводе команды:

  • Inodes — объем доступного пространства для индексных дескрипторов;
  • IUsed — объем, занятый дескрипторами;
  • IFree — свободный объем;
  • IUse% — объем, занятый дескрипторами, в процентах.

Inodes

Для решения проблемы с недостатком свободных inodes необходимо удалить достаточное число файлов или каталоги с большим числом файлов.

Найти директории, содержащие в себе большое количество файлов, можно с помощью команды ниже. 

Ее можно использовать, например, в корневой директории ОС или корневой директории сайта, а дальше при необходимости спускаться ниже и ниже по структуре.

echo "Detailed Inode usage for: $(pwd)" ; for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n"

Команда подойдет для серверов с операционными системами Ubuntu, Debian или CentOS. Если вы используете другую ОС и команда не срабатывает — свяжитесь с поддержкой, постараемся помочь.

Удалить ненужные файлы и директории можно с помощью команды rm. Будьте внимательны при ее использовании.

Была ли статья полезна?

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону