Какое максимальное количество файлов может содержать папка Unix?

20

Какое максимальное количество файлов может содержать папка Unix?

Я думаю, что это будет так же, как количество файлов.

Питер Мортенсен
источник
3
Гораздо лучший вопрос может быть: сколько я должен использовать? stackoverflow.com/questions/466521/…
Йоахим Зауэр
1
Мне бы очень хотелось, чтобы URL моего сайта выглядели как site.com/username/ и так далее, но я думаю, что (если мне повезет) получат более 2 миллионов пользователей, которые будут иметь более 2 миллионов папок, поскольку я не хочу использовать скрипт, такой как PHP, с modrewrite, я искал другие возможности папок в папке
1
Сделайте себе одолжение и создайте подкаталоги со схемой переписывания.
Питер Айзентраут

Ответы:

14

На всех современных файловых системах Unix каталог может содержать практически неограниченное количество файлов. Принимая во внимание, что «неограниченный» ограничен дисковым пространством и inode - что бы ни заканчивалось сначала.

Со старыми проектами файловой системы ( ext2 , UFS , HFS + ) дела идут медленно, если у вас много файлов в каталоге. Обычно вещи начинают становиться болезненными около 10000 файлов. С новыми файловыми системами ( ReiserFS , XFS , ZFS , UFS2 ) вы можете хранить миллионы файлов в каталоге, не видя узких мест в производительности.

Но наличие такого количества файлов в каталоге плохо проверено, и есть много инструментов, которые не справляются с этим. Например, сценарии периодического технического обслуживания системы могут препятствовать этому.

Я с радостью использовал каталог с несколькими миллионами файлов в UFS2 и не видел проблем, пока не захотел удалить каталог - это заняло несколько ДНЕЙ.

Максимум
источник
12

Это зависит от того, сколько инодов была создана файловая система. проведение

df -i 

даст вам количество бесплатных инодов. Это практический предел того, сколько файлов может содержать файловая система и, следовательно, каталог.

Питер Мортенсен
источник
1
Однако многие файловые системы имеют ограничение на количество файлов в каталоге, независимо от количества свободных инодов.
1
да, но вопрос был нацелен на файловые системы UNIX, и, насколько мне известно, все современные файловые системы UNIX не ограничивают количество файлов в каталоге.
6

Я предполагаю, что вы думаете о хранении большого количества файлов в одном месте, нет?

Большинство современных файловых систем Unix могут помещать множество файлов в один каталог, но такие операции, как следование по пути, перечисление файлов и т. Д., Включают в себя линейный поиск по списку файлов и замедляются, если список становится слишком большим.

Кажется, я помню, что слышал, что пара тысяч - это слишком много для практического использования. Типичное решение - разбить группу на группы. То есть,

/some/path/to/dir/a/
/some/path/to/dir/b/
...
/some/path/to/dir/z/

и сохраните ваши файлы в соответствующем подкаталоге в соответствии с их хешем basename. Выберите удобный хеш, первый символ может сделать для простых случаев.


Кристиан Чиупиту пишет в комментариях, что XFS и, возможно, другие очень новые файловые системы используют log(N)структуры с возможностью поиска для хранения содержимого каталога, поэтому это ограничение значительно улучшается .

dmckee
источник
5
Некоторые современные файловые системы, например XFS, не включают линейный поиск. Технология XFS B-Tree позволяет ему напрямую переходить к блокам и / или экстентам, содержащим местоположение файла, с использованием сложных индексов (из uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html ).
Кристиан Чиупиту
Ах! Я этого не знал. Спасибо. Добавлю в текст.
dmckee
1
Для ext3 вы должны активировать функцию "dir_index", ср. tune2fs (8).
0

ext3Один из наиболее распространенных форматов файловой системы Linux становится очень медленным, если у вас есть около 20k + файлов в каталоге. Независимо от того, сколько он может хранить, вы должны стараться избегать того, чтобы столько файлов находилось в одном каталоге.

Рори
источник
0

Из комментария, который вы оставили, я думаю, что вам не важно, сколько файлов / папок может разместить ваша FS.

Вам, вероятно, следует подумать об использовании ModRewrite и переписать site.com/username для site.com/?user= или что-то в этом роде и сохранить все ваши данные в базе данных. Создание одной папки для пользователя обычно не требуется (и не является хорошей идеей).

Тем не менее, каждая файловая система имеет ограничения и dfможет сказать вам, сколько inode доступно в каждом разделе вашей системы.

ℝaphink
источник