Логическая адресация блоков ( LBA ) — это распространенная схема, используемая для указания местоположения блоков данных, хранящихся на компьютерных устройствах хранения данных, как правило, вторичных системах хранения данных, таких как жесткие диски . LBA — это особенно простая схема линейной адресации ; блоки размещаются по целочисленному индексу, при этом первый блок имеет LBA 0, второй — LBA 1 и т. д.
Стандарт IDE включал 22-битный LBA в качестве опции, которая была расширена до 28 бит с выпуском ATA-1 (1994) и до 48 бит с выпуском ATA-6 (2003), тогда как размер записей в структурах данных на диске и в памяти, содержащих адрес, обычно составляет 32 или 64 бита. Большинство жестких дисков, выпущенных после 1996 года, реализуют логическую блочную адресацию.
При логической адресации блоков для адресации данных используется только одно число, а каждый линейный базовый адрес описывает один блок.
Схема LBA заменяет более ранние схемы, которые раскрывали физические детали устройства хранения программному обеспечению операционной системы. Главной из них была схема цилиндр-головка-сектор (CHS), где блоки адресуются с помощью кортежа , который определяет цилиндр, головку и сектор, в которых они появляются на жестком диске . CHS плохо сопоставлялся с устройствами, отличными от жестких дисков (такими как ленты и сетевые хранилища), и, как правило, не использовался для них. CHS использовался в ранних приводах MFM и RLL , и как он, так и его преемник, расширенный цилиндр-головка-сектор (ECHS), использовались в первых приводах ATA . Однако современные дисковые накопители используют запись битов зоны , где количество секторов на дорожку зависит от номера дорожки. Несмотря на то, что дисковод будет сообщать некоторые значения CHS как секторы на дорожку (SPT) и головки на цилиндр (HPC), они имеют мало общего с истинной геометрией дискового накопителя.
LBA был впервые представлен в 1981 году SASI , предшественником SCSI , как абстракция. Хотя контроллер диска по-прежнему адресует блоки данных по их адресу CHS, эта информация, как правило, не используется драйвером устройства SCSI, ОС, кодом файловой системы или любыми приложениями (например, базами данных), которые обращаются к «сырому» диску. Системные вызовы, требующие ввода-вывода на уровне блоков, передают определения LBA драйверу устройства хранения; в простых случаях (когда один том отображается на один физический диск) этот LBA затем передается непосредственно контроллеру диска.
В избыточных массивах независимых дисков (RAID) и сетях хранения данных (SAN), а также там, где логические диски ( номера логических устройств , LUN) создаются посредством виртуализации и агрегации LUN, адресация LBA отдельного диска должна транслироваться программным уровнем для обеспечения единообразной адресации LBA для всего устройства хранения данных.
Более ранний стандарт IDE от Western Digital представил 22-битный LBA; в 1994 году стандарт ATA-1 разрешил 28-битные адреса в режимах LBA и CHS. Схема CHS использовала 16 бит для цилиндра, 4 бита для головки и 8 бит для сектора, считая сектора от 1 до 255. Это означает, что сообщаемое количество головок никогда не превышает 16 (0–15), количество секторов может быть 255 (1–255; хотя 63 часто используется как наибольшее), а количество цилиндров может достигать 65 536 (0–65 535), что ограничивает размер диска 128 ГиБ (≈137,4 ГБ), предполагая, что сектора по 512 байт. Эти значения можно получить, выполнив команду ATA «Идентифицировать устройство» ( EC
h) для привода. [1] : 87
Однако реализация IBM BIOS, определенная в процедурах доступа к диску INT 13h, использовала совершенно иную 24-битную схему для адресации CHS с 10 битами для цилиндра, 8 битами для головки и 6 битами для сектора, или 1024 цилиндра, 256 головок и 63 сектора. [2] Эта реализация INT 13h предшествовала стандарту ATA, поскольку она была введена, когда IBM PC имел только дискетное хранилище, а когда на IBM PC/XT появились жесткие диски , интерфейс INT 13h не мог быть практически переработан из-за проблем с обратной совместимостью . Наложение сопоставления ATA CHS с сопоставлением BIOS CHS дало наименьший общий знаменатель 10:4:6 бит или 1024 цилиндра, 16 головок и 63 сектора, что дало практический предел 1024×16×63 секторов и 528 МБ (504 МиБ ), предполагая, что сектора имеют размер 512 байт.
Для того чтобы BIOS мог преодолеть это ограничение и успешно работать с большими жесткими дисками, в процедурах ввода-вывода диска BIOS должна была быть реализована схема трансляции CHS [ когда? ] , которая будет преобразовывать 24-битную CHS, используемую INT 13h, в 28-битную нумерацию CHS, используемую ATA. Схема трансляции называлась большой или битовой трансляцией . Этот метод переназначал 16:4:8-битные цилиндры и головки ATA на 10:8:6-битную схему, используемую INT 13h, создавая гораздо больше «виртуальных» головок привода, чем сообщал физический диск. Это увеличило практический предел до 1024×256×63 секторов или 8,4 ГБ (7,8 ГиБ ).
Для дальнейшего преодоления этого ограничения были введены расширения INT 13h [ когда? ] с BIOS Enhanced Disk Drive Services , которые сняли практические ограничения на размер диска для операционных систем, которые знают об этом новом интерфейсе, таких как компонент DOS 7.0 в Windows 95. Эта улучшенная подсистема BIOS поддерживает адресацию LBA с помощью метода LBA или LBA-assisted , который использует собственный 28-битный LBA для адресации дисков ATA и выполняет преобразование CHS по мере необходимости.
Метод normal или none возвращает к более раннему режиму CHS 10:4:6 бит, который не поддерживает адресацию более 528 МБ.
До выпуска стандарта ATA-2 в 1996 году существовало несколько больших жестких дисков, которые не поддерживали адресацию LBA, поэтому можно было использовать только большие или обычные методы. Однако использование большого метода также приводило к проблемам переносимости, поскольку разные BIOS часто использовали разные и несовместимые методы трансляции, а жесткие диски, разбитые на разделы на компьютере с BIOS от определенного поставщика, часто не могли быть прочитаны на компьютере с другой маркой BIOS. Решением было использование программного обеспечения для преобразования, такого как OnTrack Disk Manager , Micro House EZ-Drive/EZ-BIOS и т. д., которое устанавливалось в загрузчик ОС диска и заменяло процедуры INT 13h во время загрузки пользовательским кодом. Это программное обеспечение также могло включать поддержку LBA и INT 13h Extensions для старых компьютеров с несовместимыми с LBA BIOS.
Когда BIOS настроен на использование диска в режиме трансляции с помощью LBA, BIOS обращается к оборудованию с использованием режима LBA, но также представляет транслированную геометрию CHS через интерфейс INT 13h. Количество цилиндров, головок и секторов в транслированной геометрии зависит от общего размера диска, как показано в следующей таблице. [3]
Текущая 48-битная схема LBA была введена в 2002 году со стандартом ATA-6 [4] , увеличив предел адресации до 2 48 × 512 байт, что составляет ровно 128 ПиБ или приблизительно 144 ПБ . Современные ПК-совместимые компьютеры поддерживают расширения INT 13h, которые используют 64-битные структуры для адресации LBA и должны охватывать любое будущее расширение адресации LBA, хотя современные операционные системы реализуют прямой доступ к диску и не используют подсистемы BIOS , за исключением времени загрузки . Однако общая таблица разделов Master Boot Record (MBR) в стиле DOS поддерживает только разделы диска размером до 2 ТиБ. Для более крупных разделов ее необходимо заменить другой схемой, например, таблицей разделов GUID (GPT), которая имеет тот же 64-битный предел, что и текущие расширения INT 13h. Известно, что Windows XP SP2 поддерживает LBA48 (и включена по умолчанию).
В схеме адресации LBA сектора нумеруются как целочисленные индексы; при сопоставлении с кортежами CHS ( цилиндр-головка-сектор ) нумерация LBA начинается с первого цилиндра, первой головки и первого сектора дорожки. После того, как дорожка исчерпана, нумерация продолжается до второй головки, оставаясь внутри первого цилиндра. После того, как все головки внутри первого цилиндра исчерпаны, нумерация продолжается со второго цилиндра и т. д. Таким образом, чем ниже значение LBA, тем ближе физический сектор к первому (то есть самому внешнему [5] ) цилиндру жесткого диска.
Кортежи CHS можно сопоставить с адресом LBA с помощью следующей формулы: [6] [7]
где
Адреса LBA можно сопоставить кортежам CHS с помощью следующей формулы («mod» — это операция деления по модулю , т.е. остаток , а «÷» — целочисленное деление , т.е. частное от деления, где любая дробная часть отбрасывается):
Согласно спецификациям ATA, «Если содержимое слов (61:60) больше или равно 16 514 064, то содержимое слова 1 [число логических цилиндров] должно быть равно 16 383». [1] : 20 Следовательно, для LBA 16450559 диск ATA может фактически ответить кортежем CHS (16319, 15, 63), а количество цилиндров в этой схеме должно быть намного больше 1024, разрешенных INT 13h. [a]
Операционные системы, чувствительные к геометрии диска, сообщаемой BIOS, включают Solaris , DOS и семейство Windows NT, где NTLDR ( NT , 2000 , XP , Server 2003 ) или BOOTMGR ( Vista , Server 2008 , Windows 7 и Server 2008 R2 ) используют главную загрузочную запись , которая адресует диск с помощью CHS; версии Windows x86-64 и Itanium могут разбить диск на разделы с помощью таблицы разделов GUID , которая использует адресацию LBA.
Некоторые операционные системы не требуют трансляции, поскольку они не используют геометрию, сообщаемую BIOS в своих загрузчиках . Среди этих операционных систем — BSD , Linux , macOS , OS/2 и ReactOS .
Номера дорожек начинаются с 0, а дорожка 0 является самой внешней дорожкой диска. Дорожка с самым большим номером находится рядом со шпинделем.