Главные загрузочная запись ( 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 отсутствуют на несекционированных носителях, таких как дискеты, суперфлоппи или другие устройства хранения, настроенные для работы как таковые.
Поддержка разделенных носителей и, следовательно, главной загрузочной записи (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 ).
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
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 |
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
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 |
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
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 |
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
0x0000 (0) | JMPS () / NEWLDR размер записи (часто / / для кода запуска в / /) EBhex 0x0A 0x16 0x1C 0x000C 0x0018 0x001E | Запись 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 |
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
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 |
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
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 |
Смещение (байты) | Длина поля | Описание | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 1 байт | Состояние или физический диск (бит 7 установлен для активного или загрузочного, старые MBR принимают только 0x80, 0x00 означает неактивный, а 0x01 - 0x7F означает недопустимый) | ||||||||||||||||||
0x01 | 3 байта | CHS-адрес первого абсолютного сектора в разделе. Формат описывается тремя байтами, см. Следующие три строки. | ||||||||||||||||||
0x01 | 1 байт |
| ||||||||||||||||||
0x02 | 1 байт |
| ||||||||||||||||||
0x03 | 1 байт |
| ||||||||||||||||||
0x04 | 1 байт | Тип перегородки | ||||||||||||||||||
0x05 | 3 байта | CHS-адрес последнего абсолютного сектора в разделе. Формат описывается 3 байтами, см. Следующие 3 строки. | ||||||||||||||||||
0x05 | 1 байт |
| ||||||||||||||||||
0x06 | 1 байт |
| ||||||||||||||||||
0x07 | 1 байт |
| ||||||||||||||||||
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-совместимый код с диска для выполнения этой задачи.
Помимо кода начальной загрузки и таблицы разделов, основные загрузочные записи могут содержать подпись диска. Это 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, вместо использования записи в таблице разделов.
MBR загружается в ячейку памяти 0x0000: 0x7C00 и со следующими регистрами ЦП, установленными, когда предыдущий загрузчик начальной загрузки (обычно IPL в BIOS) передает ему выполнение, перескакивая на 0x0000: 0x7C00 в реальном режиме ЦП.
Системы с поддержкой Plug-and-Play BIOS или BBS будут предоставлять указатель на данные PnP в дополнение к DL:
По соглашению, стандартный совместимый MBR передает выполнение успешно загруженному VBR, загруженному в ячейку памяти 0x0000: 0x7C00, путем перехода на 0x0000: 0x7C00 в реальном режиме ЦП со следующими поддерживаемыми или специально настроенными регистрами:
0x000C
), преобразовать нестандартные приводы Wyse 0x02.. 0x7F в 0x80.. 0xFD и, при необходимости, исправить значение привода (сохраненное со смещением 0x019
в расширенном блоке параметров BIOS (EBPB) или со смещением сектора 0x01FD
) в загружали VBR перед передачей им выполнения (см. смещение NEWLDR 0x0014
) - это также позволяет другим загрузчикам использовать NEWLDR в качестве загрузчика цепочки, настраивать его образ в памяти на лету и «туннелировать» загрузку VBR, EBR или AAP через NEWLDR.Код MBR передает дополнительную информацию в VBR во многих реализациях:
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 записей).В DR-DOS 7.07 расширенный интерфейс может быть дополнительно предоставлен расширенной MBR и вместе с ЗАГРУЗЧИКОМ:
В сочетании с GPT в предложении Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендуется другое расширение интерфейса:
!GPT
")$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
.