O tamanho dos diretórios não vale o nosso esforço

Este é um post completamente inútil e desnecessário na aplicação prática, mas engraçado sobre diretórios em sistemas *nix. É sexta feira.

Durante as entrevistas, muitas vezes surgem perguntas chatas sobre inodes, tudo são arquivos, que poucas pessoas conseguem responder com sensatez. Mas se você se aprofundar um pouco mais, poderá encontrar coisas interessantes.

Para entender o post, alguns pontos:

  • tudo é um arquivo. diretório também é um arquivo
  • o inode armazena metadados do arquivo, mas o nome do arquivo não é armazenado lá
  • o nome do arquivo é armazenado no diretório data
  • O tamanho do diretório, o mesmo que é mostrado em ls e tem 4Kb por padrão, depende do número de arquivos no diretório e do comprimento de seus nomes
  • Obviamente, quanto mais arquivos, maior será o tamanho do diretório

Agora aqui está a parte interessante: criamos um diretório com um milhão de arquivos, verificamos o tamanho do diretório e, em seguida, excluímos todos os arquivos e observamos o tamanho do diretório.

$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

Como você pode ver, o tamanho do diretório não mudou, embora pareça :)

Você só pode corrigir o tamanho de um diretório (sem excluí-lo) usando fsck (e a opção -D) em um estado desmontado.

Mas quando fui procurar por que isso acontecia, descobri que há 10 anos esse comportamento já havia discutido em lkml. E de acordo com os desenvolvedores, a correção simplesmente não vale o esforço.

Fonte: habr.com

Adicionar um comentário