Lba hdd что это

Обновлено: 07.07.2024

Для работы с жестким диском его для начала необходимо как-то разметить, чтобы операционная система могла понять в какие области диска можно записывать информацию. Поскольку жесткие диски имеют большой объем, их пространство обычно разбивают на несколько частей — разделов диска. Каждому такому разделу может быть присвоена своя буква логического диска (для систем семейства Windows) и работать с ним можно, как будто это независимый диск в системе.

Способов разбиения дисков на разделы на сегодняшний день существует два. Первый способ — использовать MBR. Этот способ применялся еще чуть ли не с появления жестких дисков и работает с любыми операционными системами. Второй способ — использовать новую систему разметки — GPT. Этот способ поддерживается только современными операционными системами, поскольку он еще относительно молод.

Структура MBR

До недавнего времени структура MBR использовалась на всех персональных компьютерах для того, чтобы можно было разделить один большой физический жесткий диск (HDD) на несколько логических частей — разделы диска (partition). В настоящее время MBR активно вытесняется новой структурой разделения дисков на разделы — GPT (GUID Partition Table). Однако MBR используется еще довольно широко, так что посмотрим что она из себя представляет.

MBR всегда находится в первом секторе жесткого диска. При загрузке компьютера, BIOS считывает этот сектор с диска в память по адресу 0000:7C00h и передает ему управление.

Итак, первая секция структуры MBR — это секция с исполняемым кодом, который и будет руководить дальнейшей загрузкой. Размер этой секции может быть максимум 440 байт. Далее идут 4 байта, отведенные на идентификацию диска. В операционных системах, где идентификация не используется, это место может занимать исполняемый код. То же самое касается и последующих 2 байт.

Начиная со смещения 01BEh находится сама таблица разделов жесткого диска. Таблица состоит из 4 записей (по одной на каждый возможный раздел диска) размером 16 байт.

Структура записи для одного раздела:

Первым байтом в этой структуре является признак активности раздела. Этот признак определяет с какого раздела следует продолжить загрузку. Может быть только один активный раздел, иначе загрузка продолжена не будет.

Следующие три байта — это так называемые CHS-координаты первого сектора раздела.

По смещению 04h находится код типа раздела. Именно по этому типу можно определить что находится в данном разделе, какая файловая система на нем и т.п. Список зарезервированных типов разделов можно посмотреть, например, в википедии по ссылке Типы разделов.

После типа раздела идут 3 байта, определяющие CHS-координаты последнего сектора раздела.

CHS-координаты сектора расшифровываются как Cylinder Head Sector и соответственно обозначают номер цилиндра (дорожки), номер головки (поверхности) и номер сектора. Цилиндры и головки нумеруются с нуля, сектор нумеруется с единицы. Таким образом CHS=0/0/1 означает первый сектор на нулевом цилиндре на нулевой головке. Именно здесь находится сектор MBR.

Все разделы диска, за исключением первого, обычно начинаются с нулевой головки и первого сектора какого-либо цилиндра. То есть их адрес будет N/0/1. Первый раздел диска начинается с головки 1, то есть по адресу 0/1/1. Это все из-за того, что на нулевой головке место уже занято сектором MBR. Таким образом, между сектором MBR и началом первого раздела всегда есть дополнителььные неиспользуемые 62 сектора. Некоторые загрузчики ОС используют их для своих нужд.

Интересен формат хранения номера цилиндра и сектора в структуре записи раздела. Номер цилиндра и номер сектора делят между собой два байта, но не поровну, а как 10:6. То есть на номер сектора приходится младшие 6 бит младшего байта, что позволяет задавать номера секторов от 1 до 63. А на номер цилиндра отведено 10 бит — 8 бит старшего байта и оставшиеся 2 бита от младшего байта: «CCCCCCCC CCSSSSSS», причем в младшем байте находятся старшие биты номера цилиндра.

Проблема с CHS-координатами состоит в том, что с помощью такой записи можно адресовать максимум 8 Гб диска. В эпоху DOS это было приемлемо, однако довольно скоро этого перестало хватать. Для решения этой проблемы была разработана система адресации LBA (Logical Block Addressing), которая использовала плоскую 32-битную нумерацию секторов диска. Это позволило адресовать диски размером до 2Тб. Позже разрядность LBA увеличили до 48 бит, однако MBR эти изменения не затронули. В нем по-прежнему осталась 32-битная адресация секторов.

Итак, в настоящее время повсеместно используется LBA-адресация для секторов на диске и в структуре записи раздела адрес его первого сектора прописывается по смещению 08h, а размер раздела — по смещению 0Ch.

Для дисков размером до 8Гб (когда адресация по CHS еще возможна) поля структуры с CHS-координатами и LBA-адресации должны соответствовать друг другу по значению (корректно конвертироваться из одного формата в другой). У дисков размером более 8Гб значения всех трех байт CHS-координат должны быть равны FFh (для головки допускается также значение FEh).

В конце структуры MBR всегда находится сигнатура AA55h. Она в какой-то степени позволяет проверить, что сектор MBR не поврежден и содержит необходимые данные.

Расширенные разделы

Разделы, отмеченные в таблице типом 05h и 0Fh, это так называемые расширенные разделы. С их помощью можно создавать больше разделов на диске, чем это позволяет MBR. На самом деле расширенных разделов несколько больше, например есть разделы с типами C5h, 15h, 1Fh, 91h, 9Bh, 85h. В основном все эти типы разделов использовались в свое время различными операционными системами (такими как например OS/2, DR-DOS, FreeDOS) с одной и той же целью — увеличить количество разделов на диске. Однако со временем различные форматы отпали и остались только разделы с типами 05h и 0Fh. Единственное исключение — это тип 85h. Он до сих пор может использоваться в Linux для формирования второй цепочки логических дисков, скрытых от других операционных систем. Разделы с типом 05h используются для дисков менее 8Гб (где еще возможна адресация через CHS), а тип 0Fh используется для дисков больше 8Гб (и используется LBA-адресация).

В первом секторе расширенного раздела находится структура EBR (Extended Boot Record). Она во многом схожа со структурой MBR, но имеет следующие отличия:

  • В EBR нет исполняемого кода. Некоторые загрузчики могут его туда записывать, но обычно это место заполнено нулями
  • Сигнатуры диска и два неиспользуемых байта должны быть заполнены нулями
  • В таблице разделов могут быть заполнены только две первых записи. Остальные две записи должны быть заполнены нулями

В отличие от MBR, где позволяется создавать не более четырёх разделов, структура EBR позволяет организовать список логических разделов, ограниченный лишь размером раздела-контейнера (того самого, который с типом 05h или 0Fh). Для организации такого списка используется следующий формат записей: первая запись в таблице разделов EBR указывает на логический раздел, связанный с данным EBR, а вторая запись указывает на следующий в списке раздел EBR. Если данный логический раздел является последним в списке, то вторая запись в таблице разделов EBR должна быть заполнена нулями.

Формат записей разделов в EBR аналогичен формату записи в структуре MBR, однако логически немного отличается.

Признак активности раздела для разделов структуры EBR всегда будет 0, так как загрузка осуществлялась только с основных разделов диска. Координаты CHS, с которых начинается раздел используются, если не задействована LBA-адресация, также как и в структуре MBR.

А вот поля, где в режиме LBA-адресации должны находиться номер начального сектора и количество секторов раздела, в структуре EBR используются несколько иначе.

Для первой записи таблицы разделов EBR в поле начального сектора раздела (смещение 08h) записывается расстояние в секторах между текущим сектором EBR и началом логического раздела, на который ссылается запись. В поле количества секторов раздела (смещение 0Ch) в этом случае пишется размер этого логического раздела в секторах.

Для второй записи таблицы разделов EBR в поле начального сектора раздела записывается расстояние между сектором самой первой EBR и сектором следующей EBR в списке. В поле количества секторов раздела в этом случае пишется размер области диска от сектора этой следующей структуры EBR и до конца логического раздела, относящегося к этой структуре.

Таким образом, первая запись таблицы разделов описывает как найти, и какой размер занимает текущий логический раздел, а вторая запись описывает как найти, и какой размер занимает следующий EBR в списке, вместе со своим разделом.

Структура GPT

В современных компьютерах на смену BIOS пришла новая спецификация UEFI, а вместе с ней и новое устройство разделов на жестком диске — GUID Partition Table (GPT). В этой структуре были учтены все недостатки и ограничения, накладываемые MBR, и разработана она была с большим запасом на будущее.

Кроме того, в отличие от MBR, структура GPT хранит на диске две своих копии, одну в начале диска, а другую в конце. Таким образом, в случае повреждения основной структуры, будет возможность восстановить ее из сохраненной копии.

Рассмотрим теперь устройство структуры GPT подробнее. Вся структура GPT на жестком диске состоит из 6 частей:

LBA-адрес Размер (секторов) Назначение
LBA 0 1 Защитный MBR-сектор
LBA 1 1 Первичный GPT-заголовок
LBA 2 32 Таблица разделов диска
LBA 34 NN Содержимое разделов диска
LBA -34 32 Копия таблицы разделов диска
LBA -2 1 Копия GPT-заголовка

Защитный MBR-сектор

Первый сектор на диске (с адресом LBA 0) — это все тот же MBR-сектор. Он оставлен для совместимости со старым программным обеспечением и предназначен для защиты GPT-структуры от случайных повреждений при работе программ, которым про GPT ничего не известно. Для таких программ структура разделов будет выглядеть как один раздел, занимающий все место на жестком диске.

Структура этого сектора ничем не отличается от обычного сектора MBR. В его таблице разделов дожна быть создана единственная запись с типом раздела 0xEE. Раздел должен начинаться с адреса LBA 1 и иметь размер 0xFFFFFFFF. В полях для CHS-адресации раздел соответственно должен начинаться с адреса 0/0/2 (сектор 1 занят под саму MBR) и иметь конечный CHS-адрес FF/FF/FF. Признак активного раздела должен иметь значение 0 (неактивный).

При работе компьютера с UEFI, данный MBR-сектор просто игнорируется и никакой код в нем также не выполняется.

Первичный GPT-заголовок

Этот заголовочный сектор содержит в себе данные о всех LBA-адресах, использующихся для разметки диска на разделы.

Структура GPT-заголовка:

Смещение (байт) Размер поля (байт) Пример заполнения Название и описание поля
0x00 8 байт 45 46 49 20 50 41 52 54 Сигнатура заголовка. Используется для идентификации всех EFI-совместимых GPT-заголовков. Должно содержать значение 45 46 49 20 50 41 52 54, что в виде текста расшифровывается как "EFI PART".
0x08 4 байта 00 00 01 00 Версия формата заголовка (не спецификации UEFI). Сейчас используется версия заголовка 1.0
0x0C 4 байта 5C 00 00 00 Размер заголовка GPT в байтах. Имеет значение 0x5C (92 байта)
0x10 4 байта 27 6D 9F C9 Контрольная сумма GPT-заголовка (по адресам от 0x00 до 0x5C). Алгоритм контрольной суммы — CRC32. При подсчёте контрольной суммы начальное значение этого поля принимается равным нулю.
0x14 4 байта 00 00 00 00 Зарезервировано. Должно иметь значение 0
0x18 8 байт 01 00 00 00 00 00 00 00 Адрес сектора, содержащего первичный GPT-заголовок. Всегда имеет значение LBA 1.
0x20 8 байт 37 C8 11 01 00 00 00 00 Адрес сектора, содержащего копию GPT-заголовка. Всегда имеет значение адреса последнего сектора на диске.
0x28 8 байт 22 00 00 00 00 00 00 00 Адрес сектора с которого начинаются разделы на диске. Иными словами — адрес первого раздела диска
0x30 8 байт 17 C8 11 01 00 00 00 00 Адрес последнего сектора диска, отведенного под разделы
0x38 16 байт 00 A2 DA 98 9F 79 C0 01 A1 F4 04 62 2F D5 EC 6D GUID диска. Содержит уникальный идентификатор, выданный диску и GPT-заголовку при разметке
0x48 8 байт 02 00 00 00 00 00 00 00 Адрес начала таблицы разделов
0x50 4 байта 80 00 00 00 Максимальное число разделов, которое может содержать таблица
0x54 4 байта 80 00 00 00 Размер записи для раздела
0x58 4 байта 27 C3 F3 85 Контрольная сумма таблицы разделов. Алгоритм контрольной суммы — CRC32
0x5C 420 байт 0 Зарезервировано. Должно быть заполнено нулями

Система UEFI проверяет корректность GPT-заголовка, используя контрольный суммы, вычисляемые по алгоритму CRC32. Если первичный заголовок поврежден, то проверяется контрольная сумма копии заголовка. Если контрольная сумма копии заголовка правильная, то эта копия используется для восстановления информации в первичном заголовке. Восстановление также происходит и в обратную сторону — если первичный заголовок корректный, а копия неверна, то копия восстанавливается по данным из первичного заголовка. Если же обе копии заголовка повреждены, то диск становится недоступным для работы.

У таблицы разделов дополнительно существует своя контрольная сумма, которая записывается в заголовке по смещению 0x58. При изменении данных в таблице разделов, эта сумма рассчитывается заново и обновляется в первичном заголовке и в его копии, а затем рассчитывается и обновляется контрольная сумма самих GPT-заголовков.

Таблица разделов диска

Следующей частью структуры GPT является собственно таблица разделов. В настоящее время операционные системы Windows и Linux используют одинаковый формат таблицы разделов — максимум 128 разделов, на каждую запись раздела выделяется по 128 байт, соответственно вся таблица разделов займет 128*128=16384 байт, или 32 сектора диска.

Методы адресации HDD (CHS и LBA).


Существует два основных метода, используемых для адресации (или нумерации) секторов накопителей. Первый из них называется CHS (Cylinder Head Sector). Это название образовано по трем соответствующим координатам, которые используются для адресации каждого сектора дисковода. Во втором методе, который носит название LBA (Logical Block Address), для адресации секторов накопителя используется только одно значение. В основе метода CHS лежит физическая структура накопителей (а также способ организации его внутренней работы).

Метод LBA, в свою очередь, представляет собой более простой и логический способ нумерации секторов, не зависящий от внутренней физической архитектуры накопителей.

При последовательном считывании данных с накопителя в режиме CHS процесс чтения начинается с цилиндра 0, головки 0 и сектора 1 (который является первым сектором на данном диске), после чего считываются все остальные секторы первой дорожки. Затем выбирается следующая головка и читаются все секторы, находящиеся на этой дорожке. Это продолжается до тех пор, пока не будут считаны данные со всех головок первого цилиндра. Затем выбирается следующий цилиндр, и процесс чтения продолжается в такой же последовательности.

При последовательном считывании данных с накопителя в режиме LBA процесс чтения начинается с сектора 0, после чего читается сектор 1, сектор 2 и т.д. В режиме CHS первым сектором жесткого диска является 0,0,1. В режиме LBA этот же сектор будет сектором 0.

В качестве примера представьте себе накопитель, содержащий один жесткий диск, две головки (используются обе стороны жесткого диска), две дорожки на каждом жестком диске (цилиндры) и два сектора на каждой дорожке. В этом случае можно сказать, что накопитель содержит два цилиндра (две дорожки на каждой стороне), две головки (по одной на сторону), а также два сектора на каждой дорожке. В общей сложности емкость накопителя равна восьми (2×2×2) секторам. Обратите внимание: нумерация цилиндров и головок начинается с числа 0, а нумерация физических секторов, находящихся на дорожке, — с числа 1. При использовании адресации CHS расположение первого сектора накопителя определяется выражением “цилиндр 0, головка 0, сектор 1 (0,0,1)”; адресом второго сектора является 0,0,2; третьего — 0,1,1; четвертого — 0,1,2 и т.д., пока мы не дойдем до последнего сектора, адрес которого 1,1,2.

Представьте теперь, что вы взяли восемь секторов и, не обращаясь непосредственно к физическим цилиндрам, головкам и секторам, пронумеровали их от 0 до 7. Таким образом, если необходимо обратиться к четвертому сектору накопителя, можно сослаться на него как на сектор 0,1,2 в режиме CHS или как на сектор 3 в режиме LBA. Соотношение между номерами секторов воображаемого восьмисекторного накопителя в режимах CHS и LBA приведено в табл. 1 .

Таблица 1 . Нумерация секторов в режимах CHS и LBA для воображаемого накопителя, содержащего два цилиндра, две головки и по два сектора на каждой дорожке (в общей сложности восемь секторов).


Как видно из приведенного примера, использование нумерации LBA заметно облегчает и упрощает процесс обработки данных. Несмотря на это, при создании первых ПК вся адресация BIOS и накопителей АТА была выполнена методом CHS.

Преобразования CHS/LBA и LBA/CHS

Адресация секторов может выполняться как в режиме CHS, так и в режиме LBA. Для данного накопителя существует определенное соответствие между адресациями CHS и LBA, которое, в частности, позволяет преобразовывать адреса CHS в адреса LBA и наоборот. Существует довольно простая формула, с помощью которой можно преобразовывать параметры CHS в LBA:

LBA = (((C × HPC) + H) × SPT) + S – 1.

Реверсирование этой формулы позволяет выполнить обратное преобразование, т.е. преобразовать параметры LBA в адрес CHS:

C = int (LBA/SPT/HPC),

H = int ((LBA/SPT) mod HPC),

S = (LBA mod SPT) + 1.

В этих формулах использованы следующие выражения:

- LBA — logical block address;

- C — цилиндр (cylinder);

- H — головка (head);

- S — сектор (sector);

- HPC — количество головок в каждом цилиндре (общее количество головок);

- SPT — количество секторов на каждой дорожке;

- int X — целочисленная часть X;

- X mod Y — модуль (остаток) от X/Y.

С помощью этих формул можно вычислить параметры LBA практически для любого адреса CHS и наоборот. Данный накопитель содержит 16 383 цилиндра, 16 головок и 63 сектора на каждой дорожке. Соотношение адресов CHS и LBA показано в табл. 2 .

Таблица 2 . Параметры CHS и соответствующая им нумерация секторов LBA для накопителя, содержащего 16 383 цилиндра, 16 головок и 63 сектора на каждой дорожке (общее количество секторов 16 514 064).


Программы BIOS ( когда объем HDD был очень скромным) использовали адресацию CHS, например:

INT 13 h , функция 02 h . Чтение сектора. Читает один или группу секторов с физического (не логического!) диска в память. Для начального сектора указываются абсолютные координаты (цилиндр, сектор, головка). Секторы физического диска нумеруются на каждой дорожке от 1, цилиндры нумеруются от 0, головки нумеруются от 0. Сначала идут секторы 1. n цилиндра 0, головки (поверхности) 0, затем секторы 1. n цилиндра 0, головки (поверхности) 1, далее секторы 1. п цилиндра 1, головки 0 и т.д. Таким образом, на HDD сектор 1 цилиндра 0 головки 0 относится к главной загрузочной записи ( Master boot ).

AL=число читаемых секторов

00 h . 7 Fh - гибкий диск , 80 h . FFh - жесткий диск

АL=число переданных секторов

Дополнительные функции BIOS Int 13h (41h - 49h и 4Eh).

Для работы с HDD- дисками большого объема возможности адресации CHS стали «тормозом» и не позволяли работать с полным объемом дисков. Поэтому д ля обеспечения поддержки новых возможностей HDD в набор функций Int 13h фирмой Phoenix Technologies были введены дополнительные функции (BIOS Extensions). Дополнительные функции имеют номера 41h - 49h и 4Eh. Порядок работы с этими функциями существенно отличается от принятого для стандартных функций прерывания Int 13h.:

вся адресная информация передается через буфер в оперативной памяти, а не через регистры;

соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);

для определения дополнительных возможностей аппаратуры (параметров) используются флаги.

Пакет дискового адреса.

Фундаментальной структурой данных для дополнительных функций прерывания Int I3h является так называемый «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации. Формат пакета дискового адреса описан в табл. 3 .

Таблица 3 . Формат пакета дискового адреса


Правила передачи параметров дополнительным функциям. При вызове прерывания дополнительным функциям BIOS передаются через регистры процессора следующие данные:

- в АН — номер вызываемой функции;

- в DL — номер диска;

- в DS: SI — адрес буфера, содержащего пакет дискового адреса.

Передача остальных параметров, как было уже указано выше, производится через пакет дискового адреса.

Дополнительные функции BIOS предназначены только для жестких дисков и дисководов сменных дисков большой емкости, причем функции рассчитаны на использование не более четырех устройств. Передаваемый функции номер диска, таким образом, должен находиться в диапазоне 80h-83h.

После выполнения функции в регистре АН выдается код состояния (статус возврата). Кроме принятого для классических функций BIOS стандартного набора кодов возврата, для дополнительных функций введено еще несколько кодов.

HDD. Методы адресации CHS и LBA.


Существует два основных метода, используемых для адресации (или нумерации) секторов накопителей. Первый из них называется CHS (Cylinder Head Sector). Это название образовано по трем соответствующим координатам, которые используются для адресации каждого сектора дисковода. Во втором методе, который носит название LBA (Logical Block Address), для адресации секторов накопителя используется только одно значение. В основе метода CHS лежит физическая структура накопителей (а также способ организации его внутренней работы).

Метод LBA, в свою очередь, представляет собой более простой и логический способ нумерации секторов, не зависящий от внутренней физической архитектуры накопителей.

При последовательном считывании данных с накопителя в режиме CHS процесс чтения начинается с цилиндра 0, головки 0 и сектора 1 (который является первым сектором на данном диске), после чего считываются все остальные секторы первой дорожки. Затем выбирается следующая головка и читаются все секторы, находящиеся на этой дорожке. Это продолжается до тех пор, пока не будут считаны данные со всех головок первого цилиндра. Затем выбирается следующий цилиндр, и процесс чтения продолжается в такой же последовательности.

При последовательном считывании данных с накопителя в режиме LBA процесс чтения начинается с сектора 0, после чего читается сектор 1, сектор 2 и т.д. В режиме CHS первым сектором жесткого диска является 0,0,1. В режиме LBA этот же сектор будет сектором 0.

В качестве примера представьте себе накопитель, содержащий один жесткий диск, две головки (используются обе стороны жесткого диска), две дорожки на каждом жестком диске (цилиндры) и два сектора на каждой дорожке. В этом случае можно сказать, что накопитель содержит два цилиндра (две дорожки на каждой стороне), две головки (по одной на сторону), а также два сектора на каждой дорожке. В общей сложности емкость накопителя равна восьми (2×2×2) секторам. Обратите внимание: нумерация цилиндров и головок начинается с числа 0, а нумерация физических секторов, находящихся на дорожке, — с числа 1. При использовании адресации CHS расположение первого сектора накопителя определяется выражением “цилиндр 0, головка 0, сектор 1 (0,0,1)”; адресом второго сектора является 0,0,2; третьего — 0,1,1; четвертого — 0,1,2 и т.д., пока мы не дойдем до последнего сектора, адрес которого 1,1,2.

Представьте теперь, что вы взяли восемь секторов и, не обращаясь непосредственно к физическим цилиндрам, головкам и секторам, пронумеровали их от 0 до 7. Таким образом, если необходимо обратиться к четвертому сектору накопителя, можно сослаться на него как на сектор 0,1,2 в режиме CHS или как на сектор 3 в режиме LBA. Соотношение между номерами секторов воображаемого восьмисекторного накопителя в режимах CHS и LBA приведено в табл. 1 .

Таблица 1 . Нумерация секторов в режимах CHS и LBA для воображаемого накопителя, содержащего два цилиндра, две головки и по два сектора на каждой дорожке (в общей сложности восемь секторов).


Как видно из приведенного примера, использование нумерации LBA заметно облегчает и упрощает процесс обработки данных. Несмотря на это, при создании первых ПК вся адресация BIOS и накопителей АТА была выполнена методом CHS.

Преобразования CHS/LBA и LBA/CHS

Адресация секторов может выполняться как в режиме CHS, так и в режиме LBA. Для данного накопителя существует определенное соответствие между адресациями CHS и LBA, которое, в частности, позволяет преобразовывать адреса CHS в адреса LBA и наоборот. Существует довольно простая формула, с помощью которой можно преобразовывать параметры CHS в LBA:

LBA = (((C × HPC) + H) × SPT) + S – 1.

Реверсирование этой формулы позволяет выполнить обратное преобразование, т.е. преобразовать параметры LBA в адрес CHS:

C = int (LBA/SPT/HPC),

H = int ((LBA/SPT) mod HPC),

S = (LBA mod SPT) + 1.

В этих формулах использованы следующие выражения:

- LBA — logical block address;

- C — цилиндр (cylinder);

- H — головка (head);

- S — сектор (sector);

- HPC — количество головок в каждом цилиндре (общее количество головок);

- SPT — количество секторов на каждой дорожке;

- int X — целочисленная часть X;

- X mod Y — модуль (остаток) от X/Y.

С помощью этих формул можно вычислить параметры LBA практически для любого адреса CHS и наоборот. Данный накопитель содержит 16 383 цилиндра, 16 головок и 63 сектора на каждой дорожке. Соотношение адресов CHS и LBA показано в табл. 2 .

Таблица 2 . Параметры CHS и соответствующая им нумерация секторов LBA для накопителя, содержащего 16 383 цилиндра, 16 головок и 63 сектора на каждой дорожке (общее количество секторов 16 514 064).


Программы BIOS ( когда объем HDD был очень скромным) использовали адресацию CHS, например:

INT 13 h , функция 02 h . Чтение сектора.

Читает один или группу секторов с физического (не логического!) диска в память. Для начального сектора указываются абсолютные координаты (цилиндр, сектор, головка). Секторы физического диска нумеруются на каждой дорожке от 1, цилиндры нумеруются от 0, головки нумеруются от 0. Сначала идут секторы 1. n цилиндра 0, головки (поверхности) 0, затем секторы 1. n цилиндра 0, головки (поверхности) 1, далее секторы 1. п цилиндра 1, головки 0 и т.д. Таким образом, на HDD сектор 1 цилиндра 0 головки 0 относится к главной загрузочной записи ( Master boot ).

AL=число читаемых секторов

00 h . 7 Fh - гибкий диск , 80 h . FFh - жесткий диск

АL=число переданных секторов

Но для работы с HDD- дисками большого объема возможности адресации CHS стали «тормозом» и не позволяли работать с полным объемом дисков. Поэтому д ля обеспечения поддержки новых возможностей HDD в набор функций Int 13h фирмой Phoenix Technologies были введены дополнительные функции (BIOS Extensions). Дополнительные функции имеют номера 41h - 49h и 4Eh. Порядок работы с этими функциями существенно отличается от принятого для стандартных функций прерывания Int 13h.:

- вся адресная информация передается через буфер в оперативной памяти, а не через регистры;

- соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);

- для определения дополнительных возможностей аппаратуры (параметров) используются флаги.

Пакет дискового адреса.

Фундаментальной структурой данных для дополнительных функций прерывания Int I3h является так называемый «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации. Формат пакета дискового адреса описан в табл. 3.

Таблица 3. Формат пакета дискового адреса.


Правила передачи параметров дополнительным функциям.

При вызове прерывания дополнительным функциям BIOS передаются через регистры процессора следующие данные:

- в АН — номер вызываемой функции;

- в DL — номер диска;

- в DS: SI — адрес буфера, содержащего пакет дискового адреса.

Передача остальных параметров, как было уже указано выше, производится через пакет дискового адреса.

Дополнительные функции BIOS предназначены только для жестких дисков и дисководов сменных дисков большой емкости, причем функции рассчитаны на использование не более четырех устройств. Передаваемый функции номер диска, таким образом, должен находиться в диапазоне 80h-83h.

После выполнения функции в регистре АН выдается код состояния (статус возврата). Кроме принятого для классических функций BIOS стандартного набора кодов возврата, для дополнительных функций введено еще несколько кодов.

Прерывание Int 13h, функция 42h: расширенное чтение (рис. 1).

Функция осуществляет передачу секторов с заданной области диска в буфер памяти. Перед вызовом прерывания требуется записать в регистры следующие значения:

- в АН — значение 42h;

- в DL — номер дисковода;

- в DS: SI — адрес пакета дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно прочитаны (прочитаны до того, как произошла ошибка).

Правда ли SSD надёжнее, чем HDD?


В серии статей SSD 101 мы рассмотрели SSD со всех сторон. А теперь проверим главный аргумент фанатов SSD — что эти устройства выходят из строя гораздо реже, чем старые добрые HDD. Они обычно объясняют, что в SSD нет движущихся частей, и предъявляют документы от производителей с мутными расчётами среднего времени до отказа (MTBF). Всё это хорошо для рекламы, но мы предпочитаем реальную статистику частоты отказов.

Что такое отказ для SSD и HDD?

В своих ежеквартальных отчётах Drive Stats мы определяем отказ диска или как реактивный (диск не работает), или как проактивный (мы считаем, что отказ неизбежен). В случае HDD мы определяем проактивный отказ по специфической статистике SMART, которую сообщает сам диск и которую мы отслеживаем.

SMART, или S.M.A.R.T., расшифровывается как Self-monitoring, Analysis, and Reporting Technology и представляет собой систему мониторинга, встроенную в HDD и SDD. Основная функция — сообщать различные показатели, связанные с надёжностью диска, для предсказания отказов. Backblaze каждый день записывает атрибуты SMART всех работающих дисков.

То же самое для SSD. Различные модели сообщают разные показатели SMART, но некоторые совпадают. На сегодняшний день для SSD мы регистрируем 31 атрибут SMART-статистики. 25 из них перечислены ниже.

Оставшиеся шесть (16, 17, 168, 170, 218 и 245) мы не можем найти. Пожалуйста, напишите в комментариях, если у вас есть информация по отсутствующим атрибутам.

Мы только начинаем использовать статистику SMART для предупреждения отказов SSD. Многие атрибуты зависят от модели диска или производителя. Кроме того, у нас было пока мало отказов SSD, как вы увидите ниже. Это ограничивает количество данных для исследования. Так что в реальности мы пока не смогли предсказать ни одного отказа.

Сравнение яблок с яблоками

В серверах хранения данных в качестве загрузочных дисков работают и SSD, и HDD. В нашем случае называть их загрузочными неверно, поскольку они также хранят различные логи и т. д. Другими словами, регулярно читают, записывают и удаляют файлы, а не только выполняют загрузку сервера.

В первых серверах хранения данных мы использовали только HDD, поскольку они были дешёвыми и выполняли свою функцию. Так продолжалось до середины 2018 года, когда мы смогли купить SSD на 200 ГБ по цене около $50, что в нашем понимании было верхней ценовой границей для загрузочных дисков серверов хранения данных. Это был эксперимент, но всё получилось настолько хорошо, что с середины 2018 года мы перешли на использование только SSD и заменяли вышедшие из строя загрузочные HDD на SSD.

Итак, у нас две группы дисков — SSD и HDD — которые выполняют одинаковые функции, имеют одинаковую рабочую нагрузку и работают в одинаковых условиях в течение долгого времени. Естественно, мы решили сравнить частоту отказов загрузочных дисков SSD и HDD. Ниже приведены показатели отказов за весь срок службы для каждой группы по состоянию на II кв. 2021 года.

Годовая частота сбоев (AFR)

Количество дисков Средний возраст (мес.) Дней работы Всего сбоев AFR
SSD 1666 14,2 591 501 17 1,05%
HDD 1607 52,4 3 523 610 619 6,41%

Загрузочные диски. Отчётный период: апрель 2013 — июнь 2021

SSD победили… Подождите, не так быстро!

Всё понятно, SSD победили. Можно положить HDD на полку или на пол как ограничитель для двери. Но погодите, давайте сначала учтём несколько моментов, которые не вошли в таблицу.

  • Средний возраст SSD составляет 14,2 месяца, а средний возраст HDD — 52,4 месяца.
  • Возраст самых старых SSD — около 33 месяцев, а самых новых HDD — 27 месяцев.

Другим фактором является количество дней, сколько диски каждой группы проработали без сбоев. Большой разброс в количестве дней работы приводит к значительной разнице в доверительных интервалах двух групп, поскольку существенно различается количество наблюдений (т.е. дней работы).

Чтобы провести более точное сравнение, попробуем привести к общему знаменателю средний возраст и количество дней работы для SSD и HDD. Для этого можем перенестись назад во времени, когда группа HDD соответствовала группе SSD из II кв. 2021 года по среднему возрасту и количеству дней работы. Это позволит сравнить группы в один и тот же период жизненного цикла.

Взяв данные по HDD за IV кв. 2016 года, мы смогли сделать следующее сравнение.

Годовая частота сбоев (AFR)

Количество дисков Средний возраст (мес.) Дней работы Всего сбоев AFR
SSD на II кв. 2021 1666 14,2 591 501 17 1,05%
HDD на IV кв. 2016 1297 14,3 659 526 25 1,38%

Загрузочные диски. Отчётный период: апрель 2013 — указанный период

Неожиданно разница в AFR оказалась не такой уж большой. На самом деле статистика каждой группы находится в пределах 95%-ного доверительного интервала другой группы. Окно довольно широкое (плюс-минус 0,5%) из-за относительно небольшого количества дней работы накопителей.

Что же в итоге? Мы получили некоторые свидетельства, что в начале работы (в среднем до 14 месяцев в данном случае) SSD выходят из строя реже, но не намного. Но вы же покупаете диск не на 14 месяцев, а на годы. Что мы знаем об этом?

Частота сбоев со временем

У нас есть данные по загрузочным HDD с 2013 года и по загрузочным SSD с 2018 года. На диаграмме показан Lifetime AFR каждого типа дисков до II кв. 2021 года.


Как видно, с 2018 года частота сбоев загрузочных HDD стала расти. Тенденция сохранялась в 2019 и 2020 годах, а в 2021 году (пока что) остановилась. Очевидно, что с увеличением возраста HDD увеличивается и частота отказов.

Интересно сравнить кривые в первых четырёх точках. Для флота HDD пятый год (2018) знаменовал резкий рост частоты отказов. Ждёт ли та же участь SSD в их пятый год? Хотя мы можем ожидать некоторого увеличения AFR по мере старения SSD, но будет ли оно таким же резким, как в случае с HDD?

Итог: SSD или HDD?

Что же нам покупать: SSD или HDD? Учитывая то, что мы знаем на сегодняшний день, вряд ли можно использовать AFR как фактор при принятии решения. С учётом возраста и количества дней работы оба типа накопителей схожи, а разница недостаточна, чтобы оправдать дополнительные затраты на покупку SSD вместо HDD. На данном этапе лучше принимать решение на основе других факторов: стоимость, требуемая скорость, энергопотребление, требования к форм-фактору и так далее.

В ближайшие пару лет мы получим более полное представление об AFR для SSD. И тогда сможем решить, насколько велика разница в частоте отказов SSD и HDD. А сейчас мы не видим, чтобы она была значительной.

Пример использования прерывание Int 13h, функция 42h: расширенное чтение.

Функция осуществляет передачу секторов с заданной области диска в буфер памяти. Перед вызовом прерывания требуется записать в регистры следующие значения:

- в АН — значение 42h;

- в DL — номер дисковода;

- в DS: SI — адрес пакета дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно прочитаны (прочитаны до того, как произошла ошибка).

Читайте также: