Diferencia entre tamaño de bloque y tamaño de clúster

20

Tengo una pregunta sobre el tamaño del bloque y el tamaño del clúster. Con respecto a lo que he leído sobre eso, asumo lo siguiente:

  • El tamaño del bloque es el tamaño físico de un bloque, en su mayoría 512 bytes. No hay forma de cambiar esto.
  • El tamaño del clúster es el tamaño mínimo de un bloque que el sistema operativo lee y escribe. Si creo un nuevo sistema de archivos, por ejemplo ext3, puedo especificar este tamaño de bloque mínimo con el modificador -b. Casi todos los programas como dumpe2fs, mke2fs usan el tamaño de bloque como un nombre para el tamaño del clúster.

Si tengo el siguiente resultado:

$ stat test
File: `test'
Size: 13            Blocks: 4          IO Block: 2048   regular file
Device: 700h/1792d  Inode: 15          Links: 1

¿Es correcto que el tamaño sea el espacio real en bytes, los bloques son los bloques utilizados físicamente (512 bytes para cada uno) y el bloque IO se relaciona con el tamaño de bloque especificado al crear el FS?

pluckyDuck
fuente

Respuestas:

26

Creo que estás confundido, posiblemente porque has leído varios documentos que usan terminología diferente. Términos como "tamaño de bloque" y "tamaño de clúster" no tienen un significado universal, incluso dentro del contexto de la literatura del sistema de archivos.

Sistemas de archivos

Para ext2 o ext3 , la situación es relativamente simple: cada archivo ocupa un cierto número de bloques . Todos los bloques en un sistema de archivos dado tienen el mismo tamaño, generalmente uno de 1024, 2048 o 4096 bytes. Un archivo¹ cuyo tamaño está entre N bloques más un byte y N + 1 bloques ocupa N + 1 bloques. Ese tamaño de bloque es con lo que especificas mke2fs -b. No existe una noción separada de grupos.

El sistema de archivos FAT utilizado en particular por MS-DOS y las primeras versiones de Windows tiene una asignación de espacio similarmente simple. Lo que ext2 llama bloques, FAT llama grupos ; El concepto es el mismo.

Algunos sistemas de archivos tienen un esquema de asignación más sofisticado: tienen bloques de tamaño fijo, pero pueden usar el mismo bloque para almacenar los últimos bytes de más de un archivo. Esto se conoce como subasignación de bloque ; Reiserfs y Btrfs lo hacen, pero no ext3 o incluso ext4.

Utilidades

Las utilidades de Unix a menudo usan la palabra "bloque" para referirse a una unidad de tamaño arbitrario, típicamente 512 bytes o 1kB. Este uso no está relacionado con ningún sistema de archivos o hardware de disco en particular. Históricamente, el bloque 512B se produjo porque los discos y sistemas de archivos de la época a menudo funcionaban en fragmentos 512B, pero el uso moderno es simplemente arbitrario. Las utilidades e interfaces tradicionales de Unix todavía usan bloques de 512B a veces, aunque ahora se prefieren bloques de 1kB . Debe verificar la documentación de cada utilidad para saber qué tamaño de bloque está utilizando (algunos tienen un interruptor, por ejemplo, du -Bo df -Ben Linux).

En la statutilidad GNU / Linux , la blockscifra es el número de bloques 512B utilizados por el archivo. La IO Blockfigura es el tamaño preferido para la entrada-salida del archivo, que en principio no está relacionado, pero generalmente es una indicación del tamaño de bloque del sistema de archivos subyacente (o el tamaño del clúster si así lo quiere llamar). Aquí, tiene un archivo de 13 bytes, que ocupa un bloque en el sistema de archivos ext3 con un tamaño de bloque de 2048; por lo tanto, el archivo ocupa 4 unidades de 512 bytes (llamadas "bloques" por stat).

Discos

La mayoría de los discos presentan una interfaz que muestra el disco como un grupo de sectores . El disco solo puede escribir o leer un sector completo, no bits o bytes individuales. La mayoría de los discos duros tienen sectores de 512 bytes, aunque los discos de 4kB comenzaron a aparecer hace un par de años.

El tamaño del sector del disco no está directamente relacionado con el tamaño del bloque del sistema de archivos, pero tener un bloque que sea un número entero de sectores es mejor para el rendimiento.

¹ Excepción: los archivos dispersos ahorran espacio.

Gilles 'SO- deja de ser malvado'
fuente
2
Gracias por tu aclaración. Llegué aquí debido a la confusión causada por la herramienta ext2fsd para Windows. Sus opciones de línea de comando comienzan: "Uso: mke2fs [-c | -l nombre de archivo] [-b tamaño-bloque] [-C tamaño-clúster] ..." Bueno, ves, tanto el tamaño de bloque como el de clúster ...
Bernhard Hiller
También me interesa saber cuál es la diferencia entre el tamaño de bloque y el tamaño de clúster de mke2fs. Alguien sabe ?
X.LINK
1
@ X.LINK Se explica en la página del manual. El tamaño del clúster es utilizado por la función bigalloc , que si lo entiendo correctamente, hace que el acceso a archivos grandes sea más rápido a expensas de un mayor almacenamiento desaprovechado.
Gilles 'SO- deja de ser malvado'