Qual é o número máximo de arquivos que uma pasta Unix pode conter?

20

Qual é o número máximo de arquivos que uma pasta Unix pode conter?

Eu acho que será o mesmo que o número de arquivos.

Peter Mortensen
fonte
3
Uma pergunta muito melhor pode ser: quantas devo usar? stackoverflow.com/questions/466521/…
Joachim Sauer
11
Eu adoraria que os URLs do meu site parecessem site.com/username/ etc., mas pensando que (se tiver sorte) receba mais de 2 milhões de usuários que seriam mais de 2 milhões de pastas, pois não quiser usar um script como PHP com um modrewrite Eu estava olhando para o outro possibilitie de pastas em uma pasta
11
Faça um favor a si mesmo e crie subdiretórios com um esquema de reescrita.
Peter Eisentraut

Respostas:

14

Em todos os sistemas de arquivos Unix atuais, um diretório pode conter um número praticamente ilimitado de arquivos. Enquanto "ilimitado" é limitado por espaço em disco e inodes - o que ocorrer primeiro.

Nos projetos mais antigos de sistemas de arquivos ( ext2 , UFS , HFS + ), as coisas tendem a ficar lentas se você tiver muitos arquivos em um diretório. Geralmente, as coisas começam a ficar dolorosas em torno de 10.000 arquivos. Com sistemas de arquivos mais recentes ( ReiserFS , XFS , ZFS , UFS2 ), você pode ter milhões de arquivos em um diretório sem ver gargalos de desempenho geral.

Mas ter tantos arquivos em um diretório não é bem testado e há muitas ferramentas que não são bem assim. Por exemplo, scripts de manutenção periódica do sistema podem vomitá-lo.

Felizmente, usei um diretório com vários milhões de arquivos no UFS2 e não havia problemas até querer excluir o diretório - isso levou vários dias.

max
fonte
12

Depende de quantos inodes o sistema de arquivos foi criado. Executando

df -i 

lhe dará o número de inodes livres. Esse é o limite prático de quantos arquivos um sistema de arquivos e, portanto, um diretório podem conter.

Peter Mortensen
fonte
11
No entanto, muitos sistemas de arquivos têm um limite de arquivos por diretório, independentemente do número de inodes livres.
11
sim, mas a pergunta foi direcionada aos sistemas de arquivos UNIX e, tanto quanto sei, todos os sistemas de arquivos UNIX modernos não limitam o número de arquivos em um diretório.
6

Presumo que você esteja pensando em armazenar muitos arquivos em um só lugar, não?

A maioria dos sistemas de arquivos Unix modernos pode colocar muitos arquivos em um diretório, mas operações como seguir caminhos, listar arquivos etc. envolvem uma pesquisa linear na lista de arquivos e ficam lentas se a lista crescer muito.

Lembro-me de ouvir que alguns milhares são demais para os usos mais práticos. A solução típica é dividir o agrupamento. Isso é,

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

e armazene seus arquivos no subdiretório apropriado de acordo com um hash deles basename. Escolha um hash conveniente, o primeiro caractere pode ser usado para casos simples.


Cristian Ciupitu escreve nos comentários que o XFS e, possivelmente, outros sistemas de arquivos muito novos, usam log(N)estruturas pesquisáveis ​​para manter o conteúdo do diretório, portanto essa restrição é bastante melhorada .

dmckee
fonte
5
Alguns sistemas de arquivos modernos, como o XFS, não envolvem uma pesquisa linear. A tecnologia B-Tree do XFS permite ir diretamente aos blocos e / ou extensões que contêm a localização de um arquivo usando índices sofisticados (de uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html ).
Cristian Ciupitu 26/01/2009
Ah! Eu não sabia disso. Obrigado. Irá adicionar ao texto.
dmckee
11
Para ext3, você deve ativar o recurso "dir_index", cf. tune2fs (8).
0

ext3um dos formatos mais comuns de sistema de arquivos linux fica muito lento se você tiver cerca de 20k + de arquivo em um diretório. Independentemente de quantos podem conter, você deve evitar ter tantos arquivos em um diretório.

Rory
fonte
0

Pelo comentário que você deixou, acho que você realmente não se importa com quantos arquivos / pastas seu FS pode hospedar.

Você provavelmente deve considerar usar o ModRewrite e reescrever site.com/username para site.com/?user= ou algo do tipo e armazenar todos os seus dados em um banco de dados. Criar uma pasta por usuário geralmente não é necessário (e não é uma boa ideia).

Dito isto, cada sistema de arquivos tem limites e dfpode dizer quantos inodes estão disponíveis em cada partição do seu sistema.

ℝaphink
fonte