Главная загрузочная запись (англ.master boot record, MBR) — код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах (чаще всего в самом первом) на жёстком диске или другом устройстве хранения информации. Применялась с 1983 года (начиная с PC DOS 2.0) до широкого внедрения UEFI и схемы GPT в 2010-х.
Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС (происходит на более поздних этапах алгоритма).
В процессе запуска компьютера после окончания начальной проверки (Power-on self-test — POST) Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.
В процессе загрузки компьютера x86 вначале всегда отрабатывается BIOS. На этой стадии, кроме тестирования и инициализации оборудования компьютера, происходит также и выбор устройства, с которого будет происходить дальнейшая загрузка. Это может быть дискета, жёсткий диск, сетевой ресурс, встроенное ПЗУ или любое иное устройство (алгоритм выбора загрузочного устройства может быть различным и зависит от реализации BIOS). После выбора загрузочного устройства BIOS полностью передаёт этому устройству управление всей дальнейшей загрузкой.
В случае, если устройство имеет только один раздел (как, например, дискета или сетевая загрузка), выбор однозначен, и загрузка продолжается сразу с этого устройства. Однако, если устройство содержит несколько разделов, каждый из которых потенциально может быть загрузочным (как, например, в случае жёстких дисков), то возникает неопределённость: с какого именно раздела производить загрузку. Для разрешения неоднозначности по выбору раздела было предложено вынести этот вопрос из ве́дения BIOS и передать этот выбор самому устройству. Возникла идея использовать для этого небольшую программу, записанную на самом носителе, которая и осуществляла бы данный выбор. Так появилась концепция MBR.
Таким образом, потенциальное наличие нескольких загрузочных разделов, среди которых необходимо осуществить выбор — это ключевой момент в необходимости появления и отработки MBR. Для устройств с единственным (или однозначно заданным) загрузочным разделом концепция MBR лишена смысла и не используется.
Развитие MBR
Иногда в MBR, кроме основной функции (выбора раздела), включаются также и другие функции, например, авторизация. Но это уже расширение и дополнение к основной функции и задаче MBR. Такие системы не получили широкого распространения.
Другие (не x86) системы
В связи с тем, что на других системах применяются иные архитектурные решения (начиная от активации «железа» и заканчивая загрузкой ОС), концепция MBR может быть к ним неприменима.
Утверждённого стандарта на структуру MBR не существует, однако, есть «сложившиеся традиции», которых придерживается большинство MBR от разных производителей.
Наиболее распространённый формат MBR
Наиболее распространённый формат MBR — это формат Windows. В начале загрузочной записи стоит название текущей файловой системы (например, FAT32 или NTFS). Далее содержится информация о четырёх разделах диска, ссылка на загрузчик и сигнатура 0x55AAh. В случае отсутствия загрузчика, например, в Windows XP выдаётся сообщение «NTLDR is missing / compressed» (в зависимости от ситуации — загрузчик удалён или сжат). «Press CTRL+ALT+DEL to restart.» Также если диск нечитаемый, выдаётся сообщение «A disk read error occurred. Press CTRL+ALT+DEL to restart». В зависимости от типа загрузчика выдаются разные сообщения.
Иные форматы MBR
Загрузчики, отличные от стандартных Windows-загрузчиков, могут использовать всё пространство между MBR и первым разделом (около 32 кБ; 1-й-62-й секторы) для собственных целей. В таких случаях под MBR понимают весь загрузочный код, а для выделения именно первых 512 байт говорят, что они расположены в MBS (Master Boot Sector) — главном загрузочном секторе.
Для операционных систем Microsoft понятия MBR и MBS совпадают, так как вся MBR содержится в MBS, хотя это не совсем правильно, так как под MBR подразумевают данные, а под MBS — физический сектор.
Алгоритм загрузки компьютера с использованием MBR
BIOS (до MBR)
BIOS проводит начальную инициализацию оборудования (POST).
BIOS определяет, с какого устройства производить дальнейшую загрузку: дискета, флеш-накопитель, жёсткий диск и т. д. (выбор устройства зависит от версии и от настроек BIOS)
[в данном описании рассматривается только случай загрузки с жёсткого диска].
BIOS считывает один сектор (512 байт), то есть непосредственно MBR, который находится по адресу: «цилиндр 0, головка 0, сектор 1»[1], и помещает его в область памяти по физическому адресу 0x7C00.
BIOS проверяет, что этот сектор оканчивается сигнатурой 0АА55h (байты 55h,0AAh).
[если это не так, то управление возвращается обратно в BIOS].
BIOS передаёт управление по физическому адресу 0x7C00 (то есть сектору MBR), предварительно записав в регистр DL номер диска, с которого этот сектор считан. Для первого жёсткого диска это значение будет равно 80h (128 в десятичной системе), для дисковода A: равно 0. Кроме того, Plug-n-Play BIOS может записать в регистры ES:DI указатель на структуру «$PnP».
MBR
Выбор загрузочного раздела и проверка целостности MBR:
MBR копирует себя на другой адрес, чтобы освободить место для загрузчика ОС (к примеру, MBR фирмы Microsoft копирует себя на адрес 0000:0600).
MBR просматривает по очереди все записи о разделах и ищет первую запись об «активном» («загрузочном») разделе (то есть ищет раздел, отмеченный как 80h).
В случае успеха (раздел, помеченный как 80h — найден) MBR запоминает номер этого раздела. Если просмотрены все 4 записи и не найден раздел, помеченный как 80h, то вызывается INT 18h (отображается сообщение об ошибке посредством вызова BIOS программного прерывания 18h). Это возвращает управление обратно в BIOS, что может приводить либо к загрузке BASIC, либо к повторной попытке загрузить систему с диска, либо к перезагрузке компьютера — в зависимости от версии и реализации BIOS.
MBR просматривает все оставшиеся записи и проверяет, что это единственный активный раздел (что больше разделов, помеченных 80h, на данном физическом диске не существует). Если находятся другие разделы, помеченные 80h (и/или хотя бы один раздел содержит неправильную метку), то MBR выводит сообщение об ошибке (обычно это что-то типа «Invalid partition table»), после чего система зависает в бесконечном цикле, из которого можно выйти только перезагрузкой компьютера. На этом заканчивается проверка MBR и начинается подготовка к загрузке ОС.
MBR считывает первый секторлогического диска (раздела) (VBR — Volume Boot Record, или Volume Boot Sector), помеченного как «загрузочный» (80h), и помещает этот сектор по физическому адресу 0x7C00.
MBR проверяет, что данный сектор заканчивается сигнатурой 55AAh. Если этой сигнатуры в этом месте нет, то выводится сообщение «Missing operating system» и компьютер подвисает, требуется перезагрузка.
MBR передаёт управление загрузочному сектору выбранного раздела диска.
Загрузочный сектор логического диска (VBR) (после MBR)
Загрузочный сектор зависит от типа файловой системы на логическом разделе диска и содержит код, выполняющий нахождение и загрузку собственно операционной системы на данном типе файловой системы.
После завершения процедуры POST в ОЗУ по физическому адресу 0x7C00 записывается код загрузчика (первые 446 байт из нулевого сектора диска), после чего ему передаётся управление. Задача этого кода — проанализировать таблицу разделов жёсткого диска, затем передать управление второму загрузочному коду, который может находиться или в начале активного раздела, или на специальной области диска (эта область не занята файловыми системами и обычно является группой секторов № 1-№ 62, разделы на диске обычно начинаются с сектора № 63). Второй загрузчик уже умеет читать хотя бы одну файловую систему, и его задача — передать управление файлам из файловой системы ОС для запуска ОС.
Примеры:
Загрузчик Windows поступает первым способом: он передаёт управление второму загрузчику NTLDR (bootmgr, начиная с Windows Vista/Server 2008), который находится в начале активного Windows-раздела. Далее второй загрузчик обеспечивает поддержку файловой системы и запускает необходимые для дальнейшей загрузки ОС файлы.
Загрузчик GRUB (нашедший популярность в Linux-дистрибутивах) использует второй способ: он передаёт управление второму загрузчику, который расположен в группе секторов № 1-№ 62. Второй загрузчик ищет корневой Linux-раздел, а на этом разделе ищет файлы конфигурации GRUB (и модули GRUB) для отображения GRUB-меню. При выборе какого-либо пункта в GRUB-меню GRUB действует согласно файлу конфигурации для этого пункта (например, в случае с дистрибутивами Linux в ОЗУ копируется Linux-ядро с initrd и управление передаётся ядру). Копия первого загрузчика GRUB (446 байт из нулевого сектора диска) находится в файле boot.img, а копия второго загрузчика GRUB (группа секторов № 1 — № 62) находится в файле core.img (собирается при установке GRUB с учётом файловой системы корневого раздела и других факторов).
Таблица разделов
В таблице разделов хранится информация о типе раздела и его расположении на жёстком диске.
Сигнатура
Последние два байта MBR называются сигнатурой. Значение этих байтов должно быть 55h AAh. В случае, если это не так, запись считается некорректной.
Структура описания раздела
Структура описания раздела
Смещение
Длина, байт
Описание
00h
1
Признак активности раздела
01h
1
Начало раздела — головка
02h
1
Начало раздела — сектор (биты 0—5), цилиндр (биты 6, 7)
03h
1
Начало раздела — цилиндр (старшие биты 8, 9 хранятся в байте номера сектора)
04h
1
Код типа раздела
05h
1
Конец раздела — головка
06h
1
Конец раздела — сектор (биты 0—5), цилиндр (биты 6, 7)
07h
1
Конец раздела — цилиндр (старшие биты 8, 9 хранятся в байте номера сектора)
08h
4
Смещение первого сектора
0Ch
4
Количество секторов раздела
Признак активности раздела
Признак активности раздела показывает, возможно ли загрузить операционную систему с данного раздела. Для стандартных загрузчиков может принимать такие значения:
8016 — раздел активен;
0016 — раздел неактивен;
другие значения запрещены.
Начало раздела / Конец раздела
Координаты начала и конца раздела в CHS-формате (цилиндр, головка, сектор). CHS не позволяет выполнять адресацию более чем к 7,8 ГБ данных, и для адресации к разделам, находящимся за пределами 7,8 ГБ, используется LBA-адресация.
Код типа раздела
Код файловой системы, используемой на данном разделе.
Коды типов разделов
Код
Тип раздела
00h
Пустая запись (свободное место)
01h
FAT-12 (если это логический раздел или раздел расположен в первых 32 мегабайтах диска, иначе используется код 06h)
02h
XENIX root
03h
XENIX usr
04h
FAT-16 до 32 Мбайт (если раздел первичный, то должен находиться в первых физических 32 Мб диска, иначе используется код 06h)
05h
Расширенный раздел
06h
FAT-16B, а также FAT-16, не попадающий под условия кода 04h и FAT-12, не попадающий под условия кода 01h
07h
IFS, HPFS, NTFS, exFAT (и некоторые другие — тип определяется по содержимому загрузочной записи)
08h
AIX
09h
AIX загрузочный
0Ah
OS/2 Boot-менеджер, OPUS
0Bh
FAT-32
0Ch
FAT-32X (FAT-32 с использованием LBA)
0Dh
Зарезервирован
0Eh
FAT-16X (FAT-16 с использованием LBA) (VFAT)
0Fh
Расширенный раздел LBA (то же что и 05h, с использованием LBA)[2]
10h
OPUS
11h
Скрытый FAT (аналогичен коду 01h)
12h
Compaq, Сервисный раздел
14h
Скрытый FAT (аналогичен коду 04h)
15h
Скрытый расширенный раздел (аналогичен коду 05h)
16h
Скрытый FAT (аналогичен коду 06h)
17h
Скрытый раздел HPFS/NTFS/IFS/exFAT
18h
AST SmartSleep
19h
OFS1
1Bh
Скрытый раздел FAT-32 (см. 0Bh)
1Ch
Скрытый раздел FAT-32X (см. 0Ch)
1Eh
Скрытый раздел FAT-16X (VFAT) (см. 0Eh)
1Fh
Скрытый расширенный раздел LBA (см. 0Fh)
20h
OFS1
21h
FSo2
22h
Расширенный раздел FS02
24h
NEC DOS
25h
Windows Mobile IMGFS
27h
Скрытый NTFS (Раздел восстановления системы)
28h
Зарезервирован для FAT-16+
29h
Зарезервирован для FAT-32+
2Ah
AFS (AthFS)
35h
JFS
38h
THEOS 3.2
39h
Plan 9
3Ah
THEOS 4
3Bh
Расширенный раздел THEOS 4
3Ch
Partition Magic, NetWare
3Dh
Скрытый раздел NetWare
40h
Venix 80286, PICK R83
41h
Старый Linux/Minix, PPC PReP Boot
42h
Старый своп Linux, SFS, раздел на динамическом диске в Windows (Dynamic Disk)
43h
Старый Linux
4Ah
ALFS
4Ch
A2 (Aos)
4Dh
QNX4.x
4Eh
QNX4.x 2-я часть
4Fh
QNX4.x 3-я часть
50h
OnTrack DM (только чтение)
51h
OnTrack DM6 (чтение и запись)
52h
CP/M
53h
OnTrack DM6 Aux3
54h
OnTrack DM6 DDO
55h
EZ-Drive
56h
Golden Bow
56h
Novell VNDI
5Ch
Priam Edisk
61h
SpeedStor
62h
GNU HURD
63h
UNIX
64h — 69h
NetWare
77h
VNDI, M2FS, M2CS
78h
XOSL
7Fh
Данный код зарезервирован для исследовательских или учебных проектов
Координаты начала раздела в LBA-координатах. Позволяет выполнять адресацию до 2 ТБ данных.
Восстановление MBR
Если каким-либо образом была потеряна MBR, то её можно восстановить специальными утилитами (например, TestDisk), которая «просмотрит» весь носитель информации и создаст таблицу разделов.
Пример кода создания резервной копии MBR в unix-подобных системах для диска sda:
KB114841 (неопр.). Microsoft Windows XP Support/ Windows NT Boot Process and Hard Disk Constraints. Microsoft Knowledge Base. Дата обращения: 27 декабря 2015.