O tamaño dos directorios non paga a pena o noso esforzo

Este é un pequeno post completamente inútil, innecesario na aplicación práctica, pero divertido sobre directorios en sistemas *nix. É venres.

Durante as entrevistas, moitas veces xorden preguntas aburridas sobre inodos, todo é ficheiros, que poucas persoas poden responder con cordura. Pero se afondas un pouco máis, podes atopar cousas interesantes.

Para entender o post, algúns puntos:

  • todo é un arquivo. directorio tamén é un ficheiro
  • o inodo almacena os metadatos do ficheiro, pero o nome do ficheiro non se almacena alí
  • o nome do ficheiro gárdase nos datos do directorio
  • O tamaño do directorio, o mesmo que se mostra en ls e é de 4Kb por defecto, depende do número de ficheiros do directorio e da lonxitude dos seus nomes.
  • Obviamente, cantos máis ficheiros, maior será o tamaño do directorio

Agora aquí está a parte interesante: creamos un directorio con un millón de ficheiros, comprobamos o tamaño do directorio e despois eliminamos todos os ficheiros e miramos o tamaño do directorio.

$ 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 podes ver, o tamaño do directorio non cambiou, aínda que pareza :)

Só pode corrixir o tamaño dun directorio (sen borralo) usando fsck (e a opción -D) nun estado desmontado.

Pero cando fun buscar por que isto era así, resultou que hai 10 anos tal comportamento xa tiña discutido en lkml. E segundo os desenvolvedores, a corrección simplemente non paga a pena o esforzo.

Fonte: www.habr.com

Engadir un comentario