Direccionamiento de bloque lógico
# Direccionamiento de bloque lógico

El direccionamiento de bloque lógico, en inglés logical block addressing (LBA), es un método muy común usado para especificar la localización de los bloques de datos en los sistemas de almacenamiento, principalmente el almacenamiento secundario de una computadora. El término LBA puede referirse también a la «dirección del bloque» al que enlaza.

Los bloques lógicos en las computadoras modernas son normalmente de 512 o 1024 bytes cada uno.

## Funcionamiento

LBA es un método de direccionamiento particularmente simple. Los bloques son numerados según un índice, siendo el primer bloque: LBA 0, el segundo: LBA 1, y así sucesivamente.

Este método sucede a otros sistemas anteriores que exponían los detalles físicos de las unidades de almacenamiento al software directamente, con los riesgos que ello conlleva. El pionero de estos sistemas fue Cilindro-Cabezal-Sector (cylinder-head-sector o CHS), donde se les asignaba una dirección a cada bloque mediante una tupla que definía el cilindro, el cabezal y el sector en que se encontraba. Este sistema no funcionaba bien en dispositivos que no fueran discos duros, como las cintas magnéticas, por lo que no era muy usado en esos casos. El sistema CHS debutó en las unidades RLL y MFM. El CHS y su sucesor, el Extended Cylinder-Head-Sector (ECHS), fueron usados en las primeras unidades Integrated Drive Electronics (IDE).

SCSI introdujo LBA como una abstracción. Aunque el controlador de la unidad todavía utiliza CHS para acceder a los bloques, esta información no es usada por el driver, el sistema operativo o cualquier otra aplicación que acceda al disco a bajo nivel. En los casos en los que sea imprescindible que el software necesite acceso a nivel de bloque, se utilizan direcciones LBA pasadas al controlador de la unidad.

Para casos más complejos, como en las unidades XOCAS y SAN (Storage Area Network), la unidad traduce directamente las direcciones LBA del modelo que use la aplicación de software, al modelo usado por la unidad.

## LBA, dispositivos ATA y BIOS mejorado

La primera especificación de la interfaz ATA heredó el esquema CHS del IBM-PC (1981) por motivos obvios de compatibilidad. Más exactamente, de la especificación de la INT 13h de la BIOS. Esto resultó ser un factor negativo debido al inexorable crecimiento de las unidades y la inevitable limitación CHS.

Originariamente, y hasta la actualidad (obsoleto), el sistema CHS trabajaba en 24 bits (3 bytes) y direccionaba utilizando una distribución de los bits curiosa. 10 para cilindros, 8 para cabezales y 6 para sectores (1024, 256, 63) mientras que la especificación ATA direccionaba en 28 bits, 16 para cilindros, 4 para cabezales y 8 para sectores (65 536, 16, 255). La unión CHS-ATA (PC IBM más disco ATA) estaba limitada a los valores más pequeños de esta unión. Así se podía obtener un máximo de (1024-16-63) limitando el direccionamiento a solamente 504 MiB de los 7,8 GiB que realmente ofrecía CHS y mucho más lejos de los 128 GiB de las unidades ATA. Más tarde, la aparición de las BIOS mejoradas propició la adaptación del sistema CHS, llamado large o enhanced CHS (ECHS) utilizando un algoritmo que adaptaba la geometría del disco ATA a CHS. Este dividía el número de cilindros del disco entre potencias de dos (2, 4, 8...) y multiplicaba los cabezales por el mismo factor. Si el resultado estaba dentro de los valores máximos de CHS, era utilizado por la BIOS para acceder al disco. Esto permitió que los discos ATA de menos de 7,8 GiB pudiesen ser direccionados en CHS. Así, los discos quedaban limitados a este valor de 7,875 GiB (1024 cilindros x 256 cabezales x 63 sectores x 512 bytes/sector).

El segundo estándar introdujo un modo de operación con LBA, que con el tiempo se ha convertido en el sistema más usado para comunicarse con unidades ATA y sus sucesores. El direccionamiento LBA en las unidades ATA puede ser de 28 bits o de 48 bits (introducido en ATA-6), lo que resulta en límites de 128 GiB (2^28 sectores x 512 bytes por sector) y 128 PiB (2^48 x 512 bytes por sector).

Los discos particionados con MBR utilizan un sistema de 32 bits, tradicionalmente podían direccionar como límite máximo 2 tebibytes por volumen o partición al contar con un tamaño de sector físico de 512 bytes.

Sector de 512 bytes

2^32x512= 2 TiB de límite

Sin embargo, actualmente el tamaño del sector con el que se fabrican los discos duros suele ser de 4 KiB, resultando un límite de espacio de 16 tebibytes para los discos duros formateados en MBR, aunque la mayoría de BIOS/UEFI no lo soportan sí que lo hacen los sistemas operativos, por lo que pueden ser leídos por USB si el adaptador lo soporta.

Sector de 4096 bytes

2^32x4096= 16 TiB de límite

En hipotéticos tamaños superiores de sector en discos MBR se podrían alcanzar límites superiores, por ejemplo:

Sector de 65536 bytes

2^32x65536= 256 TiB de límite

Estas referencias son válidas al menos para los formatos tradicionales de Windows, tanto FAT32 como NTFS como exFAT, si bien FAT32 requiere utilizar tamaños de cluster superiores.

Estos límites se pueden superar particionando con Tabla de particiones GUID (GPT) que utiliza 64 bits (en vez de los 32 bits del MBR), llegando hasta los 9,4 ZiB teóricos.

Nota 1: No todos los sistemas operativos Windows son capaces de direccionar LBA 48 bits en discos duros MBR y superar el límite de 2 TiB. La característica fue implementada en la versión NT 5 (2000 SP2 - XP SP1 - 2003). No habiendo estado inicialmente habilitado en las versiones posteriores de NT 6 (Vista - 7 - 8 - 8.1) hasta recibir las últimas actualizaciones, por lo que si se almacenaran datos en discos duros MBR con particiones mayores de 2 TiB en versiones anteriores o posteriores de Windows quedarían ilegibles para un NT 6 sin actualizar. Windows NT 10 recibió la capacidad desde el principio. Las distribuciones modernas de Linux pueden leer perfectamente discos duros mayores de 2 TiB formateados en MBR (desde el año 2008 aprox.)

Nota 2: el valor 63 de CHS (1024, 256, 63) se corresponde a la eliminación del sector cero, que no está permitido en CHS. Así, por ejemplo, del sector (126,255,63) pasamos al (127,0,1). De este modo no hay un máximo de 64 (2^6) sectores, sino 63 (2^6 - 1). También por esto el algoritmo de conversión a LBA termina con:

    ... + sector-1
