Quantos arquivos eu posso ter em um único diretório?

21

Esta questão está relacionada com esse aqui .

Eu trabalho com animação, o que gera muitos arquivos (+/- 1.000.000) normalmente armazenados em um único diretório. No Mac OS X, alguns bugs surgiram com mais de +/- 30.000 arquivos, então eu costumava quebrar a animação em vários diretórios.

No Ubuntu, existe um limite para o número de arquivos que um único diretório pode conter?

    
por H_7 21.10.2011 / 20:55

1 resposta

31

O Ubuntu não limita o tamanho de um diretório, é imposto pelo sistema de arquivos. Cada arquivo e diretório é um chamado inode. Você pode usar df -i para verificar o número de inodes em uso e disponível para todos os sistemas de arquivos montados.

Acabei de criar 1 milhão e um arquivo sem problemas porque meu limite de inode para minha partição home ext4 de 50 GB (46 GiB) é grande o suficiente.

Eu usei a expansão do shell para criar os arquivos, combinada com o utilitário touch :

mkdir test
cd test
touch {0..300000}
touch {300000..600000}
touch {600000..900000}
touch {900000..1000000}

Isso cria arquivos 1000001 que podem ser verificados com ls | wc -l . Por que 300000..600000 e não 300001..600000 ? Porque eu estava com preguiça de colocar aquele 1 no final.

df -i se parece com:

/dev/sda6            3055616 1133635 1921981   38% /home

Agora remova os arquivos de teste ( cd ..&&rm -f test demorou muito mais tempo, então use rm com os nomes dos arquivos):

rm {0..300000}
rm {300000..600000}
rm {600000..900000}
rm {900000..1000000}
cd ..
rmdir f

e o número de inodes em uso diminuiu imediatamente após a remoção dos arquivos:

/dev/sda6            3055616  133634 2921982    5% /home

Observe que, mesmo que o sistema de arquivos permita um grande número de arquivos, é uma idéia horrível armazenar arquivos tão grandes em um único diretório. Pelo menos use alguns subdiretórios com uma estrutura como f/i/l/e/filename.ext . Os programas geralmente não esperam grandes quantidades de arquivos.

    
por Lekensteyn 21.10.2011 / 21:20