¿Cómo se calcula el tamaño del directorio?

¿Cómo se calcula el tamaño del directorio?

Ejecuté esto en mi instancia de CentOS 7.3.

[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/ 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 6           Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 16          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ date > my-very-own-directory/date.txt 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 32          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 47          Blocks: 0          IO Block: 4096   directory
  • Creación inicial => tamaño = 6
  • Agregue una entrada con 2 bytes en la longitud del nombre => el tamaño es 16 (6 + 8 + 2)
  • Agregue otra entrada con 4 bytes en la longitud del nombre => el tamaño es 32 (16 + 8 + 8)
  • Agregue otra entrada con 7 bytes en la longitud del nombre => el tamaño es 47 (32 + 8 + 7)

2 preguntas:

  1. Un directorio creado tiene un tamaño de 6. ¿Por qué?
  2. Cada nueva entrada al directorio, ya sea un archivo de un subdirectorio, aumentará el tamaño de 'mi-propio-directorio'. La pregunta es, el tamaño aumenta en 8 + (longitud del nombre del archivo/nombre del directorio). ¿Por qué 8?

Respuesta1

El formato del directorio depende completamente del sistema de archivos.

Como mínimo, una entrada de directorio debe contener el nombre del archivo y un número de inodo.

Usar elext4sistema de archivos linux(y versiones anteriores), como ejemplo, la entrada del directorio original tenía el número de inodo (4 bytes), la longitud del nombre del archivo (2 bytes) y la longitud total de la entrada (2 bytes), más el nombre del archivo en sí. (IIRC, la longitud total se especifica explícitamente para permitir el relleno y demás).

Las versiones actuales (desde ext3) también admiten un almacenamiento de tipo árbol, que permite búsquedas más rápidas en directorios con una gran cantidad de archivos, pero, por supuesto, tiene un formato más complicado.

Aunque en ext4, el tamaño de un directorio se muestra solo como un múltiplo del tamaño del bloque, es decir, un directorio vacío tiene tamaño 4096y no aumenta hasta que se crean suficientes archivos para requerir la asignación de un nuevo bloque de datos.

RHEL 7 usa XFS como sistema de archivos predeterminado, por lo que puede ser eso lo que estás ejecutando.XFS tiene varios formatos de directorio, y la forma corta utilizada para directorios pequeños tiene esencialmente el mismo conjunto mínimo de número de inodo + nombre de archivo + longitud del nombre de archivo + longitud total.

información relacionada