User Tools

Site Tools


nociones_sobre_el_tamano_de_bloque_de_disco

Nociones básicas sobre el tamaño de bloque / Formato avanzado

Los discos de Formato Avanzado usan sectores de 4,096 bytes en lugar de los sectores más comunes de 512 bytes. Este cambio está enmascarado por el firmware que rompe los sectores físicos de 4,096 bytes en sectores lógicos de 512 bytes para beneficio del sistema operativo, pero el uso de sectores físicos más grandes tiene implicaciones para la disposición del disco y el rendimiento del sistema.

Este artículo examina estas implicaciones, incluyendo las pruebas de referencia tipo benchmark que ilustran los efectos probables del mundo real en algunos sistemas comunes de archivos Linux. Conforme los discos de Formato Avanzado se han convertido en la norma, entender cómo enfrentarse a estos discos es una habilidad vital para cualquiera que quiera evitar sanciones serias de rendimiento asociadas con una configuración menor a la óptima.

Si está familiarizado con la estructura de los discos, usted sabe que están divididos en sectores, que típicamente tienen un tamaño de 512 bytes, todas las operaciones de Lectura o Escritura suceden en múltiplos del tamaño del sector. Cuando observa más de cerca los discos duros incluyen datos adicionales entre sectores. El disco usa estos bytes adicionales para detectar y corregir errores dentro de cada sector.

Cuando se aumenta el tamaño del sector de 512 bytes a un valor mayor, se pueden usar algoritmos de corrección de errores más eficientes y poderosos. Así pues, cambiar a un tamaño de sector más grande tiene dos beneficios prácticos, confiabilidad mejorada y una mayor capacidad de disco — al menos en teoría.

Los discos de Formato Avanzado traducen cada sector físico de 4,096 bytes en ocho sectores lógicos de 512 bytes. Para el firmware, el sistema operativo y todos los utilitarios del disco, el disco parece tener sectores de 512 bytes, aunque el tamaño físico subyacente del sector es de 4,096 bytes. Sin embargo, cambiar el tamaño aparente del sector en el firmware puede degradar el rendimiento. Para entender por qué, usted necesita entender algo acerca de las estructuras de datos del sistema de archivos y cómo se colocan las particiones en el disco duro.

En términos del tamaño del sector lógico, IDEMA especifica dos tipos de discos de formato avanzado:

  • Los discos de 512 Byte emulation (512e) tienen un tamaño del sector lógico de 512 bytes. Estos discos son compatibles en Windows, tanto en Windows Vista como en las modernas distribuciones Linux. Microsoft y Western Digital utilizan exclusivamente el término “Formato avanzado” para este tipo de discos.
  • Los discos de 4K native (4Kn) tienen un tamaño del sector lógico de 4 KB. Los sistemas operativos modernos pueden almacenar datos en estos discos, pero generalmente no pueden arrancar desde estos discos. Estos discos suelen ser unidades externas con conexión USB.

Ejemplo de disco con emulación.

cat /sys/block/sda/queue/logical_block_size 
512
 
cat /sys/block/sda/queue/physical_block_size
4096

¿Por qué las estructuras de datos del sistema de archivos afectan el rendimiento?

La mayoría de los sistemas de archivos modernos usa estructuras de datos que tienen 4,096 bytes o más grandes. Así, la mayoría de operaciones de disco I/O están en múltiplos de esta cantidad. Considere lo que sucede cuando Linux quiere leer o escribir una de estas estructuras de datos en un disco nuevo con sectores de 4,096 bytes. Si sucede que las estructuras de datos del sistema de archivos se alinean perfectamente con el tamaño físico subyacente del sector, la Lectura o Escritura de una estructura de datos de 4,096 bytes resulta en una Lectura o Escritura de un sólo sector. El firmware del disco duro no necesita hacer nada extraordinario, pero cuando las estructuras de datos del sistema de archivos no se alinean perfectamente con los sectores físicos subyacentes, una operación de Lectura o Escritura debe acceder a dos sectores físicos.

En teoría, las operaciones de Lectura deben verse menos afectadas por una mala alineación que las operaciones de Escritura. En el caso de una lectura del disco, la cabeza de lectura/escritura del disco posiblemente pase sobre ambos sectores en una secuencia rápida, así que la tarea del firmware de regresar la estructura de datos de 4 kibibytes (KiB) es relativamente simple. En contraste, las escrituras de estructuras de datos mal alineadas requieren que el firmware del disco lea dos sectores, modifique porciones de ambos sectores y luego escriba dos sectores. Esta operación se lleva más tiempo que cuando las 4,096 bytes ocupan un sólo sector. Así, se degrada el rendimiento. En la práctica, las operaciones de Lectura se pueden ver afectadas negativamente algunas veces tanto como las operaciones de Escritura.

¿Cómo puede saber si sus estructuras de datos están alineadas correctamente?

La mayoría de los sistemas de archivos alinean sus estructuras de datos con el inicio de las particiones que las contienen. Así, si una partición empieza en el límite de 4,096 bytes (sector ocho), está alineada adecuadamente. Sin embargo, en los años anteriores a 2010 (aproximadamente), las herramientas de partición de Linux no creaban particiones alineadas de esta manera. Incluso hoy, quedan algunas dificultades, así que ejerza precaución cuando cree sus particiones.

Si usted usa un administrador de volúmenes lógico (LVM), esté consciente que las reglas de alineación para LVMs son las mismas que para las particiones. Aunque no necesita preocuparse acerca de la alineación de los volúmenes lógicos dentro de LVMs, usted poner atención en la alineación de las particiones LVM mismas. Una verificación aleatoria de unos cuantos sistemas de archivos utilizando LVMs replicó los resultados anteriores.

Usted debe empezar determinando el tamaño del sector físico de su disco. Si descubre que tiene una unidad de Formato Avanzado, debe alinear sus particiones adecuadamente.

Determinar el tamaño del sector físico

En teoría, el núcleo Linux debe retornar información acerca del tamaño del sector físico en el pseudo archivo /sys/block/sdX/queue/physical_block_size y en el tamaño del sector lógico en el pseudo archivo /sys/block/sdX/queue/logical_block_size, donde sdX es el nombre del nodo de su dispositivo (típicamente, sda, sdb y así sucesivamente). En la práctica, sin embargo, la información del tamaño del bloque físico es frecuentemente falsa — en mi experiencia, el núcleo reporta información precisa sólo para algunos discos y la precisión del reporte también varía con la versión del núcleo. Esto significa que los utilitarios del disco no pueden detectar confiablemente la presencia de tales discos.

Así que usted puede necesitar las especificaciones de su unidad en el sitio Web del fabricante o de otras maneras. El pseudo archivo /sys/block/sdX/device/model tiene el número de modelo del dispositivo, así que puede buscar allí y luego checar con el fabricante. Si tiene duda, suponga que su disco es un modelo de Formato Avanzado — la mayoría de los discos lo son.

Definición de superbloque: el superbloque (superblock) contiene metadatos críticos del sistema de archivos tales como información acerca del tamaño, cantidad de espacio libre y donde se encuentra los datos. Si el superbloque es dañado, y su información se pierde, no podría determinar que partes del sistema de archivos contiene información. Por este motivo, se guardan varias copias del superbloque en determinados bloques del sistema de archivos.

Alinear las particiones

Casi todas o todas las unidades de Formato Avanzado de Western Digital incluyen un puente que puede configurar para compatibilidad con Windows XP. Este puente cambia la numeración de sectores por 1, un arreglo rápido y sucio para la situación común en Windows XP de usar una partición alineada con un sólo cilindro que abarca toda la unidad. Sin embargo, este puente crea problemas si usa particiones múltiples o si usted usa un software de creación de particiones moderno, así que recomiendo fuertemente no intentarlo. En cambio, use su software de creación de particiones Linux para crear particiones alineadas adecuadamente. (Ni Seagate ni Toshiba proporcionan un puente así en sus unidades de disco).

Hay tres familias de herramientas para crear particiones, master boot record (MBR) y GPT, disponibles para Linux y cada una ofrece su propio método para alinear las particiones. Si usted tiene una unidad de disco de Formato Avanzado, su mejor opción es la de operar el último software de creación de particiones Linux disponible.

Actualmente, el supuesto más seguro es que cualquier disco duro nuevo que compre utiliza la tecnología de Formato Avanzado. Desde luego, usted puede verificar las hojas de especificaciones del fabricante para confirmar esta suposición, pero alinear las particiones como para un disco de Formato Avanzado no tiene efectos perjudiciales en tipos de discos más viejos excepto cuando se usen utilidades o sistemas operativos obsoletos.

Actualmente, algunos discos externos usan sectores de 4,096 bytes, pero los discos internos usan la traducción del tamaño del sector. Esto puede cambiar en el futuro. Si encuentra una unidad de disco con sectores de 4,096 bytes pero con una opción para usar el tamaño de sector verdadero, puede que la quiera usar, sin embargo, tenga cuidado de algunas advertencias.

El software del BIOS puede hacer algunas suposiciones acerca del tamaño del sector del disco duro. Si el BIOS contiene tal suposición, probablemente su computadora no arrancará desde un disco que tenga sectores de 4.096 bytes y le falte la traducción de firmware a sectores de 512 bytes. Usando lo último en software puede ayudarle a darle la vuelta a los problemas, como puede ser usar un disco convencional como el disco de arranque, restringiendo su disco de tecnología nueva para usarse como un disco de datos.

Cuando se manipulan discos MBR, esté consciente de que la alineación de particiones extendidas no es importante. Estas particiones tienen estructuras de datos de un sector que define particiones lógicas, así que en un sentido real, las particiones extendidas no se pueden alinear adecuadamente. Sin embargo, tenga cuidado de alinear las particiones primarias y lógicas.

Recomendación: Establézca el comienzo de una partición siempre por sectores y a múltiplos de 8 para una alineación adecuada con discos de Formato Avanzado. Esta es un esquema de particionado correcto.

Disposit.  Inicio  Comienzo      Final   Sectores Tamaño Id Tipo
/dev/sda1              2048     206847     204800   100M  7 HPFS/NTFS/exFAT
/dev/sda2            206848  409599999  409393152 195,2G  7 HPFS/NTFS/exFAT
/dev/sda3  *      409600000  409985559     385560 188,3M 83 Linux
/dev/sda4         409985560 1953525167 1543539608   736G 8e Linux LVM

Algunos programas para visualizar alineaciones de particiones.

  • fdisk.
  • Gparted / libgparted.
  • GPT fdisk (Puede verificar alineaciones).

Comandos relacionados con el tamaño de bloque en Discos / Sistemas de ficheros

Tipos de disco físicos.

lsblk -o NAME,PHY-SeC,LOG-SEC
NAME                                            PHY-SEC LOG-SEC
sda                                                4096     512
├─sda1                                             4096     512
├─sda2                                             4096     512
├─sda3                                             4096     512
└─sda4                                             4096     512
  ├─Volgroup00-lv_root                             4096     512
  ├─Volgroup00-lv_swap                             4096     512
  └─Volgroup00-cifrado                             4096     512
    └─luks-20b2aaf7-9353-4732-8f62-ff83bb5e54b7    4096     512
sdb                                                 512     512
└─sdb1                                              512     512
  └─Volgroup00-lv_root                             4096     512
sdc                                                 512     512
└─sdc1                                              512     512
sr0                                                 512     512
cat /sys/block/sda/queue/physical_block_size
4096
cat /sys/block/sdc/queue/physical_block_size 
512

cat /sys/block/sdb/queue/physical_block_size
512
cat /sys/block/sdb/queue/logical_block_size 
512
smartctl -i /dev/sda | grep -i sector
Sector Sizes:     512 bytes logical, 4096 bytes physical
hdparm -I /dev/sda | grep "Sector size"
	Logical  Sector size:                   512 bytes
	Physical Sector size:                  4096 bytes

Sistemas de ficheros.

Sistema de ficheros XFS.

xfs_info /run/media/busi/037ee8d0-0fd8-47a2-abc9-3b59609b137d/
meta-data=/dev/mapper/luks-20b2aaf7-9353-4732-8f62-ff83bb5e54b7 isize=256    agcount=4, agsize=36028800 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=144115200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=70368, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Sistema de ficheros Ext3/4.

tune2fs -l /dev/sda3 | grep "Block size\|Fragment size"
Block size:               1024
Fragment size:            1024


# Identificar el tamaño de bloque físico y lógico en LVM.

tune2fs -l /dev/mapper/Volgroup0-lv_root  | grep "Block size\|Fragment size"
Block size:               4096
Fragment size:            4096


# Tambien se puede utilizar dumpe2fs.

dumpe2fs /dev/sda3 | grep -i "Block size"
Block size:               1024

dumpe2fs /dev/mapper/Volgroup00-lv_root | grep -i "Block size"
Block size:               4096

Al crear un sistema de ficheros, se puede especificar el tamaño de bloque deseado respetando los límites que el propio sistema de ficheros establece. Por norma un uso superior a 4096 no es soportado debido al “page size” del kernel, veamos un ejemplo.

# XFS: Valor por defecto 4KB / Mínimo 512 bytes / Máximo 64KB 


# Probamos con el mínimo

mkfs.xfs -f -b size=512 /dev/sdb1 
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=2851110 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=512    blocks=11404440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=512    blocks=20480, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


# Se Monta sin problemas.

mount -t xfs /dev/sdb1 /mnt/es_backups/

xfs_info /dev/sdb1 
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=2851110 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=512    blocks=11404440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=512    blocks=20480, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


# Desmontamos y probamos con el máximo (64K).

umount /mnt/es_backups/

mkfs.xfs -b size=65536 /dev/sdb1 
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=22275 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=65536  blocks=89097, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=65536  ascii-ci=0
log      =internal log           bsize=65536  blocks=1000, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=65536  blocks=0, rtextents=0


# Falla al montarse debido al tamaño de página predeterminado del Kernel (4096 = 4K), se debe recompilar para hacer efectivo otro tipo de tamaño de página / la CPU debe también soportarlo.

mount -t xfs /dev/sdb1 /mnt/es_backups/
mount: Function not implemented

getconf PAGE_SIZE
4096

Aumentar el pagesize (Huge Pages): https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt

Diferencias de velocidad al cambiar el tamaño del bloque en dd

 dd if=/dev/zero of=/root/test3 bs=512 count=1000000 conv=fsync
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 7.49203 s, 68.3 MB/s

# dd if=/dev/zero of=/root/test3 bs=4096 count=125000 conv=fsync
125000+0 records in
125000+0 records out
512000000 bytes (512 MB) copied, 4.14054 s, 124 MB/s

Lecturas recomendadas

nociones_sobre_el_tamano_de_bloque_de_disco.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1