В linux каждый файл или каталог хранится в виде структуры данных, называемой inode (index node). Inode содержит метаданные: права доступа, владельца, временные метки и ссылки на блоки с данными.
Даже если у вас много свободного места на диске, но закончились inodes - новые файлы создать не получится. Чаще всего такая ситуация возникает на серверах, где генерируются миллионы мелких файлов (логи, временные данные, кеши).
▪️ Проверка использования inodes. Чтобы посмотреть статистику по inode на всех файловых системах:
df -i
В столбцах будет видно общее количество inode, сколько уже занято и сколько осталось.
▪️ Ограничение использования inodes
Inode создаются при форматировании файловой системы. Параметры задаются утилитой mkfs (для ext4 - mkfs.ext4). Например, создаем файловую систему с фиксированным количеством inode:
mkfs.ext4 -N 2000000 /dev/sdb1
Здесь -N задает количество inode. По умолчанию mkfs.ext4 рассчитывает их исходя из соотношения «один inode на 16К дискового пространства». Если ожидается много мелких файлов, можно увеличить плотность inode:
mkfs.ext4 -i 4096 /dev/sdb1
(один inode на каждые 4К).
▪️ Ограничение на уровне пользователей
Чтобы не допустить, что один пользователь «забьет» диск миллионами файлов, используют квоты. Включаем поддержку квот в /etc/fstab:
/dev/sdb1 /home ext4 defaults,usrquota,grpquota 0 2
Перемонтируем файловую систему:
mount -o remount /home
Создаем файлы для квот и включаем их:
quotacheck -cum /home
quotaon /home
Ограничиваем inode для пользователя:
edquota -u username
В открывшемся редакторе можно задать soft/hard limit для количества файлов (inodes).
#filesystem #inodes