Я полагаю, что проблема у вас не в том, что раздел заполняется inode, а в исчерпании количества inode в файловой системе. ext4 резервирует inode статически при создании файловой системы, но вы можете установить число с опциямиmkfs.ext4
:
-i bytes-per-inode
Определяет отношение байтов к индексу. mke2fs создает индекс для каждого байта на индекс байтов пространства на диске. Чем больше отношение байтов к индексу, тем меньше будет создано инодов.
-N число инодов
Переопределяет вычисление по умолчанию количества инодов, которое должно быть зарезервировано для файловой системы (которое основано на количестве блоков и соотношении байтов на инод). Это позволяет пользователю указывать количество желаемых inode напрямую.
В руководстве четко указано, что число байтов на индекс Inode не может быть изменено после создания FS, но общее число будет масштабироваться в соответствии с отношением, если FS изменяется.
Вы также можете установить размер каждого inode. Значение по умолчанию составляет 256 байт в «большинстве» файловых систем, но может быть уменьшено до 128 (значение по умолчанию для «небольших» файловых систем). Дополнительное пространство используется для хранения расширенных атрибутов (например, меток SELinux), поэтому, если они вам не нужны, можно безопасно уменьшить размер до минимума.
-I inode-size
Укажите размер каждого inode в байтах. Значение размера inode должно быть на 2 больше или равно 128.
df -i
должен показывать количество выделенных и использованных инодов. С опциями по умолчанию у одного 30-гигабайтного раздела, на который я смотрел, был один инод для каждых 16 кБ, но если ваши файлы очень малы, вы можете установить, скажем, -i 4096
один инод для каждого блока данных в системе.
Если ваши файлы меньше 4096, вы можете также уменьшить размер блока файловой системы, поскольку для всех обычных файлов в любом случае потребуется один полный блок данных. (То есть на ext4. Я не знаю, выполняют ли другие текущие файловые системы упаковку небольших файлов.)
-b block-size
Указать размер блоков в байтах. Допустимые значения размера блока: 1024, 2048 и 4096 байт на блок. Если опущен, размер блока эвристически определяется размером файловой системы и ожидаемым использованием файловой системы (см. Параметр -T).
mkfs.ext4
также имеет -T <type>
опцию, которая может использоваться как сокращение для некоторых или всех из них. Настройки находятся в том /etc/mke2fs.conf
, что на моем Debian, например, mkfs.ext4 -T small
эквивалентно
mkfs.ext4 -b 1024 -I 128 -i 4096
Что может быть неплохим набором опций для множества маленьких файлов (и без xattrs.)
Если ваши файлы даже меньше чем один килобайт, файловая система может не быть лучшим способом сохранить данные, но возможно следует рассмотреть что-то вроде базы данных или системы, специфичной для приложения.
mkfs.ext4 -t news
для достижения наилучших результатов. Кроме того, я бы посоветовал протестировать - по очереди создать (на lvm или устройстве loopback) каждую из файловых систем и начать копировать в нее свои реальные файлы, пока они не заполнятся. Когда он заполнится, сделайтеdf -i
(илиfind | wc -l
), чтобы найти, какой из них сумел сохранить большинство ваших файлов - таким образом, вы точно об этом узнаете.