Как планировать количество inodes при создании файловой системы
Что проверяют
Знаете ли вы, что диск может кончиться по числу файлов раньше, чем по байтам, и что на ext4 это решается только при создании файловой системы. Следом обычно дают ситуацию: df -h показывает 40% свободного места, а запись падает с No space left on device.
Как отвечать
Inode хранит метаданные файла: права, владельца, временные метки, указатели на блоки. Имени в нём нет, оно лежит в записи каталога. Каждый файл и каталог занимает один inode, поэтому их число это потолок количества файлов.
Для ext4 параметры задаются в mkfs.ext4:
-i bytes-per-inode: один inode на сколько байт тома. По умолчанию 16384 из/etc/mke2fs.conf, это около 67 млн inodes на ТиБ. На томах от 4 ТиБmke2fsсам берёт профильbigилиhugeс более редким шагом;-N: точное количество inodes, если известно число файлов;-T: готовый профиль.newsиsmallдают плотнее,largefileиlargefile4реже, один inode на 1 или 4 МиБ;-I: размер самого inode, по умолчанию 256 байт. На ТиБ при шаге по умолчанию это около 16 ГиБ метаданных.
Расчёт: ожидаемое число файлов с запасом в два-три раза, отсюда шаг -i примерно равен среднему размеру файла, делённому на запас. Хранилищу видео подойдёт largefile, а кэшу мелких файлов, maildir, сессиям PHP или /var/lib/docker лучше значение по умолчанию или плотнее.
Главное ограничение: на ext4 плотность фиксируется при создании. resize2fs при расширении добавляет inodes пропорционально, но поменять соотношение можно только пересозданием тома. XFS и Btrfs выделяют inodes динамически, у XFS есть лишь верхняя доля места под них (imaxpct), её меняют через xfs_growfs -m. Проверка: df -i и tune2fs -l.
Где спотыкаются
Путают свободные inodes со свободным местом и ищут большие файлы через du, хотя проблема в миллионах мелких.
Считают inodes долей от числа файлов. Если ожидается миллион файлов, inodes нужно не меньше миллиона, а не сто тысяч.
Форматируют том под контейнеры или кэш с -T largefile ради экономии места и через месяц упираются в лимит файлов.