Главная загрузочная запись

редактировать
Эта статья посвящена типу загрузочного сектора ПК на многораздельных носителях. Для первого сектора на неразмеченном носителе см. Загрузочную запись тома.

Главные загрузочная запись ( MBR) представляет собой особый тип загрузочного сектора в самом начале секционированных компьютера запоминающих устройств, таких как жесткие диски или съемных диски, предназначенные для использования с IBM PC-совместимыми системами и за ее пределами. Концепция MBR была публично представлена ​​в 1983 году с PC DOS 2.0.

MBR содержит информацию о том, как логические разделы, содержащие файловые системы, организованы на этом носителе. MBR также содержит исполняемый код для работы в качестве загрузчика для установленной операционной системы - обычно путем передачи управления второй ступени загрузчика или в сочетании с загрузочной записью тома каждого раздела (VBR). Этот код MBR обычно называют загрузчиком.

Организация таблицы разделов в MBR ограничивает максимальное адресуемое пространство хранения разделенного диска до 2  ТиБ (2 32  × 512 байт). Подходы к небольшому увеличению этого предела при условии, что 32-разрядная арифметика или 4096-байтовые секторы официально не поддерживаются, поскольку они фатально нарушают совместимость с существующими загрузчиками и большинством MBR-совместимых операционных систем и системных инструментов и могут вызвать серьезное повреждение данных при использовании за пределами жестко контролируемых системных сред. Таким образом, схема разделения на основе MBR находится в процессе замены схемой таблицы разделов GUID (GPT) на новых компьютерах. GPT может сосуществовать с MBR, чтобы обеспечить некоторую ограниченную форму обратной совместимости для старых систем.

MBR отсутствуют на несекционированных носителях, таких как дискеты, суперфлоппи или другие устройства хранения, настроенные для работы как таковые.

СОДЕРЖАНИЕ

  • 1 Обзор
  • 2 Разбиение диска на разделы
    • 2.1 Схема сектора
    • 2.2 Записи в таблице разделов
  • 3 Загрузка системы
  • 4 Идентификация диска
  • 5 Замечания по программированию
    • 5.1 Интерфейс BIOS в MBR
    • 5.2 Интерфейс MBR в VBR
  • 6 Редактирование и замена содержимого
  • 7 См. Также
  • 8 Примечания
  • 9 ссылки
  • 10 Дальнейшее чтение
  • 11 Внешние ссылки

Обзор

Поддержка разделенных носителей и, следовательно, главной загрузочной записи (MBR) была введена в IBM PC DOS 2.0 в марте 1983 года для поддержки жесткого диска 10 МБ тогда еще нового IBM Personal Computer XT, все еще использующего файловую систему FAT12.. Первоначальная версия MBR была написана Дэвидом Литтоном из IBM в июне 1982 года. Таблица разделов поддерживала до четырех основных разделов, из которых DOS могла использовать только один. Это не изменилось, когда FAT16 была представлена ​​как новая файловая система с DOS 3.0. Поддержка расширенного раздела, особого типа основного раздела, используемого в качестве контейнера для хранения других разделов, была добавлена ​​в DOS 3.2, а вложенные логические диски внутри расширенного раздела - в DOS 3.30. Поскольку MS-DOS, PC DOS, OS / 2 и Windows никогда не загружались с них, формат MBR и загрузочный код оставались практически неизменными по функциональности, за исключением некоторых сторонних реализаций, на протяжении эпох DOS и OS / 2 до 1996 г.

В 1996 году поддержка адресации логических блоков (LBA) была представлена ​​в Windows 95B и DOS 7.10 для поддержки дисков размером более 8 ГБ. Также были введены временные метки диска. Это также отражало идею о том, что MBR должна быть независимой от операционной системы и файловой системы. Тем не менее, эта конструкция правило было частично нарушено в более поздних реализациях Microsoft в MBR, которые обеспечение исполнение CHS доступа к FAT16B и FAT32 типов разделов 0x06 / 0x0B, тогда как ЛАБ используются для 0x0E / 0x0c.

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

Однако записи разделов MBR и загрузочный код MBR, используемые в коммерческих операционных системах, ограничены 32 битами. Поэтому максимальный размер диска, поддерживаемый на дисках с 512-байтовыми секторами (реальными или эмулированными) схемой разделения MBR (без 33-битной арифметики), ограничен 2 ТиБ. Следовательно, для дисков большего размера необходимо использовать другую схему разделения, поскольку они стали широко доступны с 2010 года. Таким образом, схема разделения MBR находится в процессе замены таблицей разделов GUID (GPT). Официальный подход делает немногим больше, чем обеспечение целостности данных с помощью защитной MBR. В частности, он не обеспечивает обратной совместимости с операционными системами, которые также не поддерживают схему GPT. Между тем, несколько форм гибридных MBR были разработаны и реализованы третьими сторонами, чтобы поддерживать разделы, расположенные в первых физических 2 ТиБ диска, в обеих схемах разделения «параллельно» и / или позволять более старым операционным системам загружаться с GPT. перегородки тоже. Нынешний нестандартный характер этих решений вызывает различные проблемы совместимости в определенных сценариях.

MBR состоит из 512 или более байтов, расположенных в первом секторе диска.

Он может содержать один или несколько из следующих элементов:

Разбиение диска

IBM PC DOS 2.0 представила FDISK утилиту для создания и обслуживания разделов MBR. Когда запоминающее устройство разделено на разделы в соответствии с этой схемой, его MBR содержит таблицу разделов, описывающую местоположения, размеры и другие атрибуты линейных областей, называемых разделами.

Сами разделы также могут содержать данные для описания более сложных схем разделов, таких как расширенные загрузочные записи (EBR), метки дисков BSD или разделы метаданных Logical Disk Manager.

MBR не находится в разделе; он расположен в первом секторе устройства (физическое смещение 0), предшествующем первому разделу. (Загрузочный сектор, присутствующий на устройстве без разделов или в отдельном разделе, вместо этого называется загрузочной записью тома. ) В случаях, когда компьютер работает с оверлеем DDO BIOS или диспетчером загрузки, таблица разделов может быть перемещена на другой физический диск. расположение на устройстве; например, Ontrack Disk Manager часто помещал копию исходного содержимого MBR во второй сектор, а затем скрывался от любой впоследствии загружаемой ОС или приложения, поэтому копия MBR обрабатывалась так, как если бы она все еще находилась в первом секторе.

Схема сектора

По соглашению, в схеме таблицы разделов MBR есть ровно четыре основных элемента таблицы разделов, хотя некоторые операционные системы и системные инструменты расширили это число до пяти (Advanced Active Partitions (AAP) с PTS-DOS 6.60 и DR-DOS 7.07), восьми ( AST и NEC ( MS-DOS 3.x, а также Storage Dimensions SpeedStor ) или даже шестнадцать записей (с Ontrack Disk Manager ).

Структура классического универсального MBR
Адрес Описание Размер ( байты )
0x0000 (0) Область кода начальной загрузки 446
0x01BE (446) Запись раздела №1 Таблица разделов (для основных разделов) 16
0x01CE (462) Запись раздела №2 16
0x01DE (478) Запись раздела №3 16
0x01EE (494) Запись раздела №4 16
0x01FE (510) 0x55 Подпись загрузки 2
0x01FF (511) 0xAA
Общий размер: 446 + 4 × 16 + 2 512
Структура современного стандарта MBR
Адрес Описание Размер ( байты )
0x0000 (0) Область кода начальной загрузки (часть 1) 218
0x00DA (218) 0x0000 Временная метка диска (необязательно; Windows 95B / 98 / 98SE / ME (MS-DOS 7.1–8.0). В качестве альтернативы может служить подписью загрузчика OEM с NEWLDR) 2
0x00DC (220) Исходный физический диск ( 0x80- 0xFF) 1
0x00DD (221) Секунды (0–59) 1
0x00DE (222) Минуты (0–59) 1
0x00DF (223) Часы (0–23) 1
0x00E0 (224) Область кода начальной загрузки (часть 2, ввод кода в 0x0000) 216 (или 222)
0x01B8 (440) 32-битная подпись диска Подпись диска (необязательно; UEFI, Linux, семейство Windows NT и другие ОС) 4
0x01BC (444) 0x0000( 0x5A5Aесли защищен от копирования) 2
0x01BE (446) Запись раздела №1 Таблица разделов (для основных разделов) 16
0x01CE (462) Запись раздела №2 16
0x01DE (478) Запись раздела №3 16
0x01EE (494) Запись раздела №4 16
0x01FE (510) 0x55 Подпись загрузки 2
0x01FF (511) 0xAA
Общий размер: 218 + 6 + 216 + 6 + 4 × 16 + 2 512
Структура AAP MBR
Адрес Описание Размер ( байты )
0x0000 (0) Область кода начальной загрузки 428
0x01AC (428) 0x78 Подпись AAP (необязательно) 2
0x01AD (429) 0x56
0x01AE (430) AAP физический диск ( 0x80- 0xFE; 0x00: не используется; 0x01- 0x7F, 0xFF: зарезервирован) Запись AAP (необязательно) ( запись раздела AAP № 0 со специальной семантикой) 1
0x01AF (431) CHS (начальный) адрес раздела AAP / файла образа или VBR / EBR 3
0x01B2 (434) Зарезервировано для типа раздела AAP ( 0x00если не используется) (необязательно) 1
0x01B3 (435) Зарезервировано для конечного адреса CHS в AAP (необязательно; байт со смещением 0x01B5также используется для контрольной суммы MBR (PTS DE, BootWizard); 0x000000если не используется) 3
0x01B6 (438) Запуск LBA файла изображения AAP или VBR / EBR или относительных секторов раздела AAP (копируется со смещением в загруженном секторе над записью «скрытых секторов» BPB DOS 3.31 (или его эмуляции), чтобы также поддерживать загрузку EBR) +01Chex 4
0x01BA (442) Зарезервировано для секторов в AAP (необязательно; 0x00000000если не используется) 4
0x01BE (446) Запись раздела №1 Таблица разделов (для основных разделов) 16
0x01CE (462) Запись раздела №2 16
0x01DE (478) Запись раздела №3 16
0x01EE (494) Запись раздела №4 16
0x01FE (510) 0x55 Подпись загрузки 2
0x01FF (511) 0xAA
Общий размер: 428 + 2 + 16 + 4 × 16 + 2 512
Структура NEWLDR MBR
Адрес Описание Размер ( байты )
0x0000 (0) JMPS () / NEWLDR размер записи (часто / / для кода запуска в / /) EBhex 0x0A0x160x1C0x000C0x00180x001E Запись NEWLDR (необязательно) 2
0x0002 (2) « NEWLDR» Подпись 6
0x0008 (8) ПОГРУЗЧИК физический диск и флаг загрузки ( 0x80- 0xFE, 0x00- 0x7E, 0xFF, 0x7F) (если не используются, это и следующие 3 байта должен быть все 0) 1
0x0009 (9) CHS- адрес загрузочного сектора ЗАГРУЗЧИКА или файла образа (например, IBMBIO.LDR ) ( 0x000000если не используется) 3
0x000C (12) Допустимый минимум DL, иначе взять из таблицы разделов ( 0x80: по умолчанию;: 0x00всегда использовать DL;: 0xFFвсегда использовать запись в таблице) 1
0x000D (13) Зарезервировано ( по умолчанию: 0x000000) 3
0x0010 (16) LBA загрузочного сектора или файла образа ЗАГРУЗЧИКА (необязательно; 0x00000000если не используется) 4
0x0014 (20) Смещение патча загрузочного модуля VBR (по умолчанию, 0x0000если не используется, иначе или) 0024hex 01FDhex 2
0x0016 (22) Контрольная сумма ( 0x0000если не используется) 2
0x0018 (24) Подпись загрузчика OEM (" MSWIN4" для REAL / 32, см. Также смещение, соответствует метке OEM со смещением в VBR (необязательно) +0DAhex +003hex 6
Варьируется Область кода начальной загрузки (ввод кода в 0x0000) Варьируется
0x01AC (428) 0x78 Подпись AAP (необязательно) 2
0x01AD (429) 0x56
0x01AE (430) Запись №0 раздела AAP со специальной семантикой Запись AAP (необязательно) 16
0x01BE (446) Запись раздела №1 Таблица разделов (для основных разделов) 16
0x01CE (462) Запись раздела №2 16
0x01DE (478) Запись раздела №3 16
0x01EE (494) Запись раздела №4 16
0x01FE (510) 0x55 Подпись загрузки 2
0x01FF (511) 0xAA
Общий размер: 30 + 398 + 2 + 16 + 4 × 16 + 2 512
Структура AST / NEC MS-DOS и SpeedStor MBR
Адрес Описание Размер ( байты )
0x0000 (0) Область кода начальной загрузки 380
0x017C (380) 0x5A Подпись AST / NEC (необязательно; не для SpeedStor) 2
0x017D (381) 0xA5
0x017E (382) Запись раздела №8 Расширенная таблица разделов AST / NEC (необязательно; также для SpeedStor) 16
0x018E (398) Запись раздела №7 16
0x019E (414) Запись раздела №6 16
0x01AE (430) Запись раздела №5 16
0x01BE (446) Запись раздела №4 Таблица разделов (для основных разделов) 16
0x01CE (462) Запись раздела №3 16
0x01DE (478) Запись раздела №2 16
0x01EE (494) Запись раздела №1 16
0x01FE (510) 0x55 Подпись загрузки 2
0x01FF (511) 0xAA
Общий размер: 380 + 2 + 4 × 16 + 4 × 16 + 2 512
Структура MBR Ontrack Disk Manager
Адрес Описание Размер ( байты )
0x0000 (0) Область кода начальной загрузки 252
0x00FC (252) 0xAA Подпись DM (необязательно) 2
0x00FD (253) 0x55
0x00FE (254) Запись раздела Расширенная таблица разделов DM (необязательно) 16
0x010E (270) Запись раздела 16
0x011E (286) Запись раздела 16
0x012E (302) Запись раздела 16
0x013E (318) Запись раздела 16
0x014E (334) Запись раздела 16
0x015E (350) Запись раздела 16
0x016E (366) Запись раздела 16
0x017E (382) Запись раздела 16
0x018E (398) Запись раздела 16
0x019E (414) Запись раздела 16
0x01AE (430) Запись раздела 16
0x01BE (446) Запись раздела №1 Таблица разделов (для основных разделов) 16
0x01CE (462) Запись раздела №2 16
0x01DE (478) Запись раздела №3 16
0x01EE (494) Запись раздела №4 16
0x01FE (510) 0x55 Подпись загрузки 2
0x01FF (511) 0xAA
Общий размер: 252 + 2 + 12 × 16 + 4 × 16 + 2 512

Записи в таблице разделов

Макет одной 16-байтовой записи раздела (все многобайтовые поля с прямым порядком байтов )
Смещение (байты) Длина поля Описание
0x00 1 байт Состояние или физический диск (бит 7 установлен для активного или загрузочного, старые MBR принимают только 0x80, 0x00 означает неактивный, а 0x01 - 0x7F означает недопустимый)
0x01 3 байта CHS-адрес первого абсолютного сектора в разделе. Формат описывается тремя байтами, см. Следующие три строки.
0x01 1 байт
ч 7–0 голова
Икс Икс Икс Икс Икс Икс Икс Икс
0x02 1 байт
в 9–8 с 5–0 сектор в битах 5–0; биты 7–6 являются старшими битами цилиндра
Икс Икс Икс Икс Икс Икс Икс Икс
0x03 1 байт
в 7–0 биты 7–0 цилиндра
Икс Икс Икс Икс Икс Икс Икс Икс
0x04 1 байт Тип перегородки
0x05 3 байта CHS-адрес последнего абсолютного сектора в разделе. Формат описывается 3 байтами, см. Следующие 3 строки.
0x05 1 байт
ч 7–0 голова
Икс Икс Икс Икс Икс Икс Икс Икс
0x06 1 байт
в 9–8 с 5–0 сектор в битах 5–0; биты 7–6 являются старшими битами цилиндра
Икс Икс Икс Икс Икс Икс Икс Икс
0x07 1 байт
в 7–0 биты 7–0 цилиндра
Икс Икс Икс Икс Икс Икс Икс Икс
0x08 4 байта LBA первого абсолютного сектора в разделе
0x0C 4 байта Количество секторов в разделе

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

В схеме CHS индексы секторов (почти) всегда начинаются с сектора 1, а не с сектора 0 по соглашению, и из-за ошибки во всех версиях MS-DOS / PC DOS вплоть до 7.10 количество головок обычно ограничено. до 255 вместо 256. Когда адрес CHS слишком велик для размещения в этих полях, сегодня обычно используется кортеж (1023, 254, 63), хотя в старых системах и старых дисковых инструментах значение цилиндра часто оборачивается вокруг по модулю барьера CHS около 8 ГБ, что вызывает неоднозначность и риски повреждения данных. (Если ситуация связана с «защитной» MBR на диске с GPT, спецификация Intel Extensible Firmware Interface требует, чтобы использовался кортеж (1023, 255, 63).) 10-битное значение цилиндра записывается в двух байтах по порядку. для облегчения выполнения вызовов к исходным / устаревшим процедурам доступа к диску INT 13h BIOS, где 16 бит были разделены на сектора и части цилиндра, а не на границы байтов.

Из-за ограничений адресации CHS был осуществлен переход к использованию LBA или адресации логических блоков. И длина раздела, и начальный адрес раздела - это значения секторов, которые хранятся в записях таблицы разделов в виде 32-битных величин. Раньше размер сектора считался фиксированным и составлял 512 (2 9) байтов, и широкий спектр важных компонентов, включая наборы микросхем, загрузочные секторы, операционные системы, механизмы баз данных, инструменты разделения, утилиты резервного копирования и файловой системы, а также другое программное обеспечение, имели это значение жестко. -кодированный. С конца 2009 года были доступны дисковые накопители с 4096-байтовыми секторами ( 4Kn или Advanced Format ), хотя размер сектора для некоторых из этих дисков по-прежнему сообщался хост-системе как 512 байтов посредством преобразования на жестком диске. микропрограммное обеспечение накопителя и обозначается как накопители с эмуляцией 512 ( 512e ).

Поскольку адреса и размеры блоков хранятся в таблице разделов MBR с использованием 32 бита, максимальный размер, а также наивысший начальный адрес раздела, использующего диски с 512-байтовыми секторами (фактическими или эмулированными), не могут превышать 2 ТиБ. −512 байт (2 199 023 255 040 байт или4 294 967 295 (2 32 -1) секторов × 512 (2 9) байтов на сектор). Снятие этого ограничения возможностей было одной из основных причин разработки GPT.

Поскольку информация о разделах хранится в таблице разделов MBR с использованием адреса начального блока и длины, теоретически можно определить разделы таким образом, чтобы выделенное пространство для диска с 512-байтовыми секторами давало общий размер, приближающийся к 4 ТиБ, если все разделы, кроме одного, расположены ниже предела 2 ТиБ, а последний назначен как начинающийся с блока 2 32 -1 или близкий к нему, и указывает размер до 2 32 -1, тем самым определяя раздел, требующий 33 а не 32 бита для доступа к адресу сектора. Однако на практике только некоторые операционные системы с поддержкой LBA-48, включая Linux, FreeBSD и Windows 7, которые используют внутренние адреса 64-битных секторов, действительно поддерживают это. Из-за ограничений пространства кода и характера таблицы разделов MBR для поддержки только 32-битных загрузочных секторов, даже если они включены для поддержки LBA-48, а не LBA-28, часто используются 32-битные вычисления, если они специально не предназначены для поддержки полный диапазон адресов LBA-48 или предназначены для работы только на 64-битных платформах. Любой загрузочный код или операционная система, использующие внутренние адреса 32-битных секторов, вызовут циклический переход адресов к этому разделу и, таким образом, приведут к серьезному повреждению данных во всех разделах.

Для дисков с размером сектора, отличным от 512 байт, например внешних USB- накопителей, также есть ограничения. Размер сектора 4096 приводит к восьмикратному увеличению размера раздела, который может быть определен с помощью MBR, что позволяет разделам размером до 16 ТиБ (2 32  × 4096 байтов). Более поздние версии Windows, чем Windows XP, поддерживают секторы большего размера, а также Mac OS X, а Linux поддерживает секторы большего размера с 2.6.31 или 2.6.32, но проблемы с загрузчиками, инструментами разметки и реализациями BIOS компьютера присутствуют. определенные ограничения, так как они часто жестко запрограммированы на резервирование только 512 байтов для секторных буферов, что приводит к перезаписи памяти для секторов большего размера. Это также может вызвать непредсказуемое поведение, поэтому его следует избегать, когда проблема совместимости и соответствия стандартам.

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

Начальная загрузка системы

На компьютерах, совместимых с IBM PC, загрузочная микропрограмма (содержащаяся в ROM BIOS ) загружается и выполняет главную загрузочную запись. PC / XT (тип 5160) использовал Intel 8088 микропроцессора. Для обеспечения совместимости все системы архитектуры x86 запускаются с микропроцессором в рабочем режиме, называемом реальным режимом. BIOS считывает MBR с запоминающего устройства в физическую память, а затем направляет микропроцессор на начало загрузочного кода. Поскольку BIOS работает в реальном режиме, процессор находится в реальном режиме, когда программа MBR начинает выполняться, и поэтому ожидается, что начало MBR будет содержать машинный код реального режима.

Поскольку процедура начальной загрузки BIOS загружает и запускает ровно один сектор с физического диска, наличие таблицы разделов в MBR с загрузочным кодом упрощает разработку программы MBR. Он содержит небольшую программу, которая загружает загрузочную запись тома (VBR) целевого раздела. Затем управление передается этому коду, который отвечает за загрузку реальной операционной системы. Этот процесс известен как загрузка цепи.

Популярные программы с кодом MBR были созданы для загрузки ПК DOS и MS-DOS, и аналогичный загрузочный код по-прежнему широко используется. Эти загрузочные секторы ожидают, что FDISKсхема таблицы разделов будет использоваться, и просматривают список разделов во встроенной таблице разделов MBR, чтобы найти единственный, который отмечен активным флагом. Затем он загружает и запускает загрузочную запись тома (VBR) активного раздела.

Существуют альтернативные реализации загрузочного кода, некоторые из которых устанавливаются менеджерами загрузки, которые работают по-разному. Некоторый код MBR загружает дополнительный код для диспетчера загрузки с первой дорожки диска, которую он считает «свободным» пространством, не выделенным ни одному разделу диска, и выполняет его. Программа MBR может взаимодействовать с пользователем, чтобы определить, какой раздел с какого диска следует загружать, и может передавать управление в MBR другого диска. Другой код MBR содержит список местоположений на диске (часто соответствующих содержимому файлов в файловой системе ) остальной части кода диспетчера загрузки, который необходимо загрузить и выполнить. (Первый основан на поведении, которое не является универсальным для всех утилит разделения диска, особенно тех, которые читают и записывают GPT. Последний требует, чтобы встроенный список местоположений дисков обновлялся при внесении изменений, которые переместили бы оставшуюся часть кода.)

На машинах, которые не используют процессоры x86, или на машинах x86 с микропрограммами, отличными от BIOS, такими как микропрограмма Open Firmware или Extensible Firmware Interface (EFI), эта конструкция не подходит, и MBR не используется как часть начальной загрузки системы. Вместо этого микропрограмма EFI способна напрямую понимать схему разделения GPT и формат файловой системы FAT, а также загружать и запускать программы, хранящиеся в виде файлов в системном разделе EFI. MBR будет задействована только постольку, поскольку она может содержать таблицу разделов для целей совместимости, если использовалась схема таблицы разделов GPT.

Существует некоторый код замены MBR, который имитирует загрузку прошивки EFI, что позволяет машинам без EFI загружаться с дисков с использованием схемы разбиения GPT. Он обнаруживает GPT, переводит процессор в правильный режим работы и загружает EFI-совместимый код с диска для выполнения этой задачи.

Идентификация диска

Информация, содержащаяся в таблице разделов внешнего жесткого диска, как она отображается в служебной программе QtParted, работающей под Linux

Помимо кода начальной загрузки и таблицы разделов, основные загрузочные записи могут содержать подпись диска. Это 32-битное значение, которое предназначено для однозначной идентификации дискового носителя (в отличие от дискового устройства - два не обязательно одинаковы для съемных жестких дисков).

Подпись диска была введена в Windows NT версии 3.5, но теперь она используется несколькими операционными системами, включая ядро Linux версии 2.6 и новее. Инструменты Linux могут использовать подпись диска NT, чтобы определить, с какого диска загружалась машина.

Windows NT (и более поздние операционные системы Microsoft) использует подпись диска в качестве индекса для всех разделов на любом диске, когда-либо подключенном к компьютеру под этой ОС; эти подписи хранятся в ключах реестра Windows, в первую очередь для хранения постоянных сопоставлений между разделами диска и буквами дисков. Он также может использоваться в файлах Windows NT BOOT.INI (хотя в большинстве случаев этого не происходит) для описания местоположения загрузочных разделов Windows NT (или более поздних версий). Один из ключей (среди многих), в котором подписи дисков NT появляются в реестре Windows 2000 / XP:

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\

Если подпись диска, хранящаяся в MBR, была A8 E1 B9 D2 (в таком порядке), а его первый раздел соответствовал логическому диску C: в Windows, то REG_BINARYданные под значением ключа \DosDevices\C:были бы:

A8 E1 B9 D2 00 7E 00 00 00 00 00 00

Первые четыре байта - это подпись диска. (В других ключах эти байты могут появляться в обратном порядке по сравнению с тем, что находится в секторе MBR.) За ними следуют еще восемь байтов, образующих 64-битное целое число в нотации с прямым порядком байтов, которые используются для определения байтового смещения. этого раздела. В этом случае 00 7E соответствует шестнадцатеричному значению 0x7E00 (32,256). Если предположить, что диск, о котором идет речь, сообщает о размере сектора 512 байт, то деление этого байтового смещения на 512 дает 63, что является номером физического сектора (или LBA), содержащим первый сектор раздела (в отличие от используемого количества секторов. в значениях секторов кортежей CHS, отсчитываемых от единицы, абсолютное значение или значение сектора LBA начинает отсчет с нуля ).

Если бы на этом диске был другой раздел со значениями 00 F8 93 71 02 после подписи диска (например, под значением ключа \DosDevices\D:), он бы начался со смещения байта 0x00027193F800 (10,495,457,280), который также является первым байтом физического сектора20,498,940.

Начиная с Windows Vista, подпись диска также хранится в хранилище данных конфигурации загрузки (BCD), и от этого зависит процесс загрузки. Если подпись диска изменяется, не может быть найдена или возникает конфликт, Windows не может загрузиться. Если Windows не вынуждена использовать перекрывающуюся часть адреса LBA записи Advanced Active Partition в качестве псевдодисковой подписи, использование Windows противоречит функции Advanced Active Partition PTS-DOS 7 и DR-DOS 7.07, в частности, если их загрузочный код расположен за пределами первых 8 ГБ диска, поэтому необходимо использовать адресацию LBA.

Соображения по программированию

MBR возникла в PC XT. Компьютеры, совместимые с IBM PC, имеют обратный порядок байтов, что означает, что процессор сначала сохраняет числовые значения, занимающие два или более байта, в памяти младшего значащего байта. Формат MBR на носителе отражает это соглашение. Таким образом, подпись MBR появится в редакторе диска в виде последовательности 55 AA.

Последовательность начальной загрузки в BIOS загрузит первую допустимую MBR, которую он найдет, в физическую память компьютера по адресу 0x0000: 0x7C00. Последняя инструкция, выполненная в коде BIOS, будет «переходом» к этому адресу, чтобы направить выполнение к началу копии MBR. Первичной проверкой для большинства BIOS является подпись по смещению 0x01FE, хотя разработчик BIOS может выбрать включение других проверок, таких как проверка того, что MBR содержит допустимую таблицу разделов без записей, относящихся к секторам, превышающим заявленную емкость диска.

Для BIOS съемные (например, гибкие) и фиксированные диски по сути одно и то же. В любом случае BIOS считывает первый физический сектор носителя в ОЗУ по абсолютному адресу 0x7C00, проверяет подпись в последних двух байтах загруженного сектора, а затем, если найдена правильная подпись, передает управление первому байту сектор с инструкцией перехода (JMP). Единственное реальное различие, которое делает BIOS, заключается в том, что (по умолчанию или если порядок загрузки не настраивается) он пытается загрузиться с первого съемного диска, прежде чем пытаться загрузиться с первого фиксированного диска. С точки зрения BIOS, действие MBR, загружающего загрузочную запись тома в RAM, точно такое же, как действие загрузочной записи тома гибкого диска, загружающее объектный код загрузчика операционной системы в RAM. В любом случае программа, загруженная в BIOS, выполняет последовательную загрузку операционной системы.

В то время как код загрузочного сектора MBR ожидает загрузки по физическому адресу 0x0000: 0x7C00, вся память с физического адреса 0x0000: 0x0501 (адрес 0x0000: 0x0500 является последним, используемым BIOS Phoenix) на 0x0000: 0x7FFF, позже уменьшенное до 0x0000: 0xFFFF (а иногда и до 0x9000: 0xFFFF) ‍ - конец первых 640 КБ ‍ - ‌ доступен в реальном режиме. INT 12h Вызов BIOS прерывания может помочь в определении того, какой объем памяти может быть выделено безопасно (по умолчанию он просто считывает базовый размер памяти в килобайтах от сегмента : смещение места 0x0040: 0x0013, но это может быть завербован другим жителем предзагрузочной программного обеспечения, как Наложения BIOS, код RPL или вирусы для уменьшения заявленного объема доступной памяти, чтобы другое программное обеспечение этапа загрузки, такое как загрузочные секторы, не перезаписывало их).

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

Код MBR проверяет таблицу разделов, выбирает подходящий раздел и загружает программу, которая будет выполнять следующий этап процесса загрузки, обычно с использованием вызовов INT 13h BIOS. Код начальной загрузки MBR загружает и запускает (в зависимости от загрузчика или операционной системы) код загрузочной записи тома, расположенный в начале «активного» раздела. Загрузочная запись тома умещается в 512-байтовом секторе, но для кода MBR можно безопасно загружать дополнительные секторы для размещения загрузчиков, длина которых превышает один сектор, при условии, что они не делают никаких предположений о размере сектора. Фактически, как минимум 1 КБ ОЗУ доступен по адресу 0x7C00 на каждой машине класса IBM XT и AT, поэтому сектор размером 1 КБ можно использовать без проблем. Как и MBR, загрузочная запись тома обычно ожидает загрузки по адресу 0x0000: 0x7C00. Это происходит из-за того, что структура загрузочной записи тома была создана на неразмеченном носителе, где загрузочная запись тома будет загружаться непосредственно процедурой загрузки BIOS; как упоминалось выше, BIOS обрабатывает MBR и загрузочные записи тома (VBR) совершенно одинаково. Поскольку это то же место, куда загружается MBR, одна из первых задач MBR - переместить себя в другое место в памяти. Адрес перемещения определяется MBR, но чаще всего это 0x0000: 0x0600 (для кода MBR MS-DOS / PC DOS, OS / 2 и Windows) или 0x0060: 0x0000 (большинство MBR DR-DOS). (Несмотря на то, что оба этих сегментированных адреса разрешаются в один и тот же адрес физической памяти в реальном режиме, для загрузки Apple Darwin необходимо переместить MBR на 0x0000: 0x0600 вместо 0x0060: 0x0000, поскольку код зависит от указателя DS: SI. к записи раздела, предоставленной MBR, но он ошибочно ссылается на него через 0x0000: только SI.) Важно не перемещаться по другим адресам в памяти, потому что многие VBR предполагают определенную стандартную структуру памяти при загрузке своего загрузочного файла.

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

Обычно значения, отличные от 0x00 (неактивно) и 0x80 (активно), были недопустимыми, и программа начальной загрузки отображала сообщение об ошибке при их обнаружении. Тем не менее, подключи и играй Спецификация BIOS и загрузки Спецификация BIOS (BBS) позволила другим устройствам стать загрузочным, а с 1994 года Следовательно, с введением MS-DOS 7.10 (Windows 95B) и выше, то MBR начали лечить множество бит 7 как активный флаг и отображал сообщение об ошибке только для значений 0x01.. 0x7F. Он продолжал рассматривать запись как физический диск, который будет использоваться позже при загрузке VBR соответствующего раздела, тем самым теперь также принимая другие загрузочные диски, кроме 0x80, как допустимые, однако MS-DOS не использовала это расширение отдельно. Сохранение фактического номера физического диска в таблице разделов обычно не вызывает проблем с обратной совместимостью, поскольку значение будет отличаться от 0x80 только на дисках, отличных от первого (которые в любом случае ранее не были загрузочными). Однако даже с системами, в которых разрешена загрузка с других дисков, расширение может по-прежнему не работать повсеместно, например, после изменения назначения физических дисков BIOS при удалении, добавлении или замене дисков. Следовательно, согласно спецификации загрузки BIOS (BBS), для современной MBR, принимающей бит 7 в качестве активного флага, рекомендуется передавать значение DL, изначально предоставленное BIOS, вместо использования записи в таблице разделов.

BIOS к интерфейсу MBR

MBR загружается в ячейку памяти 0x0000: 0x7C00 и со следующими регистрами ЦП, установленными, когда предыдущий загрузчик начальной загрузки (обычно IPL в BIOS) передает ему выполнение, перескакивая на 0x0000: 0x7C00 в реальном режиме ЦП.

  • CS : IP = 0x0000: 0x7C00 (фиксированный)
Некоторые BIOS Compaq ошибочно используют вместо этого 0x07C0: 0x0000. Хотя это разрешается в одно и то же место в памяти реального режима, это нестандартно, и его следует избегать, поскольку код MBR, предполагающий определенные значения регистров или не записанный для перемещения, может не работать в противном случае.
DL поддерживается IBM BIOS, а также большинством других BIOS. Известно, что BIOS Toshiba T1000 не поддерживает это должным образом, и некоторые старые BIOS Wyse 286 используют значения DL больше или равные 2 для фиксированных дисков (тем самым отражая номера логических дисков в DOS, а не номера физических дисков в BIOS). USB-накопители, сконфигурированные как съемные диски, обычно получают значение DL = 0x80, 0x81 и т. Д. Однако в некоторых редких BIOS они ошибочно представляли их как DL = 0x01, как если бы они были настроены как суперфлоппи.
Соответствующий стандарту BIOS присваивает числа больше или равные 0x80 исключительно фиксированным дискам / съемным дискам, и традиционно только значения 0x80 и 0x00 передавались в качестве физических дисков во время загрузки. По соглашению, разбиваются на разделы только фиксированные диски / съемные диски, поэтому единственное значение DL, которое MBR может видеть традиционно, было 0x80. Многие MBR были закодированы так, чтобы игнорировать значение DL и в любом случае работать с фиксированным значением (обычно 0x80).
Подключи и играй Спецификация BIOS и загрузки Спецификация BIOS (BBS), чтобы другие устройства, чтобы стать загрузочным, а с 1994 года позже рекомендует MBR и VBR код должен использовать DL, а не внутренне проводные значения по умолчанию. Это также обеспечит совместимость с различными нестандартными назначениями (см. Примеры выше), что касается кода MBR.
Загрузочные компакт-диски, соответствующие спецификации El Torito, могут содержать образы дисков, смонтированные BIOS для использования в качестве дискет или суперфлоппи-дисководов на этом интерфейсе. Значения DL 0x00 и 0x01 также могут использоваться расширениями BIOS Protected Area Run Time Interface Services (PARTIES) и Trusted Computing Group (TCG) в режиме Trusted для доступа к невидимым в противном случае разделам PARTIES, файлам образов дисков, расположенным через Boot Engineering Extension Record (BEER) в последнем физическом секторе защищенной области хоста жесткого диска (HPA). Несмотря на то, что код MBR разработан для имитации дискет или суперфлоппий, он принимает эти нестандартные значения DL, что позволяет использовать образы разделенных носителей, по крайней мере, на этапе загрузки операционных систем.
  • Бит 5 DH = 0: устройство поддерживается через INT 13h ; else: все равно (должно быть равно нулю). DH поддерживается некоторыми BIOS IBM.
  • Некоторые из других регистров обычно также могут содержать определенные значения регистров (DS, ES, SS = 0x0000 ; SP = 0x0400) с оригинальными BIOS ROM IBM, но на это не следует полагаться, поскольку другие BIOS могут использовать другие значения. По этой причине код MBR от IBM, Microsoft, Digital Research и т. Д. Никогда не использовал его. Использование этих значений регистров в загрузочных секторах также может вызвать проблемы в сценариях последовательной загрузки.

Системы с поддержкой Plug-and-Play BIOS или BBS будут предоставлять указатель на данные PnP в дополнение к DL:

  • DL = загрузочный привод (см. Выше)
  • ES : DI = указывает на " $PnP" структуру проверки установки
Эта информация позволяет загрузчику в MBR (или VBR, если он передается) активно взаимодействовать с BIOS или резидентным оверлеем PnP / BBS BIOS в памяти для настройки порядка загрузки и т. Д., Однако эта информация игнорируется. большинством стандартных MBR и VBR. В идеале ES: DI передается в VBR для последующего использования загруженной операционной системой, но операционные системы с поддержкой PnP обычно также имеют резервные методы для получения точки входа PnP BIOS позже, так что большинство операционных систем не полагаются на это..

MBR в интерфейс VBR

По соглашению, стандартный совместимый MBR передает выполнение успешно загруженному VBR, загруженному в ячейку памяти 0x0000: 0x7C00, путем перехода на 0x0000: 0x7C00 в реальном режиме ЦП со следующими поддерживаемыми или специально настроенными регистрами:

  • CS: IP = 0x0000: 0x7C00 (константа)
  • DL = загрузочный привод (см. Выше)
MBR MS-DOS 2.0-7.0 / PC DOS 2.0-6.3 не передают значение DL, полученное при записи, а скорее используют запись состояния загрузки в записи таблицы разделов выбранного основного раздела в качестве физического загрузочного накопителя. Поскольку по соглашению это 0x80 в большинстве таблиц разделов MBR, это не изменит ситуацию, если BIOS не попытается загрузиться с физического устройства, отличного от первого фиксированного диска / съемного диска в строке. Это также причина того, почему эти операционные системы не могут загрузиться со второго жесткого диска и т. Д. Некоторые инструменты FDISK позволяют также помечать разделы на вторичных дисках как «активные». В этой ситуации, зная, что эти операционные системы в любом случае не могут загрузиться с других дисков, некоторые из них продолжают использовать традиционно фиксированное значение 0x80 в качестве активного маркера, тогда как другие используют значения, соответствующие текущему назначенному физическому диску ( 0x81, 0x82), тем самым позволяя загружаться с других дисков, по крайней мере теоретически. Фактически, это будет работать со многими кодами MBR, которые принимают установленный бит 7 записи состояния загрузки как активный флаг, а не настаивают на 0x80, однако MBR MS-DOS / PC DOS жестко запрограммированы на принятие фиксированного значения Только 0x80. Сохранение фактического номера физического диска в таблице разделов также вызовет проблемы при изменении назначения физических дисков BIOS, например, при удалении, добавлении или замене дисков. Следовательно, для обычной MBR, принимающей бит 7 в качестве активного флага, а в противном случае просто использования и передачи в VBR значение DL, изначально предоставленное BIOS, обеспечивает максимальную гибкость. В MBR MS-DOS 7.1–8.0 бит 7 рассматривается как активный флаг, а любые значения 0x01.. 0x7F - как недопустимые, но они по-прежнему берут физический диск из таблицы разделов, а не используют значение DL, предоставленное BIOS. Расширенные MBR DR-DOS 7.07 обрабатывают бит 7 как активный флаг и по умолчанию используют и передают значение DL BIOS (включая нестандартные значения 0x00.. 0x01, используемые некоторыми BIOS также для разделенных носителей), но они также предоставляют специальный NEWLDR блок конфигурации для поддержки альтернативных методов загрузки в сочетании с LOADER и REAL / 32, а также для изменения детального поведения MBR, чтобы он также мог работать со значениями дисков, полученными из таблицы разделов (важно в сочетании с LOADER и AAP, см. Смещение NEWLDR 0x000C), преобразовать нестандартные приводы Wyse 0x02.. 0x7F в 0x80.. 0xFD и, при необходимости, исправить значение привода (сохраненное со смещением 0x019 в расширенном блоке параметров BIOS (EBPB) или со смещением сектора 0x01FD ) в загружали VBR перед передачей им выполнения (см. смещение NEWLDR 0x0014) - это также позволяет другим загрузчикам использовать NEWLDR в качестве загрузчика цепочки, настраивать его образ в памяти на лету и «туннелировать» загрузку VBR, EBR или AAP через NEWLDR.
  • Содержимое DH и ES: DI должно сохраняться в MBR для полной поддержки Plug-and-Play (см. Выше), однако многие MBR, включая MS-DOS 2.0 - 8.0 / PC DOS 2.0 - 6.3 и Windows NT / 2000 / XP, не надо. (Это неудивительно, поскольку эти версии DOS предшествовали стандарту Plug-and-Play BIOS, а предыдущие стандарты и соглашения не указывали никаких требований для сохранения каких-либо регистров, кроме DL.) Некоторые MBR устанавливают DH в 0.

Код MBR передает дополнительную информацию в VBR во многих реализациях:

  • DS: SI = указывает на 16-байтовую запись таблицы разделов MBR (в перемещенной MBR), соответствующую активированной VBR. PC-MOS 5.1 зависит от этого для загрузки, если ни один раздел в таблице разделов не отмечен как загрузочный. В сочетании с LOADER многопользовательские загрузочные секторы DOS и REAL / 32 используют это для определения загрузочного сектора активного раздела (или другого загрузчика начальной загрузки, такого как IBMBIO.LDR, в фиксированной позиции на диске), если загрузочный файл (LOADER.SYS) может не найти. PTS-DOS 6.6 и S / DOS 1.0 используют это вместе со своей функцией Advanced Active Partition (AAP). В дополнение к поддержке LOADER и AAP, DR-DOS 7.07 может использовать это для определения необходимого метода доступа INT 13h при использовании двойного кода CHS / LBA VBR, и он обновит поле загрузочного диска / флага состояния в записи раздела в соответствии с эффективно используемое значение DL. Дарвин загрузчики ( от Apple boot1h, boot1uи Дэвид Эллиотта boot1fat32) зависят от этого указателя, а также, но, кроме того, они не используют DS, но предположим, что должен быть установлен в 0x0000 вместо этого. Это вызовет проблемы, если это предположение неверно. Код MBR OS / 2, MS-DOS от 2.0 до 8.0, PC DOS от 2.0 до 7.10 и Windows NT / 2000 / XP также предоставляет тот же интерфейс, хотя эти системы его не используют. MBR Windows Vista / 7 больше не предоставляют этот указатель DS: SI. В то время как некоторые расширения зависят только от самой 16-байтовой записи таблицы разделов, для других расширений может потребоваться также наличие всей таблицы разделов из 4 (или 5 записей).
  • DS: BP = необязательно указывает на 16-байтовую запись таблицы разделов MBR (в перемещенной MBR), соответствующую активированной VBR. Он идентичен указателю, предоставляемому DS: SI (см. Выше), и предоставляется MBR MS-DOS 2.0-8.0, PC DOS 2.0-7.10, Windows NT / 2000 / XP / Vista / 7. Однако он не поддерживается большинством сторонних MBR.

В DR-DOS 7.07 расширенный интерфейс может быть дополнительно предоставлен расширенной MBR и вместе с ЗАГРУЗЧИКОМ:

  • AX = магическая подпись, указывающая на наличие этого расширения NEWLDR ( 0x0EDC)
  • DL = загрузочный привод (см. Выше)
  • DS: SI = указывает на используемую 16-байтовую запись таблицы разделов MBR (см. Выше)
  • ES: BX = начало загрузочного сектора или образа сектора NEWLDR (обычно 0x7C00)
  • CX = зарезервировано

В сочетании с GPT в предложении Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендуется другое расширение интерфейса:

  • EAX = 0x54504721 (" !GPT")
  • DL = загрузочный привод (см. Выше)
  • DS: SI = указывает на структуру передачи гибридной MBR, состоящую из 16-байтовой фиктивной записи таблицы разделов MBR (со всеми установленными битами, кроме флага загрузки со смещением 0x00 и типа раздела со смещением 0x04), за которыми следуют дополнительные данные. Это частично совместимо с более старым расширением DS: SI, рассмотренным выше, если этим более старым расширениям требуется только 16-байтовая запись раздела, а не вся таблица разделов.
Поскольку более старые операционные системы (включая их VBR) не поддерживают это расширение и не могут адресовать сектора за пределами барьера 2 ТиБ, гибридный загрузчик с поддержкой GPT должен по-прежнему эмулировать 16-байтовую фиктивную запись таблицы разделов MBR, если загрузочный раздел находится в пределах первых 2 ТиБ.
  • ES: DI = указывает на " $PnP" структуру проверки установки (см. Выше)

Редактирование и замена содержимого

Хотя можно напрямую манипулировать байтами в секторе MBR с помощью различных дисковых редакторов, существуют инструменты для записи фиксированных наборов функционального кода в MBR. Начиная с MS-DOS 5.0, в программе FDISK есть переключатель /MBR, который перезаписывает код MBR. Под Windows 2000 и Windows XP, то консоль восстановления может быть использована для написания нового кода MBR на устройство хранения с помощью своей fixmbrкоманды. Под Windows Vista и Windows 7, то среда восстановления может быть использована для написания нового кода MBR с помощью BOOTREC /FIXMBRкоманды. Некоторые сторонние утилиты также могут использоваться для непосредственного редактирования содержимого таблиц разделов (без каких-либо знаний о шестнадцатеричных редакторах или редакторах дисков / секторов), например MBRWizard.

ddтакже является часто используемой командой POSIX для чтения или записи в любое место на устройстве хранения, включая MBR. В Linux для установки MBR Windows можно использовать ms-sys. В проектах GRUB и LILO есть инструменты для записи кода в сектор MBR, а именно grub-installи lilo -mbr. Интерактивная консоль GRUB Наследство может написать в MBR, используя setupи embedкоманды, но GRUB2 в настоящее время требует, grub-installчтобы быть запущена из операционной системы.

Различные программы могут создавать « резервную копию » как таблицы первичных разделов, так и логических разделов в расширенном разделе.

Linux sfdisk(на SystemRescueCD ) может сохранять резервную копию основной и расширенной таблицы разделов. Он создает файл, который можно прочитать в текстовом редакторе, или этот файл может использоваться sfdisk для восстановления основной / расширенной таблицы разделов. Пример команды для резервного копирования таблицы разделов sfdisk -d /dev/hda gt; hda.outи для восстановления sfdisk /dev/hda lt; hda.out. Таким образом можно скопировать таблицу разделов с одного диска на другой, что полезно для настройки зеркалирования, но sfdisk выполняет команду без подсказок / предупреждений sfdisk -d /dev/sda | sfdisk /dev/sdb.

Смотрите также

Примечания

использованная литература

дальнейшее чтение

внешние ссылки

Последняя правка сделана 2024-01-01 10:58:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте