Есть ли верхний предел общего количества файлов, хранящихся в одном подкаталоге во FreeBSD 6?
Файловая система - ufs
Это обсуждалось в списке freebsd-questions в ноябре 2008 года. Цитата из Эрик Трулссон:
Каждый i-узел на диске содержит поле, показывающее, сколько жестких ссылок указывают на этот inode. Это поле представляет собой (подписанное) 16-битное значение, что означает, что максимальное разрешенное количество жестких ссылок составляет 32767. Каждый созданный подкаталог содержит жесткую ссылку ('..') на его родительский элемент, тем самым ограничивая количество подкаталогов в одном каталоге до меньшего. чем 32767.
Обратите внимание, что это не ограничивает количество файлов, которые вы можете иметь в одном каталоге, поскольку обычные файлы не содержат жестких ссылок на родительский каталог, но, конечно, есть ограничения на общее количество файлов и каталогов, которые вы можете иметь в одном файловая система в зависимости от того, сколько inodes было создано при первом создании файловой системы.
(Полное сообщение, начало потока)
Это теоретические пределы; как обсуждалось выше, вы начнете сталкиваться с проблемами производительности задолго до того, как достигнете каких-либо ограничений.
Я ожидал, что это число также будет зависеть от типа задействованной файловой системы.
Я сделал некоторые вещи с freebsd 6.x, которые связаны с большим количеством файлов (50 000+) и не помню каких-либо конкретных ограничений. Быстрая проверка в системе 7.2 показывает, что лимит намного превышает 100000. На данный момент процесс все еще запущен, и в случае сбоя я дам вам знать, каков жесткий предел для 7.2, который, вероятно, похож на 6.x.
Тем не менее, при создании новых файлов / каталогов вы видите огромный скачок производительности для около 30 000 записей каталогов. В этот момент люди начинают создавать файлы с именем HashOfName / name вместо простого имени, чтобы упростить поиск.
На ваш вопрос уже дан ответ, так что небольшой совет по производительности: если у вас много маленьких файлов, вам следует увеличить vfs.ufs.dirhash_maxmem, по умолчанию 2 МБ слишком малы для тысяч файлов.
У меня есть такая строка в моем /etc/sysctl.conf
vfs.ufs.dirhash_maxmem=67108864
О дирхаше можно прочитать здесь (Улучшения UFS @ BSDCON) и тут (Вики)
Общее количество inodes - это ограничение на общее количество файлов, которые вы можете поместить в каталог. Общее количество inodes создается при форматировании жесткого диска. Вы можете сделать больше inode, используя сегменты небольшого размера. См. Подробности в man newfs.
Vfs.ufs.dirhash_maxmem предназначен для памяти, используемой для хранения имен каталогов в каталоге. Это влияет только на производительность, никаких ограничений. Если у вас памяти больше, сделайте ее больше, иначе не мешайте.