Главная загрузочная запись
Главная загрузочная запись (англ. master boot record, MBR) — код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах (чаще всего в самом первом) на жёстком диске или другом устройстве хранения информации.
MBR содержит небольшой фрагмент исполняемого кода, таблицу разделов (partition table) и специальную сигнатуру.
Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС происходит на более поздних этапах алгоритма.
В процессе запуска компьютера, после окончания начального теста (Power-on self-test — POST), Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.
| Адрес | Содержимое |
|---|---|
| 0x0000 | Код загрузчика |
| 0x01B8 | 4-байтная сигнатура диска (только в Windows 2000, XP [1], но не в Windows 95/98 [2]) |
| 0x01BE | Четыре 16-байтных записи таблицы основных разделов (только схема таблицы основных разделов MBR) |
| 0x01FE | 2-байтная сигнатура MBR (55AA16) |
Содержание |
[править] Роль и место MBR в загрузке компьютера (для архитектуры x86)
В процессе загрузки компьютера x86 вначале всегда отрабатывается BIOS. На этой стадии, кроме тестирования и инициализации оборудования компьютера, происходит также и выбор устройства, с которого будет происходить дальнейшая загрузка. Это может быть дискета, жёсткий диск, сетевой ресурс, встроенное ПЗУ или любое иное устройство (алгоритм выбора загрузочного устройства может быть различным и зависит от реализации BIOS). После выбора загрузочного устройства управление всей дальнейшей загрузкой BIOS полностью передаёт этому устройству.
В случае, если устройство имеет только один раздел (как, например, дискета или сетевая загрузка), то выбор однозначен, и загрузка продолжается сразу с этого устройства. Однако, если устройство содержит несколько разделов, каждый из которых потенциально может быть загрузочным (как, например, в случае жёстких дисков), то возникает неопределённость: с какого именно раздела производить загрузку. Для разрешения неоднозначности по выбору раздела было предложено вынести этот вопрос из ведения BIOS и передать этот выбор самому устройству. Возникла идея использовать для этого небольшую программу, записанную на самом носителе, которая и осуществляла бы данный выбор. Так появилась концепция MBR.
Таким образом, потенциальное наличие нескольких загрузочных разделов, среди которых необходимо осуществить выбор — это ключевой момент в необходимости появления и отработки MBR. Для устройств с единственным (или однозначно заданным) загрузочным разделом концепция MBR лишена смысла и не используется.
[править] Развитие MBR
Иногда в MBR кроме основной функции (выбора раздела) включаются также и другие функции, например, авторизация. Но это уже расширение и дополнение к основной функции и задаче MBR. Такие системы не получили широкого распространения.
[править] Другие (не x86) системы
В связи с тем, что на других системах применяются иные архитектурные решения (начиная от активации железа и заканчивая загрузкой ОС), концепция MBR может быть к ним неприменима.
[править] Стандартизация MBR
Утверждённого стандарта на структуру MBR не существует, однако, есть «сложившиеся традиции», которых придерживаются большинство MBR от разных производителей.
[править] Иные форматы MBR
Загрузчики, отличные от стандартных Windows-загрузчиков, могут использовать всё пространство между MBR и первым разделом (около 32 кб) для собственных целей. В таких случаях под MBR понимают весь загрузочный код, а для выделения именно первых 512 байт говорят, что они расположены в MBS (Master Boot Sector) — главном загрузочном секторе.
Для операционных систем Microsoft понятия MBR и MBS совпадают, так как вся MBR содержится в MBS, хотя это не совсем правильно, так как под MBR подразумевают данные, а под MBS — физический сектор.
[править] MBR от Microsoft (MS DOS и MS Windows)
[править] Структура MBR
Структура MBR от Microsoft занимает один сектор (512 байт):
- область кода и служебных данных (446 байт)
- область partition table (4 записи по 16 байт)
- Сигнатура 55AAh (2 байта)
Содержание «Области кода и служебных данных» зависит от версии DOS и Windows, но функции остаются те же — поиск, загрузка и запуск нужного загрузочного сектора[1][2][3].
[править] Алгоритм работы кода MBR от Microsoft
[править] BIOS (до MBR)
- BIOS проводит начальную инициализацию оборудования («железа»)
- BIOS определяет, с какого устройства производить дальнейшую загрузку: дискета, флеш-накопитель, жёсткий диск и т. д. (выбор устройства зависит от версии и от настроек BIOS)
- [в данном описании рассматривается только случай загрузки с жесткого диска]
- BIOS считывает один сектор (512 байт), который находится по адресу: «цилиндр 0, головка 0, сектор 1», и помещает его в область памяти по адресу 0000:7c00
- BIOS проверяет, что этот сектор оканчивается сигнатурой 55ААh
- [если это не так, то управление возвращается обратно в BIOS]
- BIOS передаёт управление по адресу 0000:7c00 (то есть сектору MBR)
предварительно записав в регистр DL номер диска с которого этот сектор считан. Для первого жесткого диска это значение будет равно 0x80 ( 128 в десятичной системе ), для дисковода A: равно 0.
[править] MBR
Выбор загрузочного раздела и проверка целостности MBR:
- MBR копирует себя с адреса 0000:7c00 на адрес 0000:0600 (освобождая место для будущей загрузки уже собственно загрузчика ОС)
- MBR просматривает по очереди все записи о разделах и ищет первую запись об «активном» (== «загрузочном») разделе (то есть ищет раздел, отмеченный как 80h)
- В случае успеха (раздел, помеченный как 80h — найден) MBR запоминает номер этого раздела
- [если просмотрены все 4 записи и не найден раздел, помеченный как 80h, то вызывается INT 18h. Это возвращает управление обратно в BIOS, что может приводить либо к загрузке BASIC, либо к повторной попытке загрузить систему с диска, либо к перезагрузке компьютера — в зависимости от версии и реализации BIOS]
- MBR просматривает все оставшиеся записи и проверяет, что это единственный активный раздел (что больше разделов, помеченных 80h, на данном физическом диске не существует)
- [если находятся другие разделы, помеченные 80h, то MBR выводит сообщение об ошибке (обычно это что-то типа «Invalid partition table»), после чего система зависает в бесконечном цикле, из которого можно выйти только перезагрузкой компьютера]
- MBR проверяет, что в данном поле для всех 4-х разделов нет иных значений, кроме «00h» и «80h»
- [если находятся разделы, помеченные значением, отличным от 00h или 80h, то MBR выводит сообщение об ошибке («Invalid partition table»), система зависает, требуется перезагрузка компьютера]
На этом заканчивается проверка MBR и начинается подготовка к загрузке ОС:
- MBR считывает первый сектор логического диска, помеченного как «загрузочный» и помещает этот сектор по адресу 0000:7c00
- MBR проверяет, что данный сектор заканчивается сигнатурой 55ААh
- [если этой сигнатуры в этом месте нет, то выводится сообщение «Missing operating system» и компьютер подвисает, требуется перезагрузка]
- MBR передает управление по адресу 0000:7c00 (то есть загрузочному сектору выбранного логического раздела диска)
[править] Загрузочный сектор логического диска (после MBR)
Загрузочный сектор зависит от типа файловой системы на логическом разделе диска и содержит код, выполняющий нахождение и загрузку собственно операционной системы на данном типе файловой системы.
[править] Структура MBR
| Смещение | Длина, байт | Описание |
|---|---|---|
| 000h | 446 | Код загрузчика |
| 1BEh | 64 | Таблица разделов |
| 16 | Раздел 1 | |
| 1CEh | 16 | Раздел 2 |
| 1DEh | 16 | Раздел 3 |
| 1EEh | 16 | Раздел 4 |
| 1FEh | 2 | Сигнатура (55h AAh) |
[править] Код загрузчика
После завершения процедуры POST в ОЗУ по адресу 0x0000:0x7c00 записывается код загрузчика после чего ему передается управление. Задача загрузчика — проанализировать таблицу разделов жёсткого диска, затем либо передать управление загрузочному коду активного раздела, либо загрузить в RAM ядро операционной системы и передать ему управление.
[править] Таблица разделов
В таблице разделов хранится информация о типе раздела и его расположении на жёстком диске.
[править] Сигнатура
Последние два байта 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 | Количество секторов раздела |
[править] Признак активности разделов
Признак активности раздела — признак, обозначающий возможность загрузки операционной системы с данного раздела. Для стандартных загрузчиков может принимать следующие значения:
- 80h — раздел является активным;
- 00h — раздел является неактивным;
- другие значения являются ошибочными и игнорируются.
[править] Начало раздела / Конец раздела
Координаты начала и конца раздела в CHS-формате (цилиндр, головка, сектор). CHS не позволяет выполнять адресацию более чем к 7,8 ГБ данных, и для адресации к разделам, находящимся за пределами 7,8 ГБ, используется LBA-адресация.
[править] Код типа раздела
Код файловой системы, используемой на данном разделе.
| Код | Тип раздела |
|---|---|
| 00h | Пустая запись (свободное место) |
| 01h | FAT-12 |
| 02h | XENIX root |
| 03h | XENIX usr |
| 04h | FAT-16 до 32 Мбайт |
| 05h | Расширенный раздел |
| 06h | FAT-16 свыше 32 Мбайт |
| 07h | Windows NT NTFS (и некоторые другие - тип определяется по
содержимому загрузочной записи) |
| 08h | AIX |
| 09h | AIX загрузочный |
| 0Ah | OS/2 Boot менеджер |
| 0Bh | FAT-32 |
| 0Ch | FAT-32 с использованием LBA |
| 0Eh | FAT-16 с использованием LBA (VFAT) |
| 0Fh | Расширенный раздел LBA (то же что и 05h, с использованием LBA)[4] |
| 10h | OPUS |
| 11h | Скрытый FAT-32 |
| 12h | Compaq |
| 14h | Скрытый FAT-16 < 32МБ |
| 16h | Скрытый FAT-16 |
| 17h | Скрытый раздел HPFS/NTFS |
| 18h | AST SmartSleep |
| 1Bh | Скрытый раздел FAT-32 (см. 0Bh) |
| 1Ch | Скрытый раздел FAT-32 с использованием LBA (см. 0Ch) |
| 1Eh | Скрытый раздел FAT-16 LBA (VFAT) (см. 06h) |
| 24h | NEC DOS |
| 27h | Скрытый NTFS |
| 39h | Plan 9 |
| 3Ch | Partition Magic |
| 40h | Venix 80286 |
| 41h | PPC PReP Boot |
| 42h | SFS |
| 4Dh | QNX4.x |
| 4Eh | QNX4.x 2-я часть |
| 4Fh | QNX4.x 3-я часть |
| 50h | OnTrack DM |
| 51h | OnTrack DM6 Aux |
| 52h | CP/M |
| 53h | OnTrack DM6 Aux |
| 54h | OnTrackDM6 |
| 55h | EZ-Drive |
| 56h | Golden Bow |
| 5Ch | Priam Edisk |
| 61h | SpeedStor |
| 62h | GNU HURD |
| 82h | Linux swap |
| 83h | Linux |
| 85h | Linux extended(расширенный) |
| 86h | Раздел FAT-16 stripe-массива Windows NT |
| 87h | Раздел NTFS stripe-массива Windows NT |
| 93h | Amoeba |
| 94h | Amoeba BBT |
| A5h | FreeBSD |
| A6h | OpenBSD |
| A7h | NeXTSTEP |
| A9h | NetBSD |
| B6h | Зеркальный master-раздел FAT-16 Windows NT |
| B7h | Зеркальный master-раздел NTFS Windows NT |
| BEh | Solaris загрузочный |
| BFh | Solaris |
| С6h | Зеркальный slave-раздел FAT-16 Windows NT |
| С7h | Зеркальный slave-раздел NTFS Windows NT |
| DAh | Данные - не файловая система |
| DEh | Dell Utility |
| EEh | GPT |
| FDh | Автоопределение |
| FEh | LANstep |
| FFh | BBT |
В случае, если используется расширенный раздел, то координаты начала раздела указывают на EBR.
| Смещение | Длина | Описание |
|---|---|---|
| 1BEh | 16 | Указатель на раздел |
| 1CEh | 16 | Указатель на следующий EBR |
| 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
[править] См. также
- Логический диск
- Файловая система
- Раздел диска
- Загрузчик операционной системы
- Загрузочный сектор
- Начальная загрузка компьютера
- GUID (таблица разделов)
[править] Примечания
- ↑ Daniel B. Sedory An Examination of the Standard MBR (DOS 3.30 - Win 95A) (англ.). Архивировано из первоисточника 25 августа 2011. Проверено 23 июля 2009.
- ↑ Daniel B. Sedory An Examination of the Standard MBR (Win 95B - Win ME) (англ.). Архивировано из первоисточника 25 августа 2011. Проверено 23 июля 2009.
- ↑ Daniel B. Sedory An Examination of the Standard MBR (Win 2k - Win XP) (англ.). Архивировано из первоисточника 25 августа 2011. Проверено 23 июля 2009.
- ↑ MS-DOS Partitioning Summary (англ.). Microsoft, Inc.. Архивировано из первоисточника 12 декабря 2011. Проверено 12 декабря 2011.

