Основная загрузочная запись
Основная загрузочная запись ( 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 или более байт, расположенных в первом секторе диска.
Он может содержать одно или несколько из:
- Таблица разделов, описывающая разделы устройства хранения. В этом контексте загрузочный сектор также можно назвать сектором раздела .
- Код начальной загрузки : инструкции для идентификации настроенного загрузочного раздела, а затем загрузки и выполнения его загрузочной записи тома (VBR) в качестве цепного загрузчика .
- Дополнительная 32-битная временная метка диска . [2]
- Дополнительная 32-битная подпись диска . [4] [5] [6] [7]
Разметка диска
[ редактировать ]В 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 ).
Адрес | Описание | Размер ( байты ) | |
---|---|---|---|
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
|
Временная метка диска [2] [б] (необязательно; 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 (скопированных в смещение). +01Chex в загруженном секторе поверх записи «скрытые секторы» BPB DOS 3.31 (или его эмуляции), чтобы также поддерживать загрузку EBR)
|
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 ( EBhex ) / размер записи NEWLDR (часто 0x0A / 0x16 / 0x1C для начала кода с 0x000C / 0x0018 / 0x001E )
|
Запись NEWLDR (необязательно) | 2 |
0x0002 (2)
|
" NEWLDR " подпись
|
6 | |
0x0008 (8)
|
LOADER физический диск и флаг загрузки ( 0x80 – 0xFE , 0x00 – 0x7E , 0xFF , 0x7F ) (если не используется, то этот и последующие 3 байта должны быть равны 0)
|
1 | |
0x0009 (9)
|
CHS- адрес загрузочного сектора или файла образа LOADER (например, IBMBIO.LDR ) ( 0x000000 если не используется)
|
3 | |
0x000C (12)
|
Разрешенный минимум DL , иначе возьмите из таблицы разделов ( 0x80 : по умолчанию; 0x00 : всегда используйте DL; 0xFF : всегда используйте запись в таблице)
|
1 | |
0x000D (13)
|
Зарезервировано (по умолчанию: 0x000000 )
|
3 | |
0x0010 (16)
|
LBA загрузочного сектора LOADER или файла образа (необязательно; 0x00000000 если не используется)
|
4 | |
0x0014 (20)
|
Исправление смещения загрузочного модуля VBR (по умолчанию). 0x0000 если не используется, иначе 0024hex или 01FDhex )
|
2 | |
0x0016 (22)
|
Контрольная сумма ( 0x0000 если не используется)
|
2 | |
0x0018 (24)
|
Подпись OEM-загрузчика (" MSWIN4 " для REAL/32 см . также смещение +0DAhex , соответствует этикетке OEM со смещением +003hex в VBR (необязательно)
|
6 | |
Варьируется | Область кода начальной загрузки (ввод кода в 0x0000 )
|
Варьируется | |
0x01AC (428)
|
0x78
|
Подпись AAP (необязательно) | 2 |
0x01AD (429)
|
0x56
| ||
0x01AE (430)
|
Запись раздела AAP №0 со специальной семантикой | Запись 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 байт | Тип раздела [14] | ||||||||||||||||||
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-битного цилиндра записывается в двух байтах по порядку. для облегчения вызовов исходных/устаревших процедур доступа к диску BIOS INT 13h , где 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 , начальной загрузки микропрограмма (содержащаяся в ПЗУ 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 ( 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), и от этого зависит процесс загрузки. [29] Если подпись диска изменилась, не может быть найдена или имеет конфликт, Windows не сможет загрузиться. [30] Если Windows не вынуждена использовать перекрывающуюся часть адреса LBA записи Advanced Active Partition в качестве подписи псевдодиска, использование Windows противоречит функции Advanced Active Partition в 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 , [я] вся память с физического адреса 0x0000 : 0x0501 (адрес 0x0000 : 0x0500 — последний, используемый Phoenix BIOS) [13] к 0x0000 : 0x7FFF , [31] позже расслабился до 0x0000 : 0xFFFF [32] (а иногда [Дж] до 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 (для MS-DOS/PC DOS, OS/2 и кода MBR Windows) или 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, вместо использования записи в таблице разделов.
Интерфейс BIOS-MBR
[ редактировать ]MBR загружается в ячейку памяти 0x0000 : 0x7C00 и со следующими регистрами ЦП , настроенными, когда предыдущий загрузчик начальной загрузки (обычно IPL в BIOS) передает ему выполнение, перейдя на 0x0000 : 0x7C00 процессора в реальном режиме .
- Некоторые BIOS Compaq ошибочно используют 0x07C0 : Вместо этого 0x0000 . Хотя это разрешается в одно и то же место в памяти реального режима, это нестандартно, и его следует избегать, поскольку код MBR, предполагающий определенные значения регистров или не записанный как перемещаемый, в противном случае может не работать.
- DL = загрузочный диск ( фиксированные диски / съемные диски : 0x80 = первый, 0x81 = секунда, ..., 0xFE ; дискеты / супердискеты : 0x00 = первый, 0x01 = секунда, ..., 0x7Е ; ценности 0x7F и 0xFF зарезервированы для ПЗУ/удаленных дисков и не должны использоваться на диске). [35] [36]
- DL поддерживается BIOS IBM, а также большинством других BIOS. Известно, что BIOS Toshiba T1000 не поддерживает это должным образом, и некоторые старые BIOS Wyse 286 используют значения DL, большие или равные 2 для фиксированных дисков (тем самым отражая номера логических дисков в DOS, а не номера физических дисков в BIOS). USB-накопителям, настроенным как съемные диски, обычно присваивается значение DL = 0x80 , 0x81 и т. д. Однако некоторые редкие биосы ошибочно представляли их под DL= 0x01 , как если бы они были настроены как супердискеты.
- Стандартный BIOS присваивает номера, большие или равные 0x80 исключительно для фиксированных/съемных дисков и традиционно только значения 0x80 и 0x00 передавались как физические диски во время загрузки. По соглашению, разделами являются только фиксированные и съемные диски, поэтому единственным значением DL, которое традиционно могла видеть MBR, было 0x80 . Многие MBR были закодированы так, чтобы игнорировать значение DL и работать с жестко заданным значением (обычно 0x80 ), во всяком случае.
- Спецификация Plug and Play BIOS и Спецификация загрузки BIOS (BBS) позволяют другим устройствам также стать загрузочными с 1994 года. [32] [34] Последний рекомендует, чтобы код MBR и VBR использовал DL, а не внутренне запрограммированные значения по умолчанию. [32] Это также обеспечит совместимость с различными нестандартными назначениями (см. примеры выше), что касается кода MBR.
- Загрузочные компакт-диски, соответствующие спецификации El Torito, могут содержать образы дисков, смонтированные BIOS, которые будут выглядеть как дискеты или супердискеты на этом интерфейсе. Значения DL 0x00 и 0x01 также может использоваться расширениями BIOS служб расширения интерфейса времени выполнения защищенной области (PARTIES) и группы доверенных вычислений (TCG) в доверенном режиме для доступа к невидимым в противном случае разделам PARTIES, файлам образов дисков, расположенным через запись расширения Boot Engineering (BEER) в (HPA) жесткого диска последний физический сектор защищенной области хоста . Хотя код MBR предназначен для эмуляции дискет или супердискет, он принимает эти нестандартные значения DL и позволяет использовать образы разделенных носителей по крайней мере на этапе загрузки операционных систем.
- Бит DH 5 = 0: устройство поддерживается через INT 13h ; иначе: все равно (должно быть равно нулю). DH поддерживается некоторыми BIOS IBM.
- Некоторые другие регистры обычно также могут содержать определенные значения регистров (DS, ES, SS = 0x0000 ; СП = 0x0400 ) с исходными BIOS ROM IBM, но на это нельзя полагаться, поскольку другие BIOS могут использовать другие значения. По этой причине код MBR от IBM, Microsoft, Digital Research и т. д. никогда не использовал его. Использование этих значений регистров в загрузочных секторах также может вызвать проблемы в сценариях цепной загрузки.
Системы с поддержкой Plug-and-Play BIOS или BBS помимо DL будут предоставлять указатель на данные PnP: [32] [34]
- Эта информация позволяет загрузчику в MBR (или VBR, если он передан) активно взаимодействовать с BIOS или резидентным оверлеем PnP/BBS BIOS в памяти с целью настройки порядка загрузки и т. д., однако эта информация игнорируется. большинством стандартных MBR и VBR. В идеале ES:DI передается в VBR для последующего использования загруженной операционной системой, но операционные системы с поддержкой PnP обычно также имеют резервные методы для последующего получения точки входа PnP BIOS, чтобы большинство операционных систем не полагались на это. .
Интерфейс MBR-VBR
[ редактировать ]По соглашению, MBR, соответствующий стандарту, передает выполнение успешно загруженному VBR, загруженному в ячейку памяти. 0x0000 : 0x7C00 , перейдя на 0x0000 : 0x7C00 в реальном режиме ЦП со следующими сохраненными или специально настроенными регистрами:
- CS:IP = 0x0000 : 0x7C00 [м] (постоянный)
- DL = загрузочный диск (см. выше)
- MBR MS-DOS 2.0–7.0 / PC DOS 2.0–6.3 не передают значение DL, полученное при вводе, а скорее используют запись состояния загрузки в записи таблицы разделов выбранного основного раздела в качестве физического загрузочного диска. Поскольку это, по соглашению, 0x80 в большинстве таблиц разделов MBR, это ничего не изменит, если BIOS не попытается загрузить физическое устройство, отличное от первого фиксированного или съемного диска в строке. Это также причина, по которой эти операционные системы не могут загружаться со второго жесткого диска и т. д. Некоторые инструменты FDISK также позволяют помечать разделы на дополнительных дисках как «активные». В этой ситуации, зная, что эти операционные системы все равно не могут загружаться с других дисков, некоторые из них продолжают использовать традиционно фиксированное значение 0x80 в качестве активного маркера, тогда как другие используют значения, соответствующие назначенному в данный момент физическому устройству привода ( 0x81 , 0x82 ), что позволяет загружаться с других дисков, по крайней мере теоретически. Фактически, это будет работать со многими кодами MBR, которые принимают установленный бит 7 записи состояния загрузки в качестве активного флага, а не настаивают на 0x80 , однако MBR MS-DOS/PC DOS жестко запрограммированы на принятие фиксированного значения Только 0x80 . Сохранение фактического номера физического диска в таблице разделов также может вызвать проблемы при изменении назначения физических дисков в BIOS, например, при удалении, добавлении или замене дисков. Таким образом, для обычного MBR, принимающего бит 7 в качестве активного флага и в противном случае просто использующего и передающего VBR значение DL, первоначально предоставленное BIOS, обеспечивает максимальную гибкость. MBR MS-DOS 7.1–8.0 изменены и теперь рассматривают бит 7 как активный флаг и любые значения. 0x01 .. 0x7F как недействительный, но они по-прежнему берут физический диск из таблицы разделов, а не используют значение DL, предоставленное BIOS. Расширенные MBR DR-DOS 7.07 рассматривают бит 7 как активный флаг и используют и передают значение BIOS DL по умолчанию (включая нестандартные значения). 0x00 .. 0x01 , используемый некоторыми BIOS также для разделенных носителей), но они также предоставляют специальный блок конфигурации NEWLDR для поддержки альтернативных методов загрузки в сочетании с LOADER и REAL/32, а также для изменения подробного поведения MBR, чтобы он также может работать со значениями дисков, полученными из таблицы разделов (важно в сочетании с LOADER и AAP, см. Смещение NEWLDR).
0x000C
), перевести нестандартные приводные блоки Wyse 0x02 .. 0x7F в 0x80 .. 0xFD и, при необходимости, исправить значение привода (сохраненное по смещению0x019
в расширенном блоке параметров BIOS (EBPB) или по смещению сектора.0x01FD
) в загруженных VBR перед передачей им выполнения (см. смещение NEWLDR0x0014
) — это также позволяет другим загрузчикам использовать NEWLDR в качестве цепного загрузчика, на лету настраивать его образ в памяти и «туннелировать» загрузку VBR, EBR или AAP через NEWLDR.
- Содержимое DH и ES:DI должно сохраняться в MBR для полной поддержки Plug-and-Play (см. выше), однако многие MBR, в том числе MS-DOS 2.0–8.0 / PC DOS 2.0–6.3 и Windows NT /2000/XP, нет. (Это неудивительно, поскольку эти версии DOS предшествовали стандарту Plug-and-Play BIOS, а предыдущие стандарты и соглашения не указывали никаких требований по сохранению каких-либо регистров, кроме DL.) Некоторые MBR устанавливают DH в 0.
Код MBR передает дополнительную информацию в VBR во многих реализациях:
- DS:SI = указывает на 16-байтовую запись таблицы разделов MBR (в перемещенном MBR), соответствующую активированному VBR. От этого зависит загрузка PC-MOS 5.1, если ни один раздел в таблице разделов не помечен как загрузочный. В сочетании с LOADER, Multiuser DOS и загрузочными секторами REAL/32 используйте это для поиска загрузочного сектора активного раздела (или другого загрузчика, такого как IBMBIO.LDR, в фиксированной позиции на диске), если загрузочный файл (LOADER.SYS) может не найти. PTS-DOS 6.6 и S/DOS 1.0 используют это вместе с функцией Advanced Active Partition (AAP). В дополнение к поддержке LOADER и AAP, DR-DOS 7.07 может использовать это для определения необходимого метода доступа INT 13h при использовании двойного кода CHS/LBA VBR и обновлять поле загрузочного диска/флага состояния в записи раздела в соответствии с эффективно используемое значение DL. Загрузчики Darwin (Apple
boot1h
,boot1u
и Дэвида Эллиотта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 записей). - DS: BP = опционально указывает на 16-байтовую запись таблицы разделов MBR (в перемещенном MBR), соответствующую активированному VBR. Он идентичен указателю, предоставляемому DS:SI (см. выше), и предоставляется MS-DOS 2.0–8.0, PC DOS 2.0–7.10, MBR Windows NT/2000/XP/Vista/7. Однако он не поддерживается большинством сторонних MBR.
В DR-DOS 7.07 расширенный интерфейс может быть дополнительно предоставлен расширенной MBR и в сочетании с LOADER:
- AX = магическая подпись, указывающая наличие этого расширения NEWLDR ( 0x0EDC )
- DL = загрузочный диск (см. выше)
- DS:SI = указывает на используемую 16-байтовую запись таблицы разделов MBR (см. выше).
- ES: BX = начало загрузочного сектора или образ сектора NEWLDR (обычно 0x7C00 )
- CX = зарезервировано
В сочетании с GPT в предложении Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендуется другое расширение интерфейса: [37]
- ЕАХ = 0x54504721 ("
!GPT
") - DL = загрузочный диск (см. выше)
- DS:SI = указывает на структуру передачи обслуживания гибридной MBR, состоящую из 16-байтовой фиктивной записи таблицы разделов MBR (со всеми установленными битами, за исключением флага загрузки по смещению). 0x00 и тип раздела по смещению 0x04 ), за которым следуют дополнительные данные. Это частично совместимо со старым расширением DS:SI, обсуждавшимся выше, если для этих старых расширений требуется только 16-байтовая запись раздела, а не вся таблица разделов.
- Поскольку более старые операционные системы (включая их VBR) не поддерживают это расширение и не могут адресовать сектора за пределами барьера в 2 ТиБ, гибридный загрузчик с поддержкой GPT все равно должен эмулировать 16-байтовую фиктивную запись таблицы разделов MBR, если загрузочный раздел расположен в пределах первых 2 ТиБ. [н]
- ES:DI = указывает на "
$PnP
" структура проверки установки (см. выше)
Редактирование и замена содержимого
[ редактировать ]Хотя можно манипулировать байтами в секторе MBR напрямую с помощью различных дисковых редакторов , существуют инструменты для записи фиксированных наборов функционирующего кода в MBR. Начиная с MS-DOS 5.0, программа FDISK
включил переключатель /MBR
, который перепишет код MBR. [38] В Windows 2000 и Windows XP консоль восстановления можно использовать для записи нового кода MBR на устройство хранения данных с помощью его fixmbr
команда. В Windows Vista и Windows 7 среду восстановления можно использовать для записи нового кода MBR с помощью BOOTREC /FIXMBR
команда.
Некоторые сторонние утилиты также могут использоваться для непосредственного редактирования содержимого таблиц разделов (без каких-либо знаний шестнадцатеричных редакторов или редакторов дисков/секторов), например MBRWizard . [the]
dd
— это команда POSIX, обычно используемая для чтения или записи любого места на устройстве хранения, включая MBR. В Linux ms-sys можно использовать для установки MBR Windows. В проектах GRUB и LILO есть инструменты для записи кода в сектор MBR, а именно grub-install
и lilo -mbr
. Интерактивная консоль GRUB Legacy может записывать в MBR, используя команду setup
и embed
команды, но GRUB2 в настоящее время требует grub-install
запускаться из операционной системы.
Различные программы способны создавать « резервную копию » как основной таблицы разделов, так и логических разделов расширенного раздела.
Линукс sfdisk
(на SystemRescueCD ) может сохранять резервную копию основной и расширенной таблицы разделов. Он создает файл, который можно прочитать в текстовом редакторе, или этот файл может быть использован sfdisk для восстановления основной/расширенной таблицы разделов. Пример команды для резервного копирования таблицы разделов: sfdisk -d /dev/hda > hda.out
и восстановить sfdisk /dev/hda < hda.out
. Таким образом можно скопировать таблицу разделов с одного диска на другой, что полезно для настройки зеркалирования, но sfdisk выполняет команду без запросов/предупреждений, используя sfdisk -d /dev/sda | sfdisk /dev/sdb
. [39]
См. также
[ редактировать ]- Расширенная загрузочная запись (EBR)
- Загрузочная запись тома (VBR)
- Таблица разделов GUID (GPT)
- Загрузочный раздел BIOS
- Системный раздел EFI
- Запись расширения загрузки (BEER)
- Защищенная зона хоста (HPA)
- Наложение конфигурации устройства (DCO)
- Карта разделов Apple (APM)
- Блок жесткого диска Amiga (RDB)
- Содержание тома (VTOC)
- метка диска bsd
- Загрузчик
- Клонирование диска
- Диск восстановления
- GNU расстался
- Выравнивание разделов
Примечания
[ редактировать ]- ^ Jump up to: а б с д и ж г Подпись в зачете 0x01FE в загрузочных секторах
55hex AAhex
, то есть 0x55 по смещению 0x01FE иAAhex
в зачете 0x01ФФ . Поскольку , необходимо предполагать представление с прямым порядком байтов в контексте компьютеров, совместимых с IBM PC , это можно записать как 16-битное слово.AA55hex
в программах для процессоров x86 (обратите внимание на порядок перестановки), тогда как это нужно было бы записать как55AAhex
в программах для других архитектур ЦП используется представление с прямым порядком байтов . Поскольку это неоднократно путалось в книгах и даже в оригинальных справочных документах Microsoft, в этой статье используется побайтовое представление на диске на основе смещения, чтобы избежать любой возможной неправильной интерпретации. - ^ Чтобы обеспечить целостность кода загрузчика MBR, важно, чтобы байты в 0x00DA в 0x00DF никогда не изменяются, если только все шесть байтов не представляют значение 0 или одновременно не заменяется весь код загрузчика начальной загрузки MBR (за исключением (расширенной) таблицы разделов). Это включает в себя сброс этих значений на
00 00 00 00 00 00hex
если не известен код, хранящийся в MBR. Windows придерживается этого правила. - ^ Первоначально значения статуса, отличные от 0x00 и 0x80 были недействительны, но современные MBR рассматривают бит 7 как активный флаг и используют эту запись для хранения физической загрузочной единицы.
- ^ Jump up to: а б Поля стартового сектора ограничены 1023+1 цилиндром, 255+1 головкой и 63 секторами; Поля конечных секторов имеют те же ограничения.
- ^ Jump up to: а б с д и Диапазон секторов от 1 до 63; диапазон цилиндров составляет от 0 до 1023; диапазон head — от 0 до 255 включительно. [13]
- ^ Эта запись используется операционными системами при определенных обстоятельствах; в таких случаях адреса CHS игнорируются. [15]
- ^ Ноль зарезервирован и не должен использоваться в обычных записях раздела. Эта запись используется операционными системами при определенных обстоятельствах; в таких случаях адреса CHS игнорируются. [15]
- ^ "Цитата: [Большинство] версий MS-DOS (включая MS-DOS 7 [Windows 95]) содержат ошибку, которая предотвращает загрузку на жестких дисках с 256 головками (FFh), поэтому многие современные BIOS обеспечивают сопоставления не более чем с 255 ( ФЭх) головы». РБИЛ [40] [41]
- ^ Адрес
0000hex
:7C00hex
— это первый байт 32-го КБ ОЗУ. Загрузка загрузочной программы по этому адресу исторически была причиной того, что, хотя минимальный размер ОЗУ исходного IBM PC (тип 5150) составлял 16 КБ, для дискового варианта в IBM XT требовалось 32 КБ. - ^ Если есть EBDA , доступная память заканчивается под ним.
- ^ Очень старые машины могут иметь размер менее 640 КБ (
A0000hex
или 655 360 байт) памяти. Теоретически всего 32 КБ (до0000hex
:7FFFhex
) или 64 КБ (до0000hex
:FFFFhex
) гарантированно существуют; это будет иметь место на машине IBM XT-класса, оснащенной только минимальным объемом памяти, необходимым для дисковой системы. - ^ Это применимо, когда BIOS обрабатывает VBR, то есть когда он находится в первом физическом секторе неразделенного носителя. В противном случае биос не имеет никакого отношения к VBR. Конструкция VBR такова, какая она есть, потому что VBR возникли исключительно на неразмеченных дискетах (у IBM PC типа 5150 изначально не было жесткого диска), а система разметки с использованием MBR была позже разработана как адаптация для размещения более одного тома. , каждый из которых начинается со своего уже определенного VBR, на один фиксированный диск. Благодаря такой конструкции MBR, по сути, эмулирует процедуру загрузки BIOS, выполняя те же действия, что и BIOS, чтобы обработать этот VBR и настроить для него начальную операционную среду, как если бы BIOS обнаружил этот VBR на неразделенном носителе.
- ^ IP установлен в результате прыжка. CS может быть установлен в 0 либо путем выполнения дальнего перехода, либо путем явной загрузки значения регистра перед выполнением ближнего перехода. (Код x86, осуществляющий переход, не может определить, был ли использован ближний или дальний переход для его достижения [если только код, совершивший переход, отдельно не передает эту информацию каким-либо образом].)
- ^ Это не часть вышеупомянутого предложения, а естественное следствие ранее существовавших условий.
- ^ Например, редактор таблицы разделов PowerQuest (PTEDIT32.EXE), который работает в операционных системах Windows, по-прежнему доступен здесь: FTP-сайт Symantec .
Ссылки
[ редактировать ]- ^ Jump up to: а б с д «Поддержка Windows для жестких дисков объемом более 2 ТБ» . 1. Майкрософт . 26 июня 2013 г. 2581408. Архивировано из оригинала 27 апреля 2017 г. Проверено 28 августа 2013 г.
- ^ Jump up to: а б с Седори, Дэниел Б. (2004). «Таинственные байты (или байты диска/метки времени) основной загрузочной записи MS-Windows 95B, 98, 98SE и Me (MBR)» . Основные загрузочные записи . thestarman.pcministry.com. Архивировано из оригинала 24 августа 2017 г. Проверено 25 августа 2012 г.
- ^ Лукас, Майкл (2003). Абсолютный OpenBSD: Unix для практичных параноиков . п. 73. ИСБН 9781886411999 . Проверено 9 апреля 2011 г.
Каждая операционная система включает инструменты для управления разделами MBR. К сожалению, каждая операционная система обрабатывает разделы MBR по-своему.
- ^ Нортон, Питер ; Кларк, Скотт (2002). Новинка Питера Нортона «Внутри ПК» . Издательство Самс . стр. 360–361 . ISBN 0-672-32289-7 .
- ^ Грейвс, Майкл В. (2004). Руководство A+ по обслуживанию и ремонту оборудования ПК . Томсон Дельмар. п. 276. ИСБН 1-4018-5230-0 .
- ^ Эндрюс, Джин (2003). Обновление и ремонт с Джин Эндрюс . Технология курса Томсона. п. 646 . ISBN 1-59200-112-2 .
- ^ Босуэлл, Уильям (2003). Внутри Windows Server 2003 . Аддисон-Уэсли Профессионал . п. 13. ISBN 0-7357-1158-5 .
- ^ Смит, Родерик В. (2000). Руководство по мультизагрузочной настройке . Издательство Que . стр. 260–261 . ISBN 0-7897-2283-6 .
- ^ Брауэр, Андрис Эверт (22 апреля 2004 г.) [2000]. «Свойства таблиц разделов» . Типы разделов . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
Матиас [Р.] Пол пишет: «[…] PTS-DOS [использует] специальную запись пятого раздела перед остальными четырьмя записями в MBR и соответствующий загрузочный код MBR, поддерживающий AAP. […]»
- ^ Брауэр, Андрис Эверт (22 апреля 2004 г.) [2000]. «Свойства таблиц разделов» . Типы разделов . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
Некоторые OEM-системы, такие как AST DOS (тип
(Примечание. Таблицам разделов NEC MS-DOS 3.30 и AST MS-DOS с восемью записями предшествует подпись14hex
) и NEC DOS (тип24hex
) имели 8 записей разделов вместо 4 в своих секторах MBR. (Матиас Р. Пол).A55Ahex
в зачете 0x017C .) - ^ Седори, Дэниел Б. (18 мая 2007 г.) [2003]. «Заметки о различиях в одной OEM-версии DOS 3.30 MBR» . Основные загрузочные записи . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
Когда мы добавили разделы в эту таблицу NEC, первый из них был размещен по смещению. 0x01EE через 0x01FD , а следующая запись была добавлена прямо над ним. Таким образом, записи вставляются и перечисляются в обратном порядке по сравнению с обычной таблицей. Таким образом, если просмотреть такую таблицу с помощью редактора дисков или утилиты составления списка разделов, первая запись в таблице NEC из восьми записей будет показана как последняя (четвертая запись) в обычной таблице разделов.
(Примечание. Показана таблица разделов с 8 записями и отличия ее загрузочного кода от MS-DOS 3.30.) - ^ «Таблица разделов» . osdev.org. 18 марта 2017 г. [06 марта 2007 г.]. Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
- ^ Jump up to: а б с Системный BIOS для компьютеров IBM PC/XT/AT и совместимых устройств . Феникса Технический справочник . Аддисон-Уэсли . 1989. ISBN 0-201-51806-6 .
- ^ Брауэр, Андрис Эверт (2013) [1995]. «Список идентификаторов разделов для ПК» . Типы разделов . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
- ^ Jump up to: а б Вуд, Сибил (2002). Руководство по эксплуатации Microsoft Windows 2000 Server . Майкрософт Пресс . п. 18 . ISBN 978-0-73561796-4 .
- ^ «Введение в геометрию жесткого диска» . Технический сок . 6 декабря 2012 г. [08 августа 2011 г.]. Архивировано из оригинала 4 февраля 2013 г.
- ^ Козерок, Чарльз М. (17 апреля 2001 г.). «БИОС и жесткий диск» . Руководство для ПК . Архивировано из оригинала 17 июня 2017 г. Проверено 19 апреля 2013 г.
- ^ Смит, Роберт (26 июня 2011 г.). «Обход ограничений MBR» . Учебное пособие по GPT fdisk . Архивировано из оригинала 24 августа 2017 г. Проверено 20 апреля 2013 г.
- ^ «Более 2 ТиБ на MBR-диске» . superuser.com. 07.03.2013. Архивировано из оригинала 24 августа 2017 г. Проверено 22 октября 2013 г.
- ^ «Переход на жесткие диски расширенного формата с сектором 4 КБ» . Технический инсайт . Технология Сигейт . 2012. Архивировано из оригинала 24 августа 2017 г. Проверено 19 апреля 2013 г.
- ^ Калверт, Кельвин (16 марта 2011 г.). «Жесткие диски большой емкости WD AV-GP» (PDF) . Вестерн Диджитал . Проверено 20 апреля 2013 г.
- ^ Смит, Родерик В. (27 апреля 2010 г.). «Linux на дисках с секторами 4 КБ: Практические советы» . РазработчикWorks . ИБМ . Архивировано из оригинала 24 августа 2017 г. Проверено 19 апреля 2013 г.
- ^ Jump up to: а б «МБР (x86)» . OSDev Wiki . OSDev.org. 05.03.2012. Архивировано из оригинала 24 августа 2017 г. Проверено 20 апреля 2013 г.
- ^ Седори, Дэниел Б. (30 июля 2003 г.). «Основная загрузочная запись IBM DOS 2.00» . Царство Звездного Человека. Архивировано из оригинала 24 августа 2017 г. Проверено 22 июля 2011 г.
- ^ Сингх, Амит (25 декабря 2009 г.) [декабрь 2003 г.]. «Загрузка Mac OS X» . Внутреннее устройство Mac OS X: Книга . Проверено 22 июля 2011 г.
- ^ де Бойн Поллард, Джонатан (10 июля 2011 г.). «Процесс загрузки EFI» . Часто встречающиеся ответы . Архивировано из оригинала 24 августа 2017 г. Проверено 22 июля 2011 г.
- ^ Домш, Мэтт (22 марта 2005 г.) [19 декабря 2003 г.]. «Относительно: Улучшения EDD в RFC 2.6.0» . Список рассылки ядра Linux . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
- ^ «Windows может использовать синтаксис Signature() в файле BOOT.INI» . База знаний . Майкрософт .
- ^ Мактавиш (февраль 2014 г.). «Подпись диска MBR Vista» . Мультизагрузка: двойная и мультизагрузка с Vista . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
- ^ Руссинович, Марк (08 ноября 2011 г.). «Устранение конфликтов подписей дисков» . Блог Марка Руссиновича . Майкрософт . Архивировано из оригинала 24 августа 2017 г. Проверено 19 апреля 2013 г.
- ^ Jump up to: а б с Сакамото, Масахико (13 мая 2010 г.). «Почему BIOS загружает MBR в
0x7C00
в x86?" . Glamenv-Septzen.net. Архивировано из оригинала 24 августа 2017 г. Проверено 4 мая 2011 г. - ^ Jump up to: а б с д и ж Компьютерная корпорация Compaq ; Феникс Технологии Лтд .; Корпорация Intel (11 января 1996 г.). «Спецификация загрузки BIOS 1.01» (PDF) . 1.01. АКПИКА. Архивировано (PDF) из оригинала 24 августа 2017 г. Проверено 20 апреля 2013 г. [1]
- ^ Jump up to: а б Эллиотт, Дэвид Ф. (12 октября 2009 г.). «Почему «стандартный» MBR устанавливает SI?» . tgwbd.org . Архивировано из оригинала 24 августа 2017 г. Проверено 20 апреля 2013 г.
- ^ Jump up to: а б с Компьютерная корпорация Compaq ; Феникс Технологии Лтд .; Корпорация Intel (5 мая 1994 г.). «Спецификация Plug and Play BIOS 1.0A» (PDF) . 1,0А. Интел . Архивировано из оригинала (PDF) 24 августа 2017 г. Проверено 20 апреля 2013 г.
- ^ Пол, Матиас Р. (02 октября 1997 г.) [29 сентября 1997 г.]. «Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM — README.TXT и BOOT.TXT — краткое описание загрузки OpenDOS» . Архивировано из оригинала 4 октября 2003 г. Проверено 29 марта 2009 г. [2]
- ^ Пол, Матиас Р. (14 августа 2017 г.) [07 августа 2017 г.]. «Продолжение саги о Windows 3.1 в расширенном режиме на OmniBook 300» . MoHPC — Музей калькуляторов HP . Архивировано из оригинала 01 мая 2018 г. Проверено 1 мая 2018 г.
[…] SYS […] /O[:nnn] Переопределить загрузочный диск, сообщенный IPL (n=0..126, 128..254). […] Подготовка целевого диска... Выбор загрузочного сектора FAT12 CHS (требуется, чтобы IPL сообщала о загрузочном модуле). Рассматривается как дискета или супердискета (загрузочный диск 0). Запись нового загрузочного сектора... […]
(Примечание. SYS записывает загрузочные записи тома , а не основные загрузочные записи, но их интерфейс входящего регистра аналогичен (с расширениями), поскольку они оба могут быть изначально загружены базовой системой.) - ^ Эллиотт, Роберт (4 января 2010 г.). «Приложение гибридного загрузочного кода MBR EDD-4» (PDF) . Hewlett Packard , Технический комитет T13. е09127r3. Архивировано (PDF) из оригинала 24 августа 2017 г. Проверено 20 апреля 2013 г.
- ^ «FDISK/MBR перезаписывает главную загрузочную запись» . Поддерживать . 1. Майкрософт . 2011-09-23. 69013. Архивировано из оригинала 8 февраля 2017 г. Проверено 19 апреля 2013 г.
- ^ «sfdisk(8) — справочная страница Linux» . сайт die.net . 2013 [2007]. Архивировано из оригинала 24 августа 2017 г. Проверено 20 апреля 2013 г.
- ^ Браун, Ральф Д. (16 июля 2000 г.). «Список прерываний Ральфа Браунса (v61 html)» . Программное обеспечение Делори . Проверено 3 ноября 2016 г.
- ^ Браун, Ральф Д. (16 июля 2000 г.). «B-1302: INT 13 — ДИСК — ЧИТАТЬ СЕКТОР(Ы) В ПАМЯТЬ» . Список прерываний Ральфа Брауна (RBIL) (61-е изд.) . Проверено 3 ноября 2016 г. (Примечание. См. файл INTERRUP.B внутри архива «INTER61A.ZIP.)
Дальнейшее чтение
[ редактировать ]- Гилберт, Ховард (1 января 1996 г.) [1995]. «Разделы и тома» . Смазка и настройка ПК . Архивировано из оригинала 3 марта 2016 г.
- Найтс, Рэй (22 декабря 2004 г.) [16 декабря 2000 г.]. «Место Рэя» . MBR и загрузочные секторы Windows (включает дизассемблирование кода и объяснение процесса загрузки) . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г.
- Лэндис, Хейл (6 мая 2002 г.). «Основная загрузочная запись» . Как это работает . Архивировано из оригинала 1 июля 2014 г.
- Седори, Дэниел Б. (25 июня 2015 г.) [2007]. «MBR (основные загрузочные записи)» . Обнаружены загрузочные записи . Архивировано из оригинала 24 августа 2017 г. Проверено 24 августа 2017 г. [3] [4]