46
Суть LBA состоит в том, что каждый блок, адресуемый на жестком диске, имеет свой номер - целое число, начиная с нуля и далее:
LBA 0 = Цилиндр 0/Головка 0/Сектор 1
Преимущество метода адресации LBA — ограничение размера диска обусловлено лишь разрядностью LBA. В настоящее время, для задания номера блока используется 48 бит, что дает возможность адресовать (248) 281 474 976 710 656 блоков.
Технический комитет X3T10 установил правила получения адреса блока в режиме LBA, при условии, что размер блока равен размеру сектора:
где:
с — номер текущего цилиндра; h — номер текущей головки;
s — номер текущего сектора; H — число головок;
S — число секторов на дорожке;
mod — операция взятия остатка от деления.
После того, как BIOS закончит начальный тест POST, она начнет просматривать блочные устройства ЭВМ с целью поиска загрузочного устройства ОС:
•Блочные устройства просматриваются в том порядке, который указан в настройках BIOS. Чтобы определить является ли устройство загрузочным, BIOS читает первый сектор блочного устройства и помещает его в ОЗУ ЭВМ. В компьютерах архитектуры IBM PC, этот адрес обычно 0000:7c00.
•Если сектор соответствует MBR — Master Boot Record, то BOIS передает управление его загрузочному коду: обычно командой long jump.
•Если структура прочитанного сектора не соответствует MBR, то проверяется следующее устройство.
•Если все просмотренные устройства не являются загрузочными, то BIOS: или перезапускает ЭВМ или загружает встроенный в BIOS интерпретатор языка BASIC (если он, конечно, — есть).
Замечание
BIOS рассматриватет flashUSB как загрузочное устройство, если:
•его ПО поддерживает такие устройства;
•имеется раздел MBR, который отмечен как загрузочный.
UEFI рассматривает flashUSB как загрузочное устройство, если оно имеет раздел, форматированный как FAT12/16/32, и в корне разделя имеется директория EFI.
47
MBR (Master Boot Record) — это Главная загрузочная запись блочного устройства.
Более точно — это код и данные расположенные в первом секторе блочного устройства, которые могут быть использованы для загрузки некоторой ОС.
В общем случае, под загрузчик MBR выделено 32 Кбайт винчестера или другого внешнего блочного накопителя. Если под загрузчик ОС используются все 32 Кбайт, то под MBR понимают весь этот загрузочный код. В этом случае, первые 512 байт называют MBS — Master Boot Sector или главным загрузочным сектором. Для операционных систем MS Windows, понятия MBR и MBS совпадают, так как вся MBR содержится в MBS и они рассматриваются как синонимы.
Замечание
MBR может не содержать загрузочного кода, если блочное устройство не является загрузочным. Более того, сам термин появился в те времена, когда:
•с одного устройства загружалась только одна ОС;
•структура блочного устройства была уникальна для каждой ОС.
Последующая унификация структур блочных устройств и самих загрузочных записей привели к тому, что MBR — это еще не загрузка ОС, а всего лишь выбор: «с какого раздела жесткого диска следует загружать ОС»:
На стадии MBR происходит только выбор раздела диска и ничего более.
Загрузка самой ОС происходит на более поздних этапах.
Структура MBR содержит три основные части (см. таблицу 2.1):
•небольшой фрагмент исполняемого кода, - 446 байт;
•таблицу разделов (partition table);
•специальную сигнатуру.
Таблица 2.1 - Структура Главной загрузочной записи (MBR)
Адрес Содержимое
0x0000
Код загрузчика
0x01B8 4-х байтная сигнатура диска (только для MS Windows 2000 и XP)
0x01BE Четыре 16-байтных записи схемы таблицы основных разделов MBR
(partition table)
0x01FE
2-х байтная сигнатура MBR (55AA16)
Поскольку утвержденного стандарта на структуру MBR не существует, то используется «стандарт де-факто», распространенный Microsoft, и которого придерживаются большинство дистрибьютеров ОС.
Согласно «традиции MBR», винчестер может быть разбит на четыре основных раздела. Допускается один из разделов использовать как расширенный раздел и делить его дополнительно. Традиционно также, MBR создается или редактиру-
48
ется в момент инсталляции ОС на внешний носитель.
Когда BIOS прочитает первый сектор блочного устройства и запишет его по адресу 0000:7С00, она проверяет наличие сигнатуры 55AAh:
Если сигнатура есть, управление передается коду загрузчика MBR;
Если сигнатуры нет, то проверяется следующее блочное устройство.
Код загрузчика MBR:
копирует себя с адреса 0000:7C00 по адресу 0000:6000, освобождая место для непосредственного загрузчика ОС;
работает с таблицей разделов (partition table), структура отдельной строки
которой показана в таблице 2.2: если загрузочный раздел найден, то первый сектор загрузчика ОС записывается по адресу 0000:7С00 и ему передается управление; если загрузочный раздел не найден или обнаружена ошибка за-
писи partition table, то делается прерывание INT 18h и управление передается назад в BIOS.
Для отдельной записи partition table:
Первый байт содержит признак активности раздела: признак, обозначающий возможность загрузки операционной системы с данного раздела. Для стандартных загрузчиков может принимать следующие значения:
80h — раздел является активным;
00h — раздел является неактивным;
Другие значения являются ошибочными и игнорируются.
Следующие три байта задают начало раздела в системе координат (C,H,S).
Пятый байт обозначает код файловой системы: Partition Ids, некоторые значения которого приведены в таблице 2.3.
Следующие три байта задают окончание раздела в системе координат (C,H,S). Завершают строку partition table два четырехбайтовых числа, задающие начало раздела и его длину в секторах.
Таблица 2.2 - Структура описания раздела
Смещени |
Длина |
Описание |
|
е |
|
|
|
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 |
Количество секторов раздела |
49
Таблица 2.3 - Ранее распространенные коды типов файловых систем
ID (hex) |
Описание |
01 |
Primary DOS12 (12-bit FAT) |
04 |
Primary DOS16 (16-bit FAT) |
05 |
Extended DOS |
06 |
Primary big DOS (> 32MB) |
0A |
OS/2® |
83 |
Linux (EXT2FS) |
A5 |
FreeBSD, NetBSD, 386BSD (UFS) |
Замечание
Допускается, чтобы один из разделов блочного устройства имел код типа файловой системы равный 05h, который соответствует структуре раздела EBR — Extended Boot Record, начинающегося со структуры, приведенной в таблице 2.4.
Таблица 2.4 - Структура EBR
Смещение |
Длина |
Описание |
1BEh |
16 |
Указатель на раздел |
1CEh |
16 |
Указатель на следующий EBR |
1FEh |
2 |
Сигнатура (55h AAh) |
Замечание
Формат указателей в таблице 2.4 аналогичен формату строки Partition Table в MBR. Раздел EBR не может содержать в себе других разделов EBR.
Традиционная таблица разделов винчестера MBR ориентирована на загрузку только одной ОС.
Дальнейшее развитие структуры блочных устройств связано с созданием новой усовершенствованной таблицы разделов: GPT, показанной на рисунке 2.6.
GPT — GUID Partition Table.
GUID — Global Unique Identifier - глобальный уникальный идентификатор, который в данном контексте используется для именования разделов блочных устройств:
•само устройство именуется в момент создания на нем струтуры GPT;
•раздел устройства именуется в момент создания на нем файловой системы.
50
Рисунок 2.6 - Структура таблицы разделов GPT
Теперь,
•каждое блочное устройство может быть разбито на 128 разделов, записи о которых дублируются в конце устройства (отрицательные номера LBA).
•Все разделы GPT являются основными.
•Размер LBA=512 байт и LBA0 — для совместимости соответствует MBR.
•Отдельный LBA содержит записи о 4-х разделах: по 128 байт на раздел.
•Для идентификации раздела используются GUID.
Замечание
MBR, входящий в структуру GPT, должен указывать наличие на блочном устройстве только одного раздела с типом eeh и размером:
•всего блочного устройства, для устройств < 2 ТБайт;
•2 ТБайт, для устройств > 2 ТБайт.
Не все BIOS могут работать со структурой GPT.