Главная загрузочная запись

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
GNU GRUB i MBR

Главная загрузочная запись (англ. master boot record, MBR) — код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах (чаще всего в самом первом) на жёстком диске или другом устройстве хранения информации.

MBR содержит небольшой фрагмент исполняемого кода, таблицу разделов (partition table) и специальную сигнатуру.

Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС происходит на более поздних этапах алгоритма.

В процессе запуска компьютера, после окончания начального теста (Power-on self-test — POST), Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.

Структура главной загрузочной записи (MBR)
Адрес Содержимое
0000h Код загрузчика
01B8h 4-байтная сигнатура диска (только в Windows 2000, XP [1], но не в Windows 95/98 [2])
01BEh Четыре 16-байтных записи таблицы основных разделов (только схема таблицы основных разделов MBR)
01FEh 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 байт);
  • cигнатура 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 номер диска, с которого этот сектор считан. Для первого жесткого диска это значение будет равно 80h (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[править | править исходный текст]

Структура главной загрузочной записи (MBR)
Смещение Длина, байт Описание
0000h 446 Код загрузчика
01BEh 64 Таблица разделов
16 Раздел 1
01CEh 16 Раздел 2
01DEh 16 Раздел 3
01EEh 16 Раздел 4
01FEh 2 Сигнатура (55h AAh)

Код загрузчика[править | править исходный текст]

После завершения процедуры POST в ОЗУ по адресу 0000:7C00 записывается код загрузчика, после чего ему передается управление. Задача загрузчика — проанализировать таблицу разделов жёсткого диска, затем либо передать управление загрузочному коду активного раздела, либо загрузить в 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.

Структура 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

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]