WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
GNU GRUB в MBR

Главная загрузочная запись (англ. 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-загрузчиков, могут использовать всё пространство между MBR и первым разделом (около 32 кБ; 1-й–63-й секторы) для собственных целей. В таких случаях под 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»[lower-alpha 1], и помещает его в область памяти по физическому адресу 0x7C00.
  • BIOS проверяет, что этот сектор оканчивается сигнатурой 55ААh
[если это не так, то управление возвращается обратно в BIOS].
  • BIOS передаёт управление по физическому адресу 0x7C00 (то есть сектору MBR), предварительно записав в регистр DL номер диска, с которого этот сектор считан. Для первого жёсткого диска это значение будет равно 80h (128 в десятичной системе), для дисковода A: равно 0. Кроме того, Plug-n-Play BIOS может записать в регистры ES:DI указатель на структуру «$PnP».

MBR

Вообще говоря, код в MBR может делать что угодно, в рамках ограничений по размеру. Обычно происходит следующее, но бывают и исключения. Например, код, записываемый в MBR при установке загрузчика GNU GRUB, не анализирует флаги активности разделов и передает управление не загрузчику какого-либо раздела, а основному образу GRUB.

Выбор загрузочного раздела и проверка целостности 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

Классическая структура главной загрузочной записи (MBR)
Смещение Длина, байт Описание
0000h446Код загрузчика
01BEh16Раздел 1Таблица разделов
01CEh16Раздел 2
01DEh16Раздел 3
01EEh16Раздел 4
01FEh2Сигнатура (55h AAh)

Код загрузчика

После завершения процедуры POST в ОЗУ по физическому адресу 0x7C00 записывается код загрузчика (первые 446 байт из нулевого сектора диска), после чего ему передаётся управление. Задача этого кода — проанализировать таблицу разделов жёсткого диска, затем передать управление второму загрузочному коду, который может находиться или в начале активного раздела, или на специальной области диска (эта область не занята файловыми системами, и обычно является группой секторов №1–№63, разделы на диске обычно начинаются с сектора №64). Второй загрузчик уже умеет читать хотя бы одну файловую систему, и его задача - передать управление файлам из файловой системы ОС для запуска ОС.

Примеры:

Загрузчик Windows поступает первым способом: он передает управление второму загрузчику, который находится в начале активного Windows раздела. Далее второй загрузчик обеспечивает поддержку файловой системы и запускает необходимые файлы для дальнейшей загрузки ОС.

Загрузчик GRUB (нашедший популярность в Linux дистрибутивах) использует второй способ: он передает управление второму загрузчику, который расположен в группе секторов №1-№63. Второй загрузчик ищет корневой linux раздел, а на этом разделе ищет файлы конфигурации GRUB (и модули GRUB) для отображения GRUB меню. При выборе какого-либо пункта в GRUB меню, GRUB действует согласно файлу конфигурации для этого пункта (например, в случае с дистрибутивами linux в ОЗУ копируется linux ядро с initrd, и управление передается ядру). Копия первого загрузчика GRUB (446 байт из нулевого сектора диска) находится в файле boot.img, а копия второго загрузчика GRUB (группа секторов №1 - №63) находится в файле core.img (собирается при установке GRUB с учетом файловой системы корневого раздела и других факторов)

Таблица разделов

В таблице разделов хранится информация о типе раздела и его расположении на жёстком диске.

Сигнатура

Последние два байта MBR называются сигнатурой. Значение этих байтов должно быть 55h AAh. В случае, если это не так, запись считается некорректной.

Структура описания раздела

Структура описания раздела
СмещениеДлинаОписание
00h1Признак активности раздела
01h1Начало раздела — головка
02h1Начало раздела — сектор (биты 0—5), цилиндр (биты 6, 7)
03h1Начало раздела — цилиндр (старшие биты 8, 9 хранятся в байте номера сектора)
04h1Код типа раздела
05h1Конец раздела — головка
06h1Конец раздела — сектор (биты 0—5), цилиндр (биты 6, 7)
07h1Конец раздела — цилиндр (старшие биты 8, 9 хранятся в байте номера сектора)
08h4Смещение первого сектора
0Ch4Количество секторов раздела

Признак активности разделов

Признак активности раздела — признак, обозначающий возможность загрузки операционной системы с данного раздела. Для стандартных загрузчиков может принимать следующие значения:

  • 80h — раздел является активным;
  • 00h — раздел является неактивным;
  • другие значения являются ошибочными и игнорируются.

Начало раздела / Конец раздела

Координаты начала и конца раздела в CHS-формате (цилиндр, головка, сектор). CHS не позволяет выполнять адресацию более чем к 7,8 ГБ данных, и для адресации к разделам, находящимся за пределами 7,8 ГБ, используется LBA-адресация.

Код типа раздела

Код файловой системы, используемой на данном разделе.

Коды типов разделов
КодТип раздела
00hПустая запись (свободное место)
01hFAT-12 (если это логический раздел или раздел расположен в первых 32 мегабайтах диска, иначе используется код 06h)
02hXENIX root
03hXENIX usr
04hFAT-16 до 32 Мбайт (если раздел первичный, то должен находиться в первых физических 32 Мб диска, иначе используется код 06h)
05hРасширенный раздел
06hFAT-16B, а также FAT-16, не попадающий под условия кода 04h и FAT-12, не попадающий под условия кода 01h
07hIFS, HPFS, NTFS, exFAT (и некоторые другие — тип определяется по содержимому загрузочной записи)
08hAIX
09hAIX загрузочный
0AhOS/2 Boot менеджер, OPUS
0BhFAT-32
0ChFAT-32X (FAT-32 с использованием LBA)
0DhЗарезервирован
0EhFAT-16X (FAT-16 с использованием LBA) (VFAT)
0FhРасширенный раздел LBA (то же что и 05h, с использованием LBA)[1]
10hOPUS
11hСкрытый FAT (аналогичен коду 01h)
12hCompaq, Сервисный раздел
14hСкрытый FAT (аналогичен коду 04h)
15hСкрытый Расширенный раздел (аналогичен коду 05h)
16hСкрытый FAT (аналогичен коду 06h)
17hСкрытый раздел HPFS/NTFS/IFS/exFAT
18hAST SmartSleep
19hOFS1
1BhСкрытый раздел FAT-32 (см. 0Bh)
1ChСкрытый раздел FAT-32X (см. 0Ch)
1EhСкрытый раздел FAT-16X (VFAT) (см. 0Eh)
1FhСкрытый Расширенный раздел LBA (см. 0Fh)
20hOFS1
21hFSo2
22hРасширенный раздел FS02
24hNEC DOS
25hWindows Mobile IMGFS
27hСкрытый NTFS (Раздел восстановления системы)
28hЗарезервирован для FAT-16+
29hЗарезервирован для FAT-32+
2AhAFS (AthFS)
35hJFS
38hTHEOS 3.2
39hPlan 9
3AhTHEOS 4
3BhРасширенный раздел THEOS 4
3ChPartition Magic, NetWare
3DhСкрытый раздел NetWare
40hVenix 80286, PICK R83
41hСтарый Linux/Minix, PPC PReP Boot
42hСтарый своп Linux, SFS
43hСтарый Linux
4AhALFS
4ChA2 (Aos)
4DhQNX4.x
4EhQNX4.x 2-я часть
4FhQNX4.x 3-я часть
50hOnTrack DM (только чтение)
51hOnTrack DM6 (чтение и запись)
52hCP/M
53hOnTrack DM6 Aux3
54hOnTrack DM6 DDO
55hEZ-Drive
56hGolden Bow
56hNovell VNDI
5ChPriam Edisk
61hSpeedStor
62hGNU HURD
63hUNIX
64h — 69hNetWare
77hVNDI, M2FS, M2CS
78hXOSL
7FhДанный код зарезервирован для исследовательских или учебных проектов
80hMINIX (старый)
81hMINIX
82hLinux swap, Sun Solaris (старый)
83hLinux
85hLinux extended (расширенный)
86hРаздел FAT-16 stripe-массива Windows NT
87hРаздел NTFS/HPFS stripe-массива Windows NT
8EhРаздел LVM
93hAmoeba, Скрытый Linux (см. код 83h)
94hAmoeba BBT
94hISO-9660
9EhForthOS
A5hРаздел гибернации
A5hNetBSD (старый),FreeBSD,BSD/386
A6hOpenBSD
A7hNeXTSTEP
A8hApple Darwin, Mac OS X UFS
A9hNetBSD
AFhMac 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
BEhSolaris 8 загрузочный
BFhSolaris
C2hСкрытый Linux
C3hСкрытый своп Linux
C6hЗеркальный slave-раздел FAT-16 Windows NT
C7hЗеркальный slave-раздел NTFS Windows NT
CDhДамп памяти
D8hCP/M-86
DAhДанные — не файловая система
DBhCP/M-86
DDhСкрытый дамп памяти
DEhDell Utility
EBhBFS
EChSkyOS
EDhГибридный GPT
EEhGPT
EFhСистемный раздел UEFI
F7hEFAT, SolidState
FBhVMFS
FChСвоп VMFS
FEhLANstep, PS/2 IML
FFhXENIX BBT

В случае, если используется расширенный раздел, то координаты начала раздела указывают на EBR.

Структура EBR
СмещениеДлинаОписание
1BEh16Указатель на раздел
1CEh16Указатель на следующий EBR
1DEh32Не используется (должно быть заполнено нулями) [lower-alpha 2]
1FEh2Сигнатура (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

См. также

Пояснения

  1. Здесь указан адрес в адресации CHS, в адресации LBA он соответствует сектору с номером 0
  2. Изначально планировалось разместить здесь ещё два указателя на раздел, но это так и не было реализовано)

Примечания

  1. MS-DOS Partitioning Summary (англ.). Microsoft, Inc.. Проверено 12 декабря 2011. Архивировано 12 декабря 2011 года.

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии