Организация МБР - PullRequest
       96

Организация МБР

2 голосов
/ 16 января 2020

Поле в таблице разделов MBR со смещением 8 байтов предназначено для хранения LBA-адреса начала раздела. Адресация LBA была введена для адресации больших дисков, когда уже не было достаточно CHS-координат. Но на момент введения поддержки MBR таких дисков еще не было. Отсюда вопрос: что изначально содержали поля со смещением в 8 и 12 байтов? Они были зарезервированы для дальнейшего развития структуры или имели какое-то другое назначение?

Также я заинтересован в реализации LBA-48. 32 бита выделяются для хранения адреса LBA в MBR, так как 48-битный адрес может храниться в 32 битах?

1 Ответ

6 голосов
/ 25 января 2020

В двух статьях Википедии содержатся полезные сведения: https://en.wikipedia.org/wiki/Master_boot_record и https://en.wikipedia.org/wiki/Logical_block_addressing. Другой полезный источник - Starman's «Все детали многих версий обеих MBR» .

В MBR есть «Записи таблицы разделов» ; и для LBA-совместимых записей они имеют адреса CHS (3 байта) и LBA (4 байта). CHS дает два адреса, один для первого сектора раздела и другой для последнего сектора раздела. А адреса LBA - это адреса LBA первого сектора и общее количество секторов в этом разделе. Таким образом, оба типа адресов не для байтов, а для секторов, и Википедия говорит" Размер сектора, который раньше считался фиксированным, составлял 512 (29) байтов ".

С помощью 4 байтов мы можем закодировать максимальный размер диска до 2 ТБ, так как 4294967295 (от 2 до 32 мощностей минус 1) умножается на 512 байтов на сектор (2147483647,5 килобайт).

LBA-48 не может быть хранится в официально поддерживаемой записи раздела MBR, поскольку 48 бит - это 6 байтов, а MBR (и EBR для 5-го логического раздела) имеют только 4 байта для хранения адресов начального и конечного секторов LBA. LBA-48 используется с GUID GPT - https://en.wikipedia.org/wiki/Logical_block_addressing#LBA48

Текущая 48-битная схема LBA была введена в 2003 году со стандартом ATA-6 , [4] подняв предел адресации до 2 ^ 48 × 512 байт, что в точности равно 128 ПиБ или приблизительно 144,1 ПБ. ... Однако общая таблица разделов Master Boot Record (MBR) в стиле DOS поддерживает только разделы диска размером до 2 ТиБ. Для более крупных разделов это необходимо заменить другой схемой, например, таблицей разделов GUID (GPT), которая имеет тот же 64-разрядный предел, что и текущие расширения INT 13h.

(Существует предложенный несовместимый формат MBR для LBA48 на некоторых случайных вики-подобных сайтах, но он не будет работать с большинством ОС, которые ожидают правильную классификацию c MBR. )

LBA была представлена ​​в 1996 году " в Windows 95B и DOS 7.10 для поддержки дисков размером более 8 ГБ ", как говорится в Википедии . Имеется соответствующий патент IBM, выданный в 1999 году (срок действия которого истек, вероятно, в октябре 2019 года): Функция смещения адреса для жесткого диска, US6415383

Мало что известно о эпохе MBR до LBA, но в DOS 2.0 таблица разделов имела общий размер 64 байта с 4 разделами и 16 байтами на раздел. Это был размер, закодированный в код разбора MBR в DOS2 :

Проверка кода сборки

062C 83C610       ADD  SI,+10            ; Checking the next entry...
                                         ; (10h = 16 bytes per entry)

Даже ресурс MBR Starman У меня нет информации о причинах , почему 16 байт было выделено для каждой записи таблицы разделов.

Я обнаружил ранее патент AST Research 1990-1992 гг. (теперь присваивается Samsung), Система для разделение жесткого диска с множественным доступом, US5136711A , которое дает макет таблицы разделов в изображении 2 (рисунок 3) с чем-то очень похожим на LBA:

Каждый из сегментов идентификатора раздела 133, 134, 135 и 136 содержит 16 байт дискового пространства, составляющих таблицу 140 разделов (фиг.3), содержащую идентификационную информацию для соответствующего раздела диска.

Таблица 140 разделов была определена в образе как:

  • 141 Индикатор загрузки,
  • 142 Номер головки,
  • 144 Номер сектора,
  • номер цилиндра,
  • 148 Индекс системы icator,
  • 150 номер головки,
  • 152 номер сектора,
  • номер цилиндра,
  • 154 адрес загрузочного сектора,
  • 156 сектор число

И в тексте таблицы разделов патента AST 1992, описанной как:

Таблица 140 разделов содержит байт 141 индикатора загрузки, чтобы определить, является ли соответствующий сегмент P4 сегмента загрузочный раздел или не загружаемый раздел. Только один раздел P4, P3, P2 и P1 может быть загружаемым в данный момент. Таблица разделов дополнительно содержит байт 142 номера физической начальной головки, физический стартовый цилиндр и сегмент 144 физического стартового сектора, байт 148 системного индикатора, который идентифицирует тип операционной системы, байт 150 номера физической конечной головки, цилиндр физического конца и физический конечный секторный сектор 152, сегмент 154 адреса загрузочного сектора и сегментный номер 156 сектора, который указывает количество секторов в разделе P4, как хорошо известно в данной области техники.

Итак, в моем Гипотеза, вероятно, поле +8 может использоваться для указания на загрузочный сектор раздела (он может быть размещен не в первом секторе?), а +12 может использоваться для проверки вычислений размера раздела. Но в коде DOS2 не было фактического чтения полей +8 и +12. Они могут быть просто зарезервированы в IBM MBR и повторно использованы в патенте AST для некоторого LBA-подобного использования.

PCMag от 1991 г. ( P C Mag 10 Sep 1991, стр. 410 ) также говорится что 4-байтовые поля уже использовались для адресов LBA-подобных секторов:

Каждая запись в таблице разделов составляет 16 байтов, включая 4 записи для начального сектора и количества секторов. Кроме того, один байт зарезервирован для байта раздела.

То же самое для книги Марка Минаси 1992 года "Руководство по выживанию жесткого диска", по крайней мере, для последнего поля +12 (размер раздела), стр. 279 (там) некоторые фрагменты в книгах Google):

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

...