Logical block addressing is a common scheme used for specifying the location
of blocks of data stored on computer storage devices, generally secondary
storage systems such as hard disk drives. LBA is a particularly simple
linear addressing scheme; blocks are located by an integer index, with the
first block being LBA 0, the second LBA 1, and so on.
The IDE standard included 22-bit LBA as an option, which was further extended to
28-bit with the release of ATA-1 and to 48-bit with the release of ATA-6,
whereas the size of entries in on-disk and in-memory data structures holding
the address is typically 32 or 64 bits. Most hard disk drives released after
1996 implement logical block addressing. Overview
In logical block addressing, only one number is used to address data, and each
linear base address describes a single block.
The LBA scheme replaces earlier schemes which exposed the physical details of
the storage device to the software of the operating system. Chief among these
was the cylinder-head-sector scheme, where blocks were addressed by means of
a tuple which defined the cylinder, head, and sector at which they appeared
on the hard disk. CHS did not map well to devices other than hard disks, and
was generally not used for them. CHS was used in early MFM and RLL drives, and
both it and its successor, extended cylinder-head-sector, were used in the
first ATA drives. However, current disk drives use zone bit recording, where the
number of sectors per track depends on the track number. Even though the disk
drive will report some CHS values as sectors per track and heads per
cylinder, they have little to do with the disk drive's true geometry.
LBA was first introduced in SCSI as an abstraction. While the drive controller
still addresses data blocks by their CHS address, this information is generally
not used by the SCSI device driver, the OS, filesystem code, or any applications
that access the "raw" disk. System calls requiring block-level I/O pass LBA
definitions to the storage device driver; for simple cases, this LBA is
then passed directly to the drive controller.
In redundant array of independent disks devices and storage area networks and
where logical drives are composed via LUN virtualization and aggregation, LBA
addressing of individual disk should be translated by a software layer to
provide uniform LBA addressing for the entire storage device.
Enhanced BIOS The earlier IDE standard from Western
Digital introduced 22-bit LBA; in 1994, the ATA-1 standard allowed for 28 bit
addresses in both LBA and CHS modes. The CHS scheme used 16 bits for cylinder, 4
bits for head and 8 bits for sector, counting sectors from 1 to 255. This
means the reported number of heads never exceeds 16, the number of sectors can be
255 and the number of cylinders can be as large as 65,536, limiting disk size
to 128 GiB, assuming 512 byte sectors. These values can be accessed by issuing
the ATA command "Identify Device" to the drive.
However, the IBM BIOS implementation defined in the INT 13h disk access
routines used quite a different 24-bit scheme for CHS addressing, with 10 bits
for cylinder, 8 bits for head, and 6 bits for sector, or 1024 cylinders, 256
heads, and 63 sectors. This INT 13h implementation had pre-dated the ATA
standard, as it was introduced when the IBM PC had only floppy disk storage, and
when hard disk drives were introduced on the IBM PC/XT, INT 13h interface could
not be practically redesigned due to backward compatibility issues.
Overlapping ATA CHS mapping with BIOS CHS mapping produced the lowest common
denominator of 10:4:6 bits, or 1024 cylinders, 16 heads, and 63 sectors,
which gave the practical limit of 1024×16×63 sectors and 528 Mbytes,
assuming 512 byte sectors. In order for the BIOS to overcome this
limit and successfully work with large hard drives, a CHS translation scheme
had to be implemented in the BIOS disk I/O routines which would convert between
24-bit CHS used by INT 13h and 28-bit CHS numbering used by ATA. The
translation scheme was called large or bit shift translation. This method would
remap 16:4:8 bit ATA cylinders and heads to 10:8:6 bit scheme used by INT 13h,
generating much more "virtual" drive heads than the physical disk reported.
This increased the practical limit to 1024×256×63 sectors, or 8.4 Gbytes.
To further overcome this limit, INT 13h Extensions were introduced with the BIOS
Enhanced Disk Drive Services, which removed practical limits on disk size
for operating systems which are aware of this new interface, such as the DOS 7.0
component in Windows 95. This enhanced BIOS subsystem supports LBA addressing
with LBA or LBA-assisted method, which uses native 28-bit LBA for addressing
ATA disks and performs CHS conversion as needed.
The normal or none method reverts to the earlier 10:4:6 bit CHS mode which does
not support addressing more than 528 Mbytes.
Until the release of ATA-2 standard in 1996, there were a handful of large hard
drives which did not support LBA addressing, so only large or normal
methods could be used. However, using the large method also introduced
portability problems, as different BIOSes often used different and
incompatible translation methods, and hard drives partitioned on a computer
with a BIOS from a particular vendor often could not be read on a computer
with a different make of BIOS. The solution was to use conversion software
such as OnTrack Disk Manager, EZ Drive, etc., which installed to the disk's OS
loader and replaced INT 13h routines at boot time with custom code. This
software could also enable LBA and INT 13h Extensions support for older
computers with non LBA-compliant BIOSes. = LBA-assisted translation =
When the BIOS is configured to use a disk in LBA-assisted translation mode,
the BIOS accesses the hardware using LBA mode, but also presents a translated CHS
geometry via the INT 13h interface. The number of cylinders, heads, and sectors
in the translated geometry depends on the total size of the disk, as shown in
the following table. = LBA48 =
The current 48-bit LBA scheme, introduced in 2003 with the ATA-6
standard, allows addressing up to 128 PiB. Current PC-compatible computers
support INT 13h Extensions, which use 64-bit structures for LBA addressing and
should encompass any future extension of LBA addressing, though modern operating
systems implement direct disk access and do not use the BIOS subsystems, except
at boot load time. However, the common DOS style Master Boot Record partition
table only supports disk partitions up to 2 TiB in size. For larger partitions
this needs to be replaced by another scheme, for instance the GUID Partition
Table which has the same 64-bit limit as the current INT 13h Extensions.
CHS conversion In the LBA addressing scheme, sectors
are numbered as integer indexes; when mapped to CHS tuples, LBA numbering
starts with the first cylinder, first head, and track's first sector. Once the
track is exhausted, numbering continues to the second head, while staying inside
the first cylinder. Once all heads inside the first cylinder are exhausted,
numbering continues from the second cylinder, etc. Thus, the lower the LBA
value is, the closer the physical sector is to the hard drive's first cylinder.
CHS tuples can be mapped to LBA address with the following formula:
LBA = × SPT + where
C, H and S are the cylinder number, the head number, and the sector number
LBA is the logical block address HPC is the maximum number of heads per
cylinder SPT is the maximum number of sectors per
track LBA addresses can be mapped to CHS
tuples with the following formula: C = LBA ÷
H = mod HPC S = + 1
According to the ATA specifications, "If the content of words is greater than or
equal to 16,514,064, then the content of word 1 [the number of logical cylinders]
shall be equal to 16,383." Therefore, for LBA 16450559, an ATA drive may
actually respond with the CHS tuple, and the number of cylinders in this scheme
must be much larger than 1024 allowed by INT 13h.
= Operating system dependencies = Operating systems that are sensitive to
BIOS-reported drive geometry include Solaris, DOS and Windows NT family,
where NTLDR or WINLOAD use Master boot record which addresses the disk using
CHS; x86-64 and Itanium versions of Windows can partition the drive with
GUID Partition Table which uses LBA addressing.
Some operating systems do not require any translation because they do not use
geometry reported by BIOS in their boot loaders. Among these operating systems
are BSD, Linux, Mac OS X, OS/2 and ReactOS.
See also Block
Cylinder-head-sector Disk formatting
Disk partitioning Disk storage
Notes References
External links LBAs explained
LBA and CHS format, LBA mapping CHS to LBA Translation Tutorial
CHS/LBA conversion utility Microsoft article on 7.8 GB limit on NT
4.0 Hard Drive Size Limitations and Barriers
Upgrading and Repairing PC's, by Scott Mueller. Pages 524–531.