Por alguna razón, cuando hago un archivo de texto en OS X, siempre es de al menos 4kB, a menos que esté en blanco. ¿Por qué es esto? ¿Podría haber 4.000 bytes de metadatos sobre 1 byte de texto sin formato?
:P
Por alguna razón, cuando hago un archivo de texto en OS X, siempre es de al menos 4kB, a menos que esté en blanco. ¿Por qué es esto? ¿Podría haber 4.000 bytes de metadatos sobre 1 byte de texto sin formato?
:P
Respuestas:
El tamaño del bloque del sistema de archivos debe ser de 4 kB. Cuando los datos se escriben en un archivo que está contenido en un sistema de archivos, el sistema operativo debe asignar bloques de almacenamiento para contener los datos que se escribirán en el archivo.
Por lo general, cuando se crea un sistema de archivos, el almacenamiento contenido en ese sistema de archivos se segmenta en bloques de un tamaño fijo. Este artículo de Wikipedia explica brevemente este proceso.
El tamaño de bloque subyacente del sistema de archivos para este archivo debe tener un tamaño de bloque de 4 bytes. Este archivo está usando 1 bloque 4K y solo un byte dentro de ese bloque contiene datos reales.
Todos los sistemas de archivos tienen un tamaño de clúster o bloque, o la menor cantidad de espacio en disco que se puede asignar para contener un archivo. Incluso si el tamaño real del archivo es menor que el tamaño del clúster / bloque, seguirá consumiendo un clúster o 4K en su sistema de archivos. El tamaño del clúster depende del sistema de archivos y las opciones del sistema de archivos.
Si contiene cero bytes, como señaló Gilles , utiliza cero bloques / agrupaciones pero un inodo en los sistemas de archivos típicos * nix, que responde mejor a la advertencia, "a menos que esté en blanco".
Un pequeño experimento para ayudar a ilustrar esto:
Primero, veamos cuál es el tamaño de bloque real de mi partición root ext4 (LVM):
[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
Es 4096 (4 KiB), como se esperaba. Ahora, creemos tres archivos: el primero es cero bytes, el segundo es solo un byte y el tercero es 4 KiB (el tamaño del bloque):
[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096
Ahora, nosotros ls
el directorio. Usamos la -s
opción para ver el tamaño asignado (la columna más a la izquierda), en número de "bloques" de 1024 bytes.
(ls no sabe que el tamaño real del bloque es 4096; podríamos especificarlo, --block-size
pero eso escala todo por ese valor, y también queremos ver el tamaño real del archivo en bytes) .
[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root 0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root 1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin
Aquí se pueden observar dos cosas:
Los archivos dispersos son archivos con grandes bloques de ceros. Debido a que se sabe que los datos son todos cero, no tiene sentido almacenarlos en el disco. De esta manera, el tamaño aparente de un archivo puede ser mayor que el tamaño en disco.
Tenga en cuenta que algunos sistemas de archivos permiten almacenar el contenido de archivos muy pequeños en el propio inodo . Consulte ¿Es posible almacenar datos directamente dentro de un inodo en un sistema de archivos Unix / Linux? .