У меня 2x 4 ТБ дисков в аппаратном RAID1 (это может быть LSI MegaRaid) в Debian Wheezy. Размер физического блока составляет 4 КБ. Я собираюсь хранить 150-200 миллионов маленьких файлов (от 3 до 10 КБ). Я не спрашиваю о производительности, но о лучшей файловой системе и размерах блоков для экономии места. Я скопировал файл размером 8200 байт в ext4 с размером блока 4 КБ. Это заняло 32 КБ диска !? Является ли журналирование причиной этого? Итак, какие есть варианты, чтобы сохранить большую часть памяти для таких маленьких файлов?
10
Ответы:
Если бы я был в такой ситуации, я бы посмотрел базу данных, которая может хранить все данные в одном файле с компактным индексом на основе смещения, а не в виде отдельных файлов. Может быть, база данных с драйвером FUSE доступна для взаимодействия с ним в виде файлов, когда это необходимо, без того, чтобы все они фактически были отдельными файлами.
В качестве альтернативы вы можете взглянуть на, скажем, 60–70-й процентиль размеров файлов и попытаться приспособить этот размер файла непосредственно к узлам дерева файловой системы, а не как отдельные блоки на диске. Хранение 10 КБ в каждом узле, вероятно, является большой задачей, но если бы вы могли получить 60-70% файлов, это, вероятно, было бы огромным выигрышем.
Только определенные файловые системы могут сделать это вообще (reiserfs - один), и я предполагаю, что все зависит от того, какого размера этот процентиль, будет ли он вписываться в дерево. Вы можете быть в состоянии настроить это. Я думаю, попытаться уместить остальных в один блок.
И не беспокойтесь о журналах; в любом случае они имеют верхний предел размера.
источник