El tamaño del directorio no vale nuestro esfuerzo

Esto es completamente inútil, innecesario en el uso práctico, pero es una pequeña publicación divertida sobre directorios en sistemas * nix. El viernes es igual.

En las entrevistas, a menudo surgen preguntas aburridas sobre inodes, todo-es-archivos, que pocos pueden responder con sensatez. Pero si profundizas un poco más, puedes encontrar cosas curiosas.

Para entender la publicación algunos puntos:

  • Todo es un archivo. el directorio también es un archivo
  • En un inodo se almacenan 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 que se muestra en ls y su valor predeterminado es 4Kb, depende de la cantidad de archivos en el directorio y la longitud de sus nombres
  • obviamente, cuantos más archivos, mayor es el tamaño del directorio

Y ahora para la parte interesante: cree un directorio con un millón de archivos, verifique el tamaño del directorio y luego borre todos los archivos y observe 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 parece :)

Puede corregir el tamaño del directorio (sin eliminar) solo con fsck (y la opción -D) en el estado desmontado.

Pero cuando busqué por qué es así, resultó que hace 10 años este comportamiento ya se discutió en lkml. Y según los desarrolladores, la solución simplemente no vale la pena.

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


All Articles