Основная загрузочная запись ( 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] Таким образом, максимальный размер диска, поддерживаемый схемой разбиения MBR (без 32-битной арифметики), использует секторы размером 512 байт (реальные или эмулированные), ограничен 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 ).
Артефакт технологии жестких дисков эпохи ПК 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-битного цилиндра записывается в двух байтах по порядку. для облегчения вызовов исходных/устаревших процедур доступа к диску BIOS INT 13h , где 16 бит были разделены на части секторов и цилиндров, а не на границы байтов. [13]
Из-за ограничений адресации CHS [16] [17] был сделан переход к использованию LBA или адресации логических блоков . И длина раздела, и начальный адрес раздела представляют собой значения секторов, хранящиеся в записях таблицы разделов в виде 32-битных величин. Размер сектора раньше считался фиксированным и составлял 512 (29 ) байт, и широкий спектр важных компонентов, включая наборы микросхем , загрузочные сектора , операционные системы , механизмы баз данных , инструменты секционирования , утилиты резервного копирования и файловой системы и другое программное обеспечение, имели это значение жестко. -кодированный. С конца 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 , загрузочная микропрограмма (содержащаяся в ПЗУ BIOS ) загружает и выполняет главную загрузочную запись. [23] В ПК/XT (тип 5160) использовался микропроцессор Intel 8088 . Чтобы сохранить совместимость, все системы с архитектурой BIOS x86 запускаются с микропроцессора в рабочем режиме, называемом реальным режимом . BIOS считывает MBR с запоминающего устройства в физическую память , а затем направляет микропроцессор на начало загрузочного кода. BIOS переключит процессор в реальный режим, а затем начнет выполнять программу MBR, поэтому ожидается, что начало MBR будет содержать машинный код реального режима . [23]
Поскольку процедура начальной загрузки BIOS загружает и запускает ровно один сектор физического диска, наличие таблицы разделов в MBR с загрузочным кодом упрощает разработку программы MBR. Он содержит небольшую программу, которая загружает загрузочную запись тома (VBR) целевого раздела. Затем управление передается этому коду, который отвечает за загрузку реальной операционной системы. Этот процесс известен как цепная загрузка .
Популярные программы с кодом MBR были созданы для загрузки ПК DOS и MS-DOS , и аналогичный загрузочный код до сих пор широко используется. Эти загрузочные сектора ожидают FDISK
использования схемы таблицы разделов и сканируют список разделов во встроенной таблице разделов MBR, чтобы найти единственный, помеченный активным флагом . [24] Затем он загружает и запускает загрузочную запись тома (VBR) активного раздела.
Существуют альтернативные реализации загрузочного кода, некоторые из которых устанавливаются менеджерами загрузки , которые действуют различными способами. Некоторый код MBR загружает дополнительный код для менеджера загрузки с первой дорожки диска, которая считается «свободным» пространством, не выделенным ни одному разделу диска, и выполняет его. Программа MBR может взаимодействовать с пользователем, чтобы определить, какой раздел и на каком диске должен загружаться, и может передавать управление MBR другого диска. Другой код MBR содержит список мест на диске (часто соответствующий содержимому файлов в файловой системе ) оставшейся части кода менеджера загрузки для загрузки и выполнения. (Первый вариант основан на поведении, которое не является универсальным для всех утилит разбиения диска, особенно для тех, которые читают и записывают GPT. Последний требует, чтобы встроенный список местоположений диска обновлялся при внесении изменений, которые могли бы переместить остальную часть кода. )
На компьютерах, которые не используют процессоры x86 , или на компьютерах x86 с прошивкой, отличной от BIOS, такой как прошивка с открытой прошивкой или расширяемым интерфейсом прошивки (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 , в первую очередь для хранения постоянных сопоставлений между разделами диска и буквами дисков. Его также можно использовать в файлах BOOT.INI Windows NT (хотя большинство из них этого не делают) для описания расположения загрузочных разделов 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-битное целое число в записи с прямым порядком байтов , которые используются для определения смещения байта. этого раздела. В этом случае 00 7E соответствует шестнадцатеричному значению 0x7E00 (32256 ). Если предположить, что рассматриваемый диск сообщает о размере сектора 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, имеют прямой порядок байтов , что означает, что процессор сохраняет числовые значения, охватывающие два или более байта, в памяти, начиная с младшего значащего байта . Формат MBR для СМИ отражает это соглашение. Таким образом, подпись MBR появится в редакторе дисков в виде последовательности 55 AA
. [а]
Последовательность начальной загрузки в BIOS загрузит первую найденную действительную MBR в физическую память компьютера по адресу 0x0000 : 0x7C00 . [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 может помочь определить, сколько памяти можно выделить безопасно (по умолчанию он просто считывает базовый размер памяти в КБ из сегмента :offset по адресу 0x0040 : 0x0013 , но он может быть перехвачен другим резидентным предварительным вызовом). загрузочное программное обеспечение, такое как наложения BIOS, код RPL или вирусы, чтобы уменьшить сообщаемый объем доступной памяти, чтобы не допустить их перезаписи другим программным обеспечением этапа загрузки, например загрузочными секторами).INT 12h
Последние 66 байт 512-байтовой MBR зарезервированы для таблицы разделов и другой информации, поэтому программа загрузочного сектора MBR должна быть достаточно маленькой, чтобы уместиться в 446 байт памяти или меньше.
Код MBR проверяет таблицу разделов, выбирает подходящий раздел и загружает программу, которая выполнит следующий этап процесса загрузки, обычно с использованием вызовов INT 13h BIOS . Код начальной загрузки MBR загружает и запускает (зависит от загрузчика или операционной системы) код загрузочной записи тома , расположенный в начале «активного» раздела. Загрузочная запись тома будет помещаться в 512-байтовый сектор, но код MBR может безопасно загружать дополнительные сектора для размещения загрузчиков длиной более одного сектора, при условии, что они не делают никаких предположений о размере сектора. Фактически, по адресу 0x7C00 доступно как минимум 1 КБ ОЗУ на каждой машине IBM XT- и AT-класса, поэтому сектор размером 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 при загрузке своей загрузки принимают определенную стандартную структуру памяти. файл.
Поле Статус в записи таблицы разделов используется для указания активного раздела . Соответствующие стандартам MBR допускают пометку активного только одного раздела и используют это как часть проверки работоспособности для определения существования действительной таблицы разделов. Они отобразят сообщение об ошибке, если более одного раздела помечены как активные. Некоторые нестандартные MBR не рассматривают это как состояние ошибки и просто используют первый отмеченный раздел в строке.
Традиционно значения, отличные от 0x00 (неактивный) и 0x80 (активный), были недопустимыми, и программа начальной загрузки отображала сообщение об ошибке при их обнаружении. Однако с 1994 года Спецификация Plug and Play BIOS и Спецификация загрузки BIOS (BBS) позволили сделать загрузочными и другие устройства. [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 offset 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 . [о]
dd
— это команда POSIX, обычно используемая для чтения или записи любого места на устройстве хранения, включая MBR. В Linux для установки MBR Windows можно использовать ms-sys. В проектах 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 записывает загрузочные записи тома , а не основные загрузочные записи, но интерфейс их входящего регистра аналогичен (с расширениями), поскольку оба они могут быть изначально загружены базовой системой.)