O tamanho do diretório não vale nosso esforço

Isso é completamente inútil, desnecessário no uso prático, mas um pequeno post divertido sobre diretórios em sistemas * nix. Sexta é a mesma coisa.

Nas entrevistas, perguntas entediantes sobre inodes costumam aparecer como arquivos completos, os quais poucos podem responder com prudência. Mas se você se aprofundar um pouco, poderá encontrar coisas curiosas.

Para entender o post alguns pontos:

  • tudo é um arquivo. O diretório também é um arquivo
  • um metadado de inode do arquivo é armazenado, mas o nome do arquivo não é armazenado lá
  • nome do arquivo é armazenado nos dados do diretório
  • o tamanho do diretório, o mesmo mostrado em ls e o padrão é 4Kb, depende do número de arquivos no diretório e do tamanho de seus nomes
  • obviamente, quanto mais arquivos, maior o tamanho do diretório

E agora a parte interessante: criamos um diretório com um milhão de arquivos, verificamos o tamanho do diretório e, em seguida, limpamos 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ê pode corrigir o tamanho do diretório (sem excluir) apenas com fsck (e a opção -D) no estado desmontado.

Mas quando fui procurar por que isso é verdade, aconteceu que há 10 anos esse comportamento já era discutido no lkml. E, de acordo com os desenvolvedores, a correção simplesmente não vale o esforço.

Source: https://habr.com/ru/post/pt462295/


All Articles