Estoy seguro de que un archivo de directorio tiene mucha menos información que 4096 bytes. Sé que el tamaño del sector es 4096 bytes. Pero existen archivos normales más pequeños que eso.
¿Por qué Unix reserva 4096 bytes para cada carpeta?
Es el tamaño inicial necesario para almacenar los metadatos sobre los archivos contenidos en ese directorio (incluidos los nombres). La asignación inicial es igual al tamaño de un sector, pero puede crecer por encima de eso si es necesario. Una vez asignado, el espacio no se libera si se eliminan los archivos, para reducir la fragmentación.
Por ejemplo:
$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/
A veces, 4096 bytes es la unidad de asignación más pequeña para algunos sistemas de archivos. Es por eso que el directorio tiene 4096.
Lo mismo se aplica a los archivos. Aunque algunos archivos pueden informar menos de 4096, en realidad están tomando al menos 4096 de almacenamiento del disco.
fuente
4096 está reservado para reducir la fragmentación, porque a menudo el tamaño real de los metadatos contenidos fluctuará en función del contenido del directorio. Si crece y se reduce constantemente (digamos que contenía archivos de registro o contenido dinámico) con el tiempo, podría afectar el rendimiento. Esto probablemente no sucedería con una carpeta, pero en todo el sistema de archivos se sumaría rápidamente.
fuente
Depende del sistema de archivos. En ext2 / 3/4 "es" 4096. En reiserfs puede ser 9608 (my
$HOME
) 1032 (/tmp
) o 48 (algunos dir in/tmp
).Por defecto, el bloque ext2 / 3/4 es 4096, y el archivo no puede tomar menos que eso. Si el archivo es más pequeño, toma un bloque completo de todos modos. Como no tiene sentido preguntar sobre el tamaño lógico del directorio y esta información probablemente no esté en el disco de todos modos y tiene que informar algo, informa un tamaño de bloque multiplicado por el número de bloques ocupados, es decir, el espacio físico que se ha ocupado.
fuente
actual
tamaño del archivo.\0
es un carácter legal en los archivos binarios. PD. Es posible crear FS que no lo almacenan, pero que no son muy familiares (y probablemente no sean otros populares).