# 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 RAID 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 físico con el que se fabrican los discos duros AF (Advanced Format) suele ser de 4 KiB, resultando un límite de espacio de 16 tebibytes para los discos duros formateados en MBR si el firmware informa de un sector lógico de 4096 bytes. Sin embargo, actualmente la mayor parte de los discos informan de un sector lógico de 512 bytes, lo que se denomina emulación 512e. Solo en algunos firmware se puede modificar el sector lógico aumentándolo de 512 bytes a 4096 bytes para alcanzar los 16 TiB como en algunas cajas externas USB. Otra opción es utilizar un adaptador (por ejemplo USB) cuyo firmware realice una traslación de los sectores lógicos de 512 bytes a 4096 bytes. Lo que resulta en que los discos formateados con estos adaptadores no puedan ser leídos sin adaptadores de este tipo puesto que el firmware del disco duro no ha sido modificado. Si el firmware del propio disco duro informa de un sector lógico de 4096 bytes estos discos pueden ser leídos conectándolos directamente al puerto SATA desde Windows Ocho.
Sector de 4096 bytes: 2^32x4096= 16 TiB de límite (sin emulación 512e)
En hipotéticos tamaños superiores de sector físico 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 requieren utilizar tamaños de cluster superiores según el tamaño de la partición.
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: 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