Что произойдет, если в одном каталоге слишком много файлов в Linux? - PullRequest
10 голосов
/ 18 марта 2009

Если в одном каталоге примерно 1000000 отдельных файлов (в основном размером 100 КБ), категорически (без других каталогов и файлов в них), будут ли какие-либо компромиссы в эффективности или недостатки в любых других возможных путях? 1001 *

Ответы [ 6 ]

6 голосов
/ 18 марта 2009

ARG_MAX будет иметь дело с этим ... например, rm -rf * (находясь в каталоге) скажет "слишком много аргументов". У утилит, которые хотят сделать какую-то глобализацию (или оболочку), будет некоторое нарушение функциональности.

Если этот каталог доступен для общественности (скажем, через FTP или веб-сервер), вы можете столкнуться с дополнительными проблемами.

Эффект на любую файловую систему полностью зависит от этой файловой системы. Как часто эти файлы доступны, какова файловая система? Помните, Linux (по умолчанию) предпочитает хранить недавно использованные файлы в памяти, а процессы помещать в своп, в зависимости от настроек. Этот каталог обслуживается через http? Будет ли Google просматривать и сканировать его? Если это так, вам может потребоваться настроить давление и перестановку в VFS-кэше.

Edit:

ARG_MAX - это системное ограничение на количество аргументов, которые могут быть представлены точке входа программы. Итак, давайте возьмем «rm» и пример «rm -rf *» - оболочка превратит «*» в список файлов, разделенных пробелом, который, в свою очередь, станет аргументом «rm».

То же самое произойдет с ls и несколькими другими инструментами. Например, ls foo * может сломаться, если слишком много файлов начинаются с 'foo'.

Я бы посоветовал (независимо от того, какой fs используется) разбить его на более мелкие порции каталогов, только по одной этой причине.

3 голосов
/ 18 марта 2009

Мой опыт работы с большими каталогами в ext3 и dir_index включен:

  • Если вы знаете имя файла, к которому хотите получить доступ, штраф практически отсутствует
  • Если вы хотите выполнить операции, которые нужно прочитать во всей записи каталога (например, простой ls в этом каталоге), это займет несколько минут в первый раз. Тогда каталог останется в кеше ядра, и штраф больше не будет
  • Если количество файлов становится слишком большим, вы сталкиваетесь с проблемами ARG_MAX и др. Это в основном означает, что подстановочные знаки (*) не всегда работают, как ожидалось. Это только если вы действительно хотите выполнить операцию со всеми файлами одновременно

Без dir_index однако вы действительно облажались: -D

3 голосов
/ 18 марта 2009

В большинстве дистрибутивов по умолчанию используется Ext3 , который может использовать индексацию b-дерева для больших каталогов. В некоторых дистрибутивах эта функция dir_index включена по умолчанию, в других вам нужно будет включить ее самостоятельно. Если вы включите его, замедления не будет даже для миллионов файлов.

Чтобы увидеть, активирована ли функция dir_index, выполните (от имени root):

tune2fs -l /dev/sdaX | grep features

Чтобы активировать функцию dir_index (как root):

tune2fs -O dir_index /dev/sdaX
e2fsck  -D /dev/sdaX

Замените /dev/sdaX на раздел, для которого вы хотите его активировать.

3 голосов
/ 18 марта 2009

Когда вы случайно выполните «ls» в этом каталоге, или используете завершение табуляции, или захотите выполнить «rm *», у вас будут большие проблемы. Кроме того, могут быть проблемы с производительностью в зависимости от вашей файловой системы.

Рекомендуется группировать ваши файлы в каталоги, имена которых начинаются с 2-х или 3-х символов имен файлов, например,

aaa/
   aaavnj78t93ufjw4390
   aaavoj78trewrwrwrwenjk983
   aaaz84390842092njk423
   ...
abc/
   abckhr89032423
   abcnjjkth29085242nw
   ...
...
0 голосов
/ 02 июля 2009

Не каждая файловая система поддерживает такое количество файлов.

В некоторых из них (ext2, ext3, ext4) очень легко достичь предела inode.

0 голосов
/ 18 марта 2009

Очевидный ответ заключается в том, что людям будет чрезвычайно трудно использовать эту папку задолго до какого-либо технического ограничения (время, затраченное на чтение вывода из ls для одного, это десятки других причин). не разделены на подпапки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...