Основная загрузочная запись ( MBR ) — это тип загрузочного сектора в первом блоке разделенных компьютерных запоминающих устройств, таких как фиксированные диски или съемные диски, предназначенные для использования с IBM PC-совместимыми системами и за их пределами. Концепция MBR была публично представлена в 1983 году с PC DOS 2.0 .
MBR содержит информацию о том, как секторы диска (т. е. «блоки») делятся на разделы, каждый раздел предположительно содержит файловую систему. MBR также содержит исполняемый код, который выполняет функцию загрузчика для установленной операционной системы — обычно путем передачи управления на второй этап загрузчика или в сочетании с загрузочной записью тома (VBR) каждого раздела. Этот код MBR обычно называют загрузчиком.
Организация таблицы разделов в MBR ограничивает максимально адресуемое пространство хранения на разделе диска до 2 ТиБ (2 32 × 512 байт) . [1] Подходы к небольшому повышению этого предела с использованием 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 года. Таблица разделов поддерживала до четырех основных разделов . Это не изменилось, когда 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 и MS-DOS 7.10 (не путать с IBM PC-DOS 7.1) для поддержки дисков размером более 8 ГБ. Также были введены временные метки дисков . [2] Это также отражало идею о том, что MBR должна быть независимой от операционной системы и файловой системы. Однако это правило проектирования было частично нарушено в более поздних реализациях MBR от Microsoft, которые обеспечивают доступ CHS для типов разделов FAT16B и FAT32 0x06 / 0x0B , тогда как LBA используется для 0x0E / 0x0C .
Несмотря на иногда плохую документацию некоторых внутренних деталей формата MBR (что иногда вызывало проблемы совместимости), он был широко принят как фактический отраслевой стандарт из-за широкой популярности ПК-совместимых компьютеров и его полустатичной природы на протяжении десятилетий. Это было даже в той степени, что поддерживалось компьютерными операционными системами для других платформ. Иногда это было в дополнение к другим уже существующим или кроссплатформенным стандартам для начальной загрузки и разбиения на разделы. [3]
Однако записи разделов MBR и загрузочный код MBR, используемые в коммерческих операционных системах, ограничены 32 битами. [1] Таким образом, максимальный размер диска, поддерживаемый на дисках, использующих 512-байтовые сектора (реальные или эмулированные) схемой разбиения MBR (без 32-битной арифметики), ограничен 2 ТиБ. [1] Следовательно, для дисков большего размера необходимо использовать другую схему разбиения, поскольку они стали широко доступны с 2010 года. Таким образом, схема разбиения MBR находится в процессе замены таблицей разделов GUID (GPT). Официальный подход делает немного больше, чем просто обеспечивает целостность данных путем использования защитной MBR . В частности, он не обеспечивает обратную совместимость с операционными системами, которые также не поддерживают схему GPT. Между тем, несколько форм гибридных MBR были разработаны и реализованы третьими сторонами для того, чтобы поддерживать разделы, расположенные в первых физических 2 ТиБ диска в обеих схемах разбиения "параллельно" и/или позволить старым операционным системам также загружаться с разделов GPT. Текущая нестандартная природа этих решений вызывает различные проблемы совместимости в определенных сценариях.
MBR состоит из 512 или более байт, расположенных в первом секторе диска.
Он может содержать один или несколько из следующих элементов:
IBM PC DOS 2.0 представила FDISK
утилиту для настройки и обслуживания разделов MBR. Когда запоминающее устройство разделено по этой схеме, его MBR содержит таблицу разделов, описывающую расположение, размеры и другие атрибуты линейных областей, называемых разделами.
Сами разделы могут также содержать данные для описания более сложных схем разбиения на разделы, таких как расширенные загрузочные записи (EBR), метки дисков BSD или разделы метаданных Logical Disk Manager . [8]
MBR не находится в разделе; он находится в первом секторе устройства (физическое смещение 0), предшествующем первому разделу. (Загрузочный сектор, присутствующий на не разбитом на разделы устройстве или внутри отдельного раздела, вместо этого называется загрузочной записью тома .) В случаях, когда на компьютере запущен оверлей DDO BIOS или менеджер загрузки , таблица разделов может быть перемещена в какое-либо другое физическое место на устройстве; например, Ontrack Disk Manager часто помещал копию исходного содержимого MBR во второй сектор, а затем скрывал себя от любой впоследствии загружаемой ОС или приложения, поэтому копия MBR рассматривалась так, как будто она все еще находилась в первом секторе.
По соглашению, в схеме таблицы разделов MBR имеется ровно четыре первичных записи таблицы разделов, хотя некоторые операционные системы и системные инструменты расширяют это число до пяти (Advanced Active Partitions (AAP) с PTS-DOS 6.60 [9] и DR-DOS 7.07), восьми ( AST и NEC MS-DOS 3.x [10] [11], а также Storage Dimensions SpeedStor) или даже шестнадцати записей (с Ontrack Disk Manager ).
Артефакт технологии жестких дисков эпохи PC XT , таблица разделов подразделяет носитель информации, используя единицы цилиндров , головок и секторов ( адресация CHS ). Эти значения больше не соответствуют своим тезкам в современных дисководах, а также не имеют значения в других устройствах, таких как твердотельные накопители , которые физически не имеют цилиндров или головок.
В схеме CHS индексы секторов (почти) всегда начинались с сектора 1, а не с сектора 0 по соглашению, и из-за ошибки во всех версиях MS-DOS/PC DOS вплоть до 7.10 количество головок, как правило, ограничено 255 [h] вместо 256. Когда адрес CHS слишком велик для размещения в этих полях, сегодня обычно используется кортеж (1023, 254, 63), хотя в старых системах и со старыми дисковыми инструментами значение цилиндра часто оборачивалось по модулю барьера CHS около 8 ГБ, что приводило к неоднозначности и риску повреждения данных. (Если ситуация подразумевает «защитную» MBR на диске с GPT, спецификация Intel Extensible Firmware Interface требует использования кортежа (1023, 255, 63).) 10-битное значение цилиндра записывается в два байта, чтобы облегчить вызовы исходных/устаревших процедур доступа к диску INT 13h BIOS, где 16 бит были разделены на части сектора и цилиндра, а не на границы байтов. [13]
Из-за ограничений адресации CHS [16] [17] был сделан переход к использованию 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 ) байт на сектор). [1] Смягчение этого ограничения емкости было одной из главных причин разработки GPT.
Поскольку информация о разделах хранится в таблице разделов MBR с использованием начального адреса блока и длины, теоретически возможно определить разделы таким образом, чтобы выделенное пространство для диска с секторами размером 512 байт давало общий размер, приближающийся к 4 ТиБ, если все разделы, кроме одного, расположены ниже предела в 2 ТиБ, а последний назначен как начинающийся с блока 2 32 −1 или близко к нему, и указать размер до 2 32 −1, тем самым определяя раздел, которому требуется 33, а не 32 бита для доступа к адресу сектора. Однако на практике только некоторые операционные системы с поддержкой LBA-48 , включая Linux, FreeBSD и Windows 7 [18], которые используют 64-битные адреса секторов внутри, фактически поддерживают это. Из-за ограничений пространства кода и характера таблицы разделов MBR, поддерживающей только 32 бита, загрузочные секторы, даже если они включены для поддержки LBA-48, а не LBA-28 , часто используют 32-битные вычисления, если только они специально не разработаны для поддержки полного диапазона адресов LBA-48 или не предназначены для работы только на 64-битных платформах. Любой загрузочный код или операционная система, использующие 32-битные адреса секторов внутри, приведут к тому, что адреса будут переворачиваться при доступе к этому разделу и, таким образом, к серьезному повреждению данных во всех разделах.
Для дисков, которые представляют размер сектора, отличный от 512 байт, таких как внешние USB- накопители , также существуют ограничения. Размер сектора 4096 приводит к восьмикратному увеличению размера раздела, который может быть определен с помощью MBR, позволяя создавать разделы размером до 16 ТиБ (2 32 × 4096 байт). [19] Версии Windows, более поздние, чем Windows XP, поддерживают большие размеры секторов, а также Mac OS X, и Linux поддерживает большие размеры секторов с 2.6.31 [20] или 2.6.32, [21] но проблемы с загрузчиками, инструментами разбиения на разделы и реализациями BIOS компьютера накладывают определенные ограничения, [22] поскольку они часто жестко запрограммированы на резервирование только 512 байт для буферов секторов, что приводит к перезаписи памяти для больших размеров секторов. Это также может вызвать непредсказуемое поведение, и поэтому его следует избегать, когда проблема совместимости и соответствия стандартам.
Если устройство хранения данных было разделено с использованием схемы GPT, основная загрузочная запись по-прежнему будет содержать таблицу разделов, но ее единственное назначение — указывать на существование GPT и не допускать создания служебными программами, которые понимают только схему таблицы разделов MBR, каких-либо разделов в том месте, которое они в противном случае рассматривали бы как свободное пространство на диске, тем самым случайно стирая GPT.
На компьютерах, совместимых с IBM PC , загрузочная прошивка (содержащаяся в ROM BIOS ) загружает и выполняет главную загрузочную запись. [23] PC /XT (тип 5160) использовал микропроцессор Intel 8088. Чтобы оставаться совместимыми, все системы архитектуры x86 BIOS запускаются с микропроцессором в рабочем режиме , называемом реальным режимом . BIOS считывает MBR с устройства хранения в физическую память , а затем направляет микропроцессор к началу загрузочного кода. BIOS переключит процессор в реальный режим, затем начнет выполнять программу MBR, и поэтому начало MBR, как ожидается, будет содержать машинный код реального режима . [23]
Поскольку процедура загрузки BIOS загружает и запускает ровно один сектор с физического диска, наличие таблицы разделов в MBR с загрузочным кодом упрощает проектирование программы MBR. Она содержит небольшую программу, которая загружает Volume Boot Record (VBR) целевого раздела. Затем управление передается этому коду, который отвечает за загрузку фактической операционной системы. Этот процесс известен как цепная загрузка .
Популярные программы кода MBR были созданы для загрузки PC DOS и MS-DOS , и похожий загрузочный код по-прежнему широко используется. Эти загрузочные секторы ожидают, что FDISK
схема таблицы разделов используется, и сканируют список разделов во встроенной таблице разделов MBR, чтобы найти единственный, который отмечен активным флагом . [24] Затем он загружает и запускает загрузочную запись тома (VBR) активного раздела.
Существуют альтернативные реализации загрузочного кода, некоторые из которых устанавливаются менеджерами загрузки , которые работают различными способами. Некоторый код MBR загружает дополнительный код для менеджера загрузки с первой дорожки диска, которую он считает «свободным» пространством, не выделенным ни для одного раздела диска, и выполняет его. Программа MBR может взаимодействовать с пользователем, чтобы определить, какой раздел на каком диске должен загружаться, и может передавать управление MBR другого диска. Другой код MBR содержит список расположений на диске (часто соответствующих содержимому файлов в файловой системе ) оставшейся части кода менеджера загрузки для загрузки и выполнения. (Первый основан на поведении, которое не является универсальным для всех утилит разбиения диска, особенно тех, которые считывают и записывают GPT. Последний требует, чтобы встроенный список расположений на диске обновлялся при внесении изменений, которые переместят оставшуюся часть кода.)
На машинах, не использующих процессоры x86 , или на машинах x86 с прошивкой, отличной от BIOS, такой как прошивка Open Firmware или Extensible Firmware Interface (EFI), эта конструкция не подходит, и MBR не используется как часть загрузки системы. [25] Вместо этого прошивка EFI способна напрямую понимать схему разделов GPT и формат файловой системы FAT , а также загружает и запускает программы, хранящиеся в виде файлов в системном разделе EFI . [26] MBR будет задействована только в той мере, в какой она может содержать таблицу разделов для целей совместимости, если использовалась схема таблицы разделов GPT.
Существует некоторый код замены MBR, который эмулирует начальную загрузку прошивки EFI, что позволяет машинам без EFI загружаться с дисков с использованием схемы разбиения GPT. Он обнаруживает GPT, переводит процессор в правильный режим работы и загружает совместимый с EFI код с диска для выполнения этой задачи.
В дополнение к коду начальной загрузки и таблице разделов главные загрузочные записи могут содержать подпись диска. Это 32-битное значение, которое предназначено для уникальной идентификации дискового носителя (в отличие от дискового устройства — эти два не обязательно одинаковы для съемных жестких дисков).
Подпись диска была введена в Windows NT версии 3.5, но теперь она используется несколькими операционными системами, включая ядро Linux версии 2.6 и более поздних. Инструменты Linux могут использовать подпись диска NT, чтобы определить, с какого диска загрузилась машина. [27]
Windows NT (и более поздние операционные системы Microsoft) используют подпись диска в качестве индекса для всех разделов на любом диске, когда-либо подключенном к компьютеру под этой ОС; эти подписи хранятся в ключах реестра Windows , в первую очередь для хранения постоянных сопоставлений между разделами диска и буквами дисков. Он также может использоваться в файлах Windows NT BOOT.INI (хотя большинство этого не делает) для описания расположения загрузочных разделов Windows NT (или более поздних версий). [28] Один ключ (из многих), где подписи дисков 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-битное целое число в нотации little-endian , которые используются для определения смещения байта этого раздела. В этом случае 00 7E соответствует шестнадцатеричному значению 0x7E00 (32 256 ). Если предположить, что рассматриваемый диск сообщает размер сектора 512 байт, то деление этого смещения байтов на 512 дает 63, что является физическим номером сектора (или LBA), содержащего первый сектор раздела (в отличие от количества секторов, используемого в значении секторов кортежей CHS, которое отсчитывается с единицы , абсолютное или LBA значение сектора начинается с нуля ).
Если бы на этом диске был другой раздел со значениями 00 F8 93 71 02, следующим за сигнатурой диска (например, под значением ключа ), он бы начинался со смещения байта 0x00027193F800 (\DosDevices\D:
10,495,457,280 ), который также является первым байтом физического сектора20,498,940 .
Начиная с Windows Vista , подпись диска также хранится в хранилище данных конфигурации загрузки (BCD), и процесс загрузки зависит от нее. [29] Если подпись диска изменяется, не может быть найдена или имеет конфликт, Windows не сможет загрузиться. [30] Если Windows не вынуждена использовать перекрывающуюся часть адреса LBA записи расширенного активного раздела в качестве псевдоподписи диска, использование Windows конфликтует с функцией расширенного активного раздела PTS-DOS 7 и DR-DOS 7.07, в частности, если их загрузочный код расположен за пределами первых 8 ГБ диска, поэтому необходимо использовать адресацию LBA.
MBR возникла в PC XT . [31] IBM PC-совместимые компьютеры имеют порядок байтов little-endian , что означает, что процессор хранит числовые значения, охватывающие два или более байта в памяти, начиная с наименее значимого байта . Формат MBR на носителе отражает это соглашение. Таким образом, сигнатура MBR будет отображаться в дисковом редакторе как последовательность 55 AA
. [a]
Последовательность начальной загрузки в BIOS загрузит первую допустимую MBR, которую она найдет, в физическую память компьютера по адресу от 0x7C00 до 0x7FFF . [31] Последняя инструкция, выполненная в коде BIOS, будет «прыжком» на этот адрес, чтобы направить выполнение в начало копии MBR. Основной проверкой для большинства BIOS является подпись по смещению 0x01FE , хотя разработчик BIOS может включить другие проверки, такие как проверка того, что MBR содержит допустимую таблицу разделов без записей, ссылающихся на сектора за пределами указанной емкости диска.
Для BIOS съемные (например, дискеты) и фиксированные диски по сути одинаковы. В любом случае BIOS считывает первый физический сектор носителя в ОЗУ по абсолютному адресу 0x7C00 , проверяет сигнатуру в последних двух байтах загруженного сектора, а затем, если найдена правильная сигнатура, передает управление первому байту сектора с помощью инструкции перехода (JMP). Единственное реальное различие, которое делает BIOS, заключается в том, что (по умолчанию или если порядок загрузки не настраивается) он пытается загрузиться с первого съемного диска, прежде чем пытаться загрузиться с первого фиксированного диска. С точки зрения BIOS действие MBR, загружающего загрузочную запись тома в ОЗУ, точно такое же, как действие загрузочной записи тома дискеты, загружающей объектный код загрузчика операционной системы в ОЗУ. В любом случае программа, которую загрузил BIOS, выполняет работу по цепочке загрузки операционной системы.
В то время как код загрузочного сектора MBR ожидает загрузки по физическому адресу 0x0000 : 0x7C00 , [i] вся память от физического адреса 0x0000 : 0x0501 (адрес 0x0000 : 0x0500 — последний, используемый Phoenix BIOS) [13] до 0x0000 : 0x7FFF , [31] позже ослабленная до 0x0000 : 0xFFFF [32] (а иногда [j] до 0x9000 : 0xFFFF ) — конец первых 640 КБ — доступна в реальном режиме. [k] Вызов прерывания BIOS может помочь определить, какой объем памяти может быть безопасно выделен (по умолчанию он просто считывает базовый размер памяти в КБ из сегмента : смещение по адресу 0x0040 : 0x0013 , но его может перехватить другое резидентное предзагрузочное программное обеспечение, такое как оверлеи BIOS, код RPL или вирусы, чтобы уменьшить сообщаемый объем доступной памяти, чтобы не допустить их перезаписи другим программным обеспечением этапа загрузки, таким как загрузочные секторы).INT 12h
Последние 66 байт из 512-байтовой MBR зарезервированы для таблицы разделов и другой информации, поэтому программа загрузочного сектора MBR должна быть достаточно маленькой, чтобы поместиться в 446 байт памяти или меньше.
Код MBR проверяет таблицу разделов, выбирает подходящий раздел и загружает программу, которая выполнит следующий этап процесса загрузки, обычно с помощью вызовов BIOS INT 13h . Код начальной загрузки MBR загружает и запускает (зависящий от загрузчика или операционной системы) код загрузочной записи тома , который расположен в начале «активного» раздела. Загрузочная запись тома уместится в секторе размером 512 байт, но код MBR может безопасно загружать дополнительные секторы для размещения загрузчиков длиной более одного сектора, при условии, что они не делают никаких предположений о размере сектора. Фактически, по адресу 0x7C00 в каждой машине IBM XT и AT-класса доступно не менее 1 КБ ОЗУ, поэтому сектор размером 1 КБ можно использовать без проблем. Как и MBR, загрузочная запись тома обычно ожидает загрузки по адресу 0x0000 : 0x7C00 . Это вытекает из того факта, что конструкция загрузочной записи тома возникла на неразмеченных носителях, где загрузочная запись тома будет напрямую загружена процедурой загрузки BIOS; как упоминалось выше, BIOS обрабатывает MBR и загрузочные записи тома (VBR) [l] совершенно одинаково. Поскольку это то же самое место, куда загружается MBR, одной из первых задач MBR является перемещение себя в другое место памяти. Адрес перемещения определяется MBR, но чаще всего это 0x0000 : 0x0600 (для кода MS-DOS/PC DOS, OS/2 и Windows MBR) или 0x0060 : 0x0000 (большинство MBR DR-DOS). (Хотя оба этих сегментированных адреса разрешаются в один и тот же адрес физической памяти в реальном режиме, для загрузки Apple Darwin MBR необходимо переместить в 0x0000 : 0x0600 вместо 0x0060 : 0x0000 , поскольку код зависит от указателя DS:SI на запись раздела, предоставленную MBR, но он ошибочно ссылается на нее только через 0x0000 :SI. [33] ) Важно не переходить на другие адреса в памяти, поскольку многие VBR будут предполагать определенную стандартную структуру памяти при загрузке своего загрузочного файла.
Поле Status в записи таблицы разделов используется для указания активного раздела. Стандартные MBR допускают только один раздел, помеченный как активный, и используют это как часть проверки работоспособности для определения наличия допустимой таблицы разделов. Они отображают сообщение об ошибке, если более одного раздела помечены как активные. Некоторые нестандартные MBR не будут считать это состоянием ошибки и просто использовать первый помеченный раздел в строке.
Традиционно значения, отличные от 0x00 (неактивный) и 0x80 (активный), были недействительными, и программа загрузки отображала сообщение об ошибке при их обнаружении. Однако спецификации Plug and Play BIOS и BIOS Boot Specification (BBS) позволили другим устройствам стать загрузочными с 1994 года. [32] [34] Следовательно, с появлением MS-DOS 7.10 (Windows 95B) и выше, MBR начал обрабатывать установленный бит 7 как активный флаг и показывал сообщение об ошибке только для значений 0x01 .. 0x7F . Он продолжал обрабатывать запись как физическое устройство диска, которое будет использоваться при загрузке VBR соответствующего раздела позже, тем самым теперь также принимая другие загрузочные диски, отличные от 0x80 , как допустимые, однако MS-DOS сам по себе не использовал это расширение. Сохранение фактического номера физического диска в таблице разделов обычно не вызывает проблем с обратной совместимостью, поскольку значение будет отличаться от 0x80 только на дисках, отличных от первого (которые в любом случае не были загрузочными ранее). Однако даже в системах, в которых включена загрузка с других дисков, расширение может по-прежнему работать не универсально, например, после того, как назначение физических дисков в BIOS изменилось при удалении, добавлении или замене дисков. Поэтому, согласно спецификации загрузки BIOS (BBS), [32] для современной MBR, принимающей бит 7 в качестве активного флага, лучше всего передавать значение DL, изначально предоставленное BIOS, вместо использования записи в таблице разделов.
MBR загружается в ячейку памяти 0x0000 : 0x7C00 и со следующими регистрами ЦП , настроенными, когда предыдущий загрузчик (обычно IPL в BIOS) передает ему выполнение, переходя к ячейке 0x0000 : 0x7C00 в реальном режиме ЦП .
Системы с поддержкой Plug-and-Play BIOS или BBS будут предоставлять указатель на данные PnP в дополнение к DL: [32] [34]
$PnP
" структуру проверки установкиПо соглашению, стандартный совместимый MBR передает выполнение успешно загруженному VBR, загруженному в ячейку памяти 0x0000 : 0x7C00 , путем перехода к 0x0000 : 0x7C00 в реальном режиме ЦП со следующими поддерживаемыми или специально настроенными регистрами:
0x000C
0x019
0x01FD
) в загруженных VBR перед передачей им выполнения (см. смещение NEWLDR 0x0014
) — это также позволяет другим загрузчикам использовать NEWLDR в качестве цепочечного загрузчика, настраивать его образ в памяти «на лету» и «туннелировать» загрузку VBR, EBR или AAP через NEWLDR.Во многих реализациях код MBR передает дополнительную информацию в VBR:
boot1h
, boot1u
и David Elliott boot1fat32
) также зависят от этого указателя, но, кроме того, они не используют DS, а предполагают, что он установлен на 0x0000 . [33] Это вызовет проблемы, если это предположение неверно. Код 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 и в сочетании с LOADER:
В сочетании с GPT предложение Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендует еще одно расширение интерфейса: [37]
!GPT
$PnP
структуру проверки установки " " (см. выше)Хотя можно манипулировать байтами в секторе MBR напрямую с помощью различных дисковых редакторов , существуют инструменты для записи фиксированных наборов функционирующего кода в MBR. Начиная с MS-DOS 5.0, программа FDISK
включает переключатель /MBR
, который перезаписывает код MBR. [38] В Windows 2000 и Windows XP консоль восстановления может использоваться для записи нового кода MBR на устройство хранения с помощью ее fixmbr
команды. В Windows Vista и Windows 7 среда восстановления может использоваться для записи нового кода MBR с помощью BOOTREC /FIXMBR
команды. Некоторые сторонние утилиты также могут использоваться для прямого редактирования содержимого таблиц разделов (без необходимости знания шестнадцатеричных или редакторов дисков/секторов), например MBRWizard . [o]
dd
— это команда POSIX, обычно используемая для чтения или записи в любое место на устройстве хранения данных, включая MBR. В Linux ms-sys может использоваться для установки Windows MBR. Проекты GRUB и LILO имеют инструменты для записи кода в сектор MBR, а именно grub-install
и lilo -mbr
. Интерактивная консоль GRUB Legacy может записывать в MBR, используя команды setup
и embed
, но GRUB2 в настоящее время требует grub-install
запуска из операционной системы.
Различные программы способны создавать « резервную копию » как первичной таблицы разделов, так и логических разделов в расширенном разделе.
Linux sfdisk
(на SystemRescueCD ) может сохранять резервную копию первичной и расширенной таблицы разделов. Он создает файл, который можно прочитать в текстовом редакторе, или этот файл может использоваться sfdisk для восстановления первичной/расширенной таблицы разделов. Пример команды для резервного копирования таблицы разделов — , sfdisk -d /dev/hda > hda.out
а для восстановления — sfdisk /dev/hda < hda.out
. Таким образом можно скопировать таблицу разделов с одного диска на другой, что полезно для настройки зеркалирования, но sfdisk выполняет команду без подсказок/предупреждений с помощью sfdisk -d /dev/sda | sfdisk /dev/sdb
. [39]
55hex AAhex
AAhex
AA55hex
55AAhex
00 00 00 00 00 00hex
0000hex
7C00hex
A0000hex
0000hex
7FFFhex
0000hex
FFFFhex
Каждая операционная система включает в себя инструменты для управления разделами MBR. К сожалению, каждая операционная система обрабатывает разделы MBR немного по-разному.
Маттиас [Р.] Пол пишет: "[…]
PTS-DOS
[использует] специальную пятую запись раздела перед другими четырьмя записями в MBR и соответствующий код начальной загрузки MBR с поддержкой AAP. […]"
Некоторые OEM-системы, такие как AST DOS (тип
) и NEC DOS (тип
), имели 8 вместо 4 записей разделов в своих секторах MBR. (Маттиас Р. Пол).
(Примечание. Таблицы разделов NEC MS-DOS 3.30 и AST MS-DOS с восемью записями предваряются сигнатурой по смещению 0x017C .)14hex
24hex
A55Ahex
Когда мы добавляли разделы в эту таблицу NEC, первый был помещен по смещениям от
0x01EE
до
0x01FD
, а следующая запись была добавлена прямо над ним. Таким образом, записи вставляются и перечисляются в обратном порядке от обычной таблицы. Таким образом, если посмотреть на такую таблицу с помощью редактора дисков или утилиты листинга разделов, она покажет первую запись в таблице NEC из восьми записей как последнюю (четвертую запись) в обычной таблице разделов.
(Примечание. Показывает таблицу разделов из 8 записей и то, чем ее загрузочный код отличается от MS-DOS 3.30.)
[…] SYS […] /O[:nnn] Переопределить IPL, указанный в загрузочном устройстве (n=0..126, 128..254). […] Подготовка целевого диска... Выбор загрузочного сектора FAT12 CHS (требуется, чтобы IPL указала загрузочное устройство). Обработка цели как дискеты или супердискеты (загрузочное устройство 0). Запись нового загрузочного сектора... […](Примечание. SYS записывает записи загрузки тома , а не главные записи загрузки, но их входящий интерфейс регистра похож (с расширениями), поскольку они оба могут быть изначально загружены базовой системой.)