El tamaño de los directorios no merece nuestro esfuerzo.

Esta es una pequeña publicación completamente inútil, innecesaria en la aplicación práctica, pero divertida sobre directorios en sistemas *nix. Es viernes.

Durante las entrevistas, a menudo surgen preguntas aburridas sobre inodos, todo son archivos, que pocas personas pueden responder con sensatez. Pero si profundizas un poco más, puedes encontrar cosas interesantes.

Para entender el post, algunos puntos:

  • todo es un archivo. El directorio también es un archivo.
  • el inodo almacena metadatos del archivo, pero el nombre del archivo no se almacena allí
  • el nombre del archivo se almacena en los datos del directorio
  • El tamaño del directorio, el mismo que se muestra en ls y que por defecto es de 4Kb, depende de la cantidad de archivos en el directorio y la longitud de sus nombres.
  • Obviamente, cuantos más archivos, mayor será el tamaño del directorio.

Y ahora lo interesante: creamos un directorio con un millón de archivos, verificamos el tamaño del directorio, luego eliminamos todos los archivos y miramos el tamaño del 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 puede ver, el tamaño del directorio no ha cambiado, aunque parezca :)

Solo puede corregir el tamaño de un directorio (sin eliminarlo) usando fsck (y la opción -D) en un estado desmontado.

Pero cuando fui a buscar por qué esto era así, resultó que hace 10 años este comportamiento ya había discutido en lkml. Y según los desarrolladores, la solución simplemente no vale la pena.

Fuente: habr.com

Añadir un comentario