¿Por qué cada directorio tiene un tamaño de 4096 bytes (4 K)?

33

Como dice el sujeto; Quiero saber por qué cada directorio tiene un tamaño igual a 4K, incluso si contienen archivos con tamaños superiores a 4K.

Por favor, eche un vistazo a lo siguiente: -

$ ls -lh
total 2.0M
drwxr-xr-x 4 ankit ankit 4.0K Sep 11 07:28 Desktop

$ ls -lrh Desktop/
-rw-rw-r-- 1 ankit ankit 9.1M Aug 4 11:15 sophosthreatsaurusaz.pdf
-rw------- 1 ankit ankit 107K Dec 27 2010 KP 3 0.pdf
drwxrwsr-x 9 ankit ankit 4.0K Sep 10 19:26 eclipse

PD: conozco la du -shutilidad de línea de comandos.

Editar: estoy asumiendo el directorio como contenedor de archivos.

Ankit
fuente
Son los metadatos del directorio
Tachyons

Respuestas:

34
  • Sin ser demasiado técnico, piense en una entrada de directorio como simplemente un "enlace" a una lista de los archivos que el directorio "contiene".
  • Luego, como con todo, le lsmuestra el tamaño de ese enlace , no el espacio total ocupado por el contenido del directorio.
  • El tamaño mínimo que debe ocupar una entrada / enlace de archivo o directorio es un bloque, que generalmente es de 4096 bytes / 4K en la mayoría de los sistemas de archivos ext3 / 4.
ish
fuente
77
Usted dice que "El tamaño mínimo que debe ocupar un archivo o entrada de directorio / enlace es un bloque", pero estoy seguro de que he visto tamaños de archivo inferiores a 4K.
Lakshay Garg
1
@LakshayGarg, aunque el archivo puede ser inferior a 4K, causará lo que se denomina "fragmentación interna", donde solo se han utilizado unos pocos bytes del bloque para almacenar el archivo pequeño.
phyloflash
@phyloflash, algunos sistemas de archivos (por ejemplo, NTFS) almacenan archivos pequeños en las entradas de archivo (para NTFS está en la entrada MFT). De esta forma, sus contenidos ocupan bloques de asignación cero y se reduce la fragmentación interna.
Ruslan
26

Para comprender esto, es mejor que tenga algunos conocimientos básicos de lo siguiente (sistema de archivos):

  • inodo (contiene atributos de archivo, metadatos del archivo, estructura del puntero)
  • archivo (puede considerarse una tabla con 2 columnas, nombre de archivo y su inodo, inode apunta a los bloques de datos sin procesar en el dispositivo de bloque)
  • directorio (solo un archivo especial, contenedor para otros nombres de archivo. Contiene una matriz de nombres de archivo y números de inodo para cada nombre de archivo. También describe la relación entre padres e hijos).
  • enlace simbólico VS enlace duro
  • dentry (entradas de directorio)
  • ...

En ext4el sistema de archivos típico (lo que usa la mayoría de las personas), el inodetamaño predeterminado es de 256 bytes, el tamaño del bloque es de 4096 bytes.

Un directorio es solo un archivo especial que contiene una matriz de nombres de archivo y números de inodo. Cuando se creó el directorio, el sistema de archivos asignó 1 inodo al directorio con un "nombre de archivo" (nombre de directorio, de hecho). El inodo apunta a un único bloque de datos (sobrecarga mínima), que es 4096 bytes. Es por eso que ves 4096 / 4.0K cuando lo usas ls.

Puede obtener los detalles usando tune2fs& dumpe2fs.

Ejemplo

root@ubuntu:~# tune2fs -l /dev/ubuntu/root 
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          2fca4cbb-22f1-4328-ab13-cacedb360930
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              967680
Block count:              3931136
Reserved block count:     0
Free blocks:              2537341
Free inodes:              517736
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      416
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8064
Inode blocks per group:   504
RAID stride:              35637
Flex block group size:    16
Filesystem created:       Thu Mar 15 14:31:04 2012
Last mount time:          Sat Oct 20 20:28:04 2012
Last write time:          Sat Oct 20 20:23:32 2012
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Oct 20 20:22:57 2012
Check interval:           0 (<none>)
Lifetime writes:          54 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       272350
Default directory hash:   half_md4
Directory Hash Seed:      d582ad79-75a0-4964-9a48-33ddba04df5c
Journal backup:           inode blocks
Terry Wang
fuente
7

Si un archivo contiene datos (incluso un solo byte), ocupará un bloque en el disco (que normalmente es 4k en estos días). No se puede compartir un bloque entre archivos. Esto significa que el espacio de todo ese bloque no estará disponible para otros archivos, por lo que se considera "usado".

Fuente

ThiagoPonte
fuente