Главная загрузочная запись
Главная загрузочная запись (англ. master boot record, MBR) — код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах (чаще всего в самом первом) на жёстком диске или другом устройстве хранения информации. Применялась с 1983 года (начиная с PC DOS 2.0) до широкого внедрения UEFI и схемы GPT в 2010-х.
MBR содержит небольшой фрагмент исполняемого кода, таблицу разделов диска (англ. partition table) и специальную сигнатуру.
Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС (происходит на более поздних этапах алгоритма).
В процессе запуска компьютера после окончания начального теста (Power-on self-test — POST) Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.
Роль и место MBR в загрузке компьютера (для архитектуры x86)
В процессе загрузки компьютера x86 вначале всегда отрабатывается BIOS. На этой стадии, кроме тестирования и инициализации оборудования компьютера, происходит также и выбор устройства, с которого будет происходить дальнейшая загрузка. Это может быть дискета, жёсткий диск, сетевой ресурс, встроенное ПЗУ или любое иное устройство (алгоритм выбора загрузочного устройства может быть различным и зависит от реализации BIOS). После выбора загрузочного устройства BIOS полностью передаёт этому устройству управление всей дальнейшей загрузкой.
В случае, если устройство имеет только один раздел (как, например, дискета или сетевая загрузка), выбор однозначен, и загрузка продолжается сразу с этого устройства. Однако, если устройство содержит несколько разделов, каждый из которых потенциально может быть загрузочным (как, например, в случае жёстких дисков), то возникает неопределённость: с какого именно раздела производить загрузку. Для разрешения неоднозначности по выбору раздела было предложено вынести этот вопрос из ве́дения BIOS и передать этот выбор самому устройству. Возникла идея использовать для этого небольшую программу, записанную на самом носителе, которая и осуществляла бы данный выбор. Так появилась концепция MBR.
Таким образом, потенциальное наличие нескольких загрузочных разделов, среди которых необходимо осуществить выбор — это ключевой момент в необходимости появления и отработки MBR. Для устройств с единственным (или однозначно заданным) загрузочным разделом концепция MBR лишена смысла и не используется.
Развитие MBR
Иногда в MBR, кроме основной функции (выбора раздела), включаются также и другие функции, например, авторизация. Но это уже расширение и дополнение к основной функции и задаче MBR. Такие системы не получили широкого распространения.
Другие (не x86) системы
В связи с тем, что на других системах применяются иные архитектурные решения (начиная от активации «железа» и заканчивая загрузкой ОС), концепция MBR может быть к ним неприменима.
Стандартизация 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 — физический сектор.
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)
Загрузочный сектор зависит от типа файловой системы на логическом разделе диска и содержит код, выполняющий нахождение и загрузку собственно операционной системы на данном типе файловой системы.
Структура MBR
Смещение | Длина, байт | Описание | |
---|---|---|---|
0000h | 446 | Код загрузчика | |
01BEh | 16 | Раздел 1 | Таблица разделов |
01CEh | 16 | Раздел 2 | |
01DEh | 16 | Раздел 3 | |
01EEh | 16 | Раздел 4 | |
01FEh | 2 | Сигнатура (55h AAh) | |
Код загрузчика
После завершения процедуры POST в ОЗУ по физическому адресу 0x7C00 записывается код загрузчика (первые 446 байт из нулевого сектора диска), после чего ему передаётся управление. Задача этого кода — проанализировать таблицу разделов жёсткого диска, затем передать управление второму загрузочному коду, который может находиться или в начале активного раздела, или на специальной области диска (эта область не занята файловыми системами и обычно является группой секторов № 1-№ 62, разделы на диске обычно начинаются с сектора № 63). Второй загрузчик уже умеет читать хотя бы одну файловую систему, и его задача — передать управление файлам из файловой системы ОС для запуска ОС.
Примеры:
- Загрузчик Windows поступает первым способом: он передает управление второму загрузчику, который находится в начале активного 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 | Данный код зарезервирован для исследовательских или учебных проектов |
80h | MINIX (старый) |
81h | MINIX |
82h | Linux swap, Sun Solaris (старый) |
83h | Linux |
85h | Linux extended (расширенный) |
86h | Раздел FAT-16 stripe-массива Windows NT |
87h | Раздел NTFS/HPFS stripe-массива Windows NT |
8Eh | Раздел LVM |
93h | Amoeba, скрытый Linux (см. код 83h) |
94h | Amoeba BBT |
94h | ISO-9660 |
9Eh | ForthOS |
A5h | Раздел гибернации |
A5h | NetBSD (старый), FreeBSD, BSD/386 |
A6h | OpenBSD |
A7h | NeXTSTEP |
A8h | Apple Darwin, Mac OS X UFS |
A9h | NetBSD |
AFh | Mac OS X HFS и HFS+, ShangOS |
B1h | QNX6.x |
B2h | QNX6.x |
B3h | QNX6.x |
B6h | Зеркальный master-раздел FAT-16 Windows NT |
B7h | Зеркальный master-раздел NTFS/HPFS Windows NT |
BEh | Solaris 8 загрузочный |
BFh | Solaris |
C2h | Скрытый Linux |
C3h | Скрытый своп Linux |
C6h | Зеркальный slave-раздел FAT-16 Windows NT |
C7h | Зеркальный slave-раздел NTFS Windows NT |
CDh | Дамп памяти |
D8h | CP/M-86 |
DAh | Данные — не файловая система |
DBh | CP/M-86 |
DDh | Скрытый дамп памяти |
DEh | Dell Utility |
EBh | BFS |
ECh | SkyOS |
EDh | Гибридный GPT |
EEh | GPT |
EFh | Системный раздел UEFI |
F7h | EFAT, SolidState |
FBh | VMFS |
FCh | Своп VMFS |
FEh | LANstep, PS/2 IML |
FFh | XENIX BBT |
В случае, если используется расширенный раздел, координаты начала раздела указывают на EBR.
Смещение | Длина | Описание |
---|---|---|
1BEh | 16 | Указатель на раздел |
1CEh | 16 | Указатель на следующий EBR |
1DEh | 32 | Не используется (должно быть заполнено нулями)[3] |
1FEh | 2 | Сигнатура (55h AAh) |
Формат указателей аналогичен MBR.
Смещение первого сектора
Координаты начала раздела в LBA-координатах. Позволяет выполнять адресацию до 2 ТБ данных.
Восстановление MBR
Если каким-либо образом была потеряна MBR, то её можно восстановить специальными утилитами (например, TestDisk), которая «просмотрит» весь носитель информации и создаст таблицу разделов.
Пример кода создания резервной копии MBR в unix-подобных системах для диска sda:
dd if=/dev/sda of=mbr.bin bs=512 count=1
Восстановление загрузчика и таблицы разделов:
dd if=mbr.bin of=/dev/sda bs=512 count=1
Восстановление только загрузчика:
dd if=mbr.bin of=/dev/sda bs=446 count=1
См. также
Примечания
- Здесь указан адрес в адресации CHS, в адресации LBA он соответствует сектору с номером 0.
- MS-DOS Partitioning Summary (англ.). Microsoft, Inc.. Дата обращения: 12 декабря 2011. Архивировано 12 декабря 2011 года.
- Изначально планировалось разместить здесь ещё два указателя на раздел, но это так и не было реализовано.
Ссылки
- KB114841 . Microsoft Windows XP Support/ Windows NT Boot Process and Hard Disk Constraints. Microsoft Knowledge Base. Дата обращения: 27 декабря 2015.
- Главная загрузочная запись — Master Boot Record (MBR)
- Спецификация «BIOS Boot Specification» от Intel, Phoenix, Compaq (англ.)