O que determina um tamanho de diretório?

10

Eu sei que o tamanho de um diretório em si é uma coisa diferente do tamanho dos arquivos nele.

Penso em um diretório como uma lista dos diretórios e arquivos dentro, portanto, o tamanho de um diretório deve estar relacionado ao número de arquivos / diretórios dentro, com um mínimo de 4096 bytes devido à restrição de tamanho de bloco.

Mas, no meu sistema, tenho muitos diretórios bem preenchidos com 4096 bytes e alguns diretórios consideravelmente menos preenchidos, com cerca de 10 megabytes. Você pode me explicar por que isso acontece?

Macond
fonte
1
Para uma leitura mais aprofundada, isso é bastante informativo: askubuntu.com/a/404716/380067
kos
3
Não se trata apenas do número de entradas no diretório, mas também do tamanho de seus nomes.
kasperd

Respostas:

13

O sistema de arquivos usado e o número máximo de entidades nesse diretório a qualquer momento determinam o tamanho. Depois que o tamanho padrão reservado para o diretório estiver esgotado, mais espaço será alocado para o diretório. No entanto, quando o número de entidades diminui, o espaço alocado não é liberado automaticamente. Portanto, se, a certa altura, um diretório tiver 10 milhões de entidades, ele permanecerá do mesmo tamanho se 9.999.999 deles forem excluídos. Isso leva a situações interessantes, como neste post sobre Unix e Linux .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Isso não é necessariamente válido para outros sistemas de arquivos. Os ext{2,3,4}sistemas de arquivos são afetados. NTFS é, em menor grau. tmpfse btrfs não são. O ZFS é bastante conservador, obtive uma saída 2para o segundo statcomando.

Palavras-chave:

muru
fonte
Ótimo! Eu ainda estava me perguntando como isso poderia ser.
kos
O XFS não é afetado! deve adicionar
Edward Torvalds