Розділи. MBR. GPT.
The project has been funded by the European Commission. The Education, Audiovisual and Culture Executive program (EACEA), TEMPUS IV. The content of this presentation reflects the opinion of the author.
Розділи та інші артефакти файлової системи
2
Розділи
3
BIOS
Basic Input-Output system
UEFI
Unified Extensible Firmware Interface
GPT
GUID Partition Table
Підтримка UEFI в операційній системі Windows з'явилася разом з випуском Windows Vista Service Pack 1 і Windows 7
MBR
Активний розділ
Операційна система
(80h flag)
(VBR)
Volume Boot Record
Initial Program Load (IPL1)
Initial Program Load (IPL2)
EFI
Extensible Firmware Interface
FAT-32
UEFI-GPT
BIOS-MBR
Завантажувальний процес
Bootmgr
Bootmgr
Операційна система
Стилі розділів
5
Завантаження тільки з жорстких дисків об'ємом не більше 2.1 TB.
1. Прошивка UEFI може завантажуватися з дисків розміром більше 2,2 ТБ - теоретичний ліміт для них становить 9,4 зетабайт (1021 байт).��2. Існує функція Secure Boot, за допомогою якої можна переконатися, що жодне шкідливе програмне забезпечення не змінило завантаження ОС.
3. Підтримка мереж, що дозволяє віддалено конфігурувати та налагоджувати.
4. Для використання повинне бути апаратне забезпечення, яке підтримує UEFI.
5. Більшість версій UEFI підтримують емуляцію BIOS, щоб можна встановити застарілу ОС і працювати з нею.
6. GPT зберігає копію розділу та завантажувальних даних і може відновлювати дані у разі пошкодження основного заголовка GPT
BIOS-MBR
UEFI-GPT
Стилі розділів
8
446 bytes
64 bytes
2 bytes
IPL1
512 bytes
Заванта-жувальний код
Серійний номер диску
Розділи
Сигнатура
Master Boot Record
10
Master Boot Record
Master Boot Code
11
Master Boot Record
12
13
Record Offset | Byte Length | Description |
00 | 1 | Індикатор активного диска 80h – Active, 00h - Inactive |
01 | 1 | Стартовий заголовок |
02 | 2 | Стартовий сектор і стартовий циліндр |
04 | 1 | Байт системного індикатора 07h - NTFS |
05 | 1 | Кінцевий заголовок |
06 | 2 | Кінцевий сектор і кінцевий циліндр |
08 | 4 | LBA (logical block address): початок розділу |
12 | 4 | Розмір розділу (в секторах) |
Проблема з CHS-координатами полягає в тому, що з таким записом можна адресувати максимум 8 Гб диска. В епоху DOS це було прийнятно, але незабаром цього стало недостатньо. Для вирішення цієї проблеми була розроблена LBA (Logical Block Addressing), яка використовувала 32-розрядну плоску нумерацію секторів диска. Це дозволило нам адресувати диски розміром до 2 ТБ. Пізніше розрядність LBA була збільшена до 48 біт, але MBR не вплинув на ці зміни. Він все ще має 32-розрядну адресацію секторів.
Суть LBA полягає в тому, що кожен адресований блок на жорсткому диску має свій номер, ціле число, починаючи з нуля і т. д. (тобто перший блок LBA = 0, другий LBA = 1, ...) . LBA 0 = Cylinder 0 / Head 0 / Sector 1
Зміст Master Boot Record
Два типи адресації:
- CHS
- LBA
Координати CHS сектора розшифровуються як сектор головки циліндра і відповідно позначають номер циліндра (доріжки), номер головки (поверхні) і номер сектора. Циліндри і головки нумеруються з нуля, сектора - з одиниці. Таким чином, CHS = 0/0/1 означає перший сектор на нульовому циліндрі на нульовій головці. Тут розташований сектор MBR.
Формат зберігання номера циліндра та сектора в структурі запису розділу. Номер циліндра і номер сектора розділені між двома байтами, але не порівну, а як 10:6. Тобто номер сектора має молодші 6 біт молодшого байта, що дозволяє встановлювати номери секторів від 1 до 63. І номер циліндра складається з 10 біт - 8 біт старшого байта і решта 2 біти молодшого байта: “CCCCCCCC CCSSSSSS”, і байт є старшими бітами номера циліндра.
CHS адресація
Master Boot Record
15
Призначення | Значення |
Індикатор активного диску | 0x80 |
Стартовий заголовок | 0x20 = 32 |
Sстартовий сектор і циліндр | 0x2100 = 00 21 LE = 00000000 00100001 Starting Sector = 100001 = 33 Starting Cylinder = 0000000000 = 0 |
Системний індикатор | 0x07 NTFS |
Кінцевий заголовок | 0xFE = 254 |
Кінцевий сектор і кінцевий циліндр | 0xFFFF = FF FF LE = 11111111 11111111 Ending Sector = 111111 = 63 Ending Cylinder = 1111111111 = 1023 |
LBA (logical block address): початок розділу | 0x00080000 read LE = 2048 |
Розмір розділу в секторах | 0x00F0FF04 read LE = 83881984 |
16
1
2
3
4
P1
P2
P5
P3
P4
P6
5
6
P7
7
MBR Partition table
EBR1 PT
EBR2 PT
EBR3 PT
EBR4 PT
розширені завантажувальні записи
EBR
Перший запис таблиці розділів
Другий запис таблиці розділів
Перший логічний розділ
EBR
Перший запис таблиці розділів
Другий запис таблиці розділів
Другий логічний розділ
Перший запис у таблиці розділів EBR вказує відносне зміщення між сектором цього EBR і першим сектором логічного розділу, а другий запис вказує відносну адресу наступного EBR у розширеній секції. Якщо цей логічний розділ є останнім у списку, то другий запис у таблиці розділів EBR має бути заповнений нулями.
У першому секторі розширеного розділу знаходиться структура EBR (Extended Boot Record). Вона дуже схожа на структуру MBR, але має такі відмінності:
В кінці структури EBR, як і в MBR, має стояти «магічне» значення AA55h.
Для першого запису таблиці розділів EBR відстань у секторах між поточним сектором EBR і початком логічного розділу, на який посилається запис, записується в полі початкового сектора розділу (зміщення 08h). У цьому випадку розмір цього логічного розділу в секторах записується в поле кількості секторів розділу (зміщення 0Ch).
Для другого запису таблиці розділів EBR відстань між сектором самого першого EBR і сектором наступного EBR у списку записується в поле початкового сектора розділу. У цьому випадку в поле кількості секторів розділу записується розмір області диска від сектора цієї наступної структури EBR і до кінця логічного розділу, що належить цій структурі.
Таким чином, перший запис у таблиці розділів описує, як знайти та який розмір займає поточний логічний розділ, а другий запис описує, як його знайти та який розмір займає наступний EBR у списку разом із його розділом.
EBR
Перший запис таблиці розділів
Другий запис таблиці розділів
Перший логічний розділ
EBR
Перший запис таблиці розділів
Другий запис таблиці розділів
Другий логічний розділ
GPT-стиль
Захисний MBR
Захисний MBR надає достатньо інформації, щоб переконати застарілу систему, що диск правильно відформатовано.
20
220
MBR Виділена таблиця розділів
Offsets 446 - 509
У його таблиці розділів має бути створено один запис із типом розділу 0xEE. Розділ повинен починатися з адреси LBA 1 і мати розмір 0xFFFFFFFF. У полях для CHS-адресації розділ повинен починатися, відповідно, з адреси 0/0/2 (сектор 1 зайнятий самою MBR) і мати кінцеву CHS-адресу FF / FF / FF. Знак активного розділу повинен бути 0 (неактивний).
Розширюваний інтерфейс мікропрограми
21
22
GPT Огляд
22
23
GUID Globally Unique Identifier
23
24
{75048700-EF1F-11D0-9888-006097DEACF9}
GPT дозволяє призначати розділам унікальний 128-бітний ідентифікатор (GUID).
Читання GUID
24
25
16 E3 C9 E3
5C 0B
B8 4D
81 7D
F9 2D F0 02 15 AE
16 Byte 32 Hex Digit GUID
4 bytes�Reverse
2 bytes�Reverse
2 bytes�Reverse
2 bytes�Forward
6 bytes�Forward
Формат таблиці розділів GUID
25
26
Формат таблиці розділів GUID
До 128 Розділів
26
27
Структура таблиці розділів GUID
27
28
| LBA |
Захисний MBR | 0 |
Основний GPT Заголовок | 1 |
Перші 4 записи розділів | 2 |
Записи розділів 5 - 128 | 3 - 33 |
Перший розділ | |
Решта розділів | |
Перші 4 записи розділів | |
Записи розділів 5 - 128 | |
Основний GPT Заголовок | останній |
Основний заголовок GPT
28
29
Призначення | Зміщення | |
EFI сигнатура | 0 - 7 | |
Чек сума заголовка GPT | 16 - 19 | |
Перший використовуваний LBA | 40 - 47 | |
Останній використовуваний LBA | 48 - 55 | |
GUID фізичного диску | 56 - 71 | |
Основний заголовок GPT
29
Запис розділу
30
330
Призначення | Зміщення | |
GUID типу розділу | 0 - 15 | |
Унікальний GUID розділу | 16 - 31 | |
Стартовий LBA | 32 - 39 | |
Кінцевий LBA | 40 - 47 | |
Ім’я розділу | 56 - 127 | |
| |
| |
Прапорці – зсуви 48-55 – використовуються, коли диск є частиною RAID
31
Записи розділів виконуються просто та виконуються з однаковими приростами адрес. Перші 16 байтів використовуються для визначення типу розділу GUID. Наприклад, система GUID EFI виглядає так:"C12A7328-F81F-11D2-BA4B-00A0C9 3EC93B", з наступними 16 байтами, що містять унікальний для розділу GUID. Після цього є запис про початок і кінець 64-розрядного LBA, якщо це можливо. Решта місця присвячено іменам і атрибутам розділу.
Активний розділ
32
33
NTFS VBR
33
34
NTFS VBR
34
35
NTFS VBR
35
36
NTFS VBR
36
37
NTFS VBR
37
38
Offset (Dec) | Size | Description | | Offset (Dec) | Size | Description |
| | LE = Little Endian | 28 | 4 | Number of sectors from start of physical disk to start of VBR (Hidden sectors) | |
00 | 3 | Jump Code | 32 | 4 | Sector count not used by NTFS hence 00 00 00 00 | |
03 | 8 | OEM Name | 36 | 4 | Always 80 00 80 00 | |
11 | 2 | Bytes per sector (LE) | 40 | 8 | Number of sectors in volume | |
13 | 1 | Sectors per cluster | 48 | 8 | Starting Logical Cluster Number for MFT (LE) | |
14 | 7 | Not used – each byte should be 00 | 56 | 8 | Starting Logical Cluster Number for MFT mirror (LE) | |
21 | 1 | Media Descriptor -F8 indicates a fixed disk | 64 | 4 | MFT record size (number of clusters per record read LE as a signed integer) | |
22 | 2 | Not used – always 00 00 | | 68 | 1 | Index Buffer size |
24 | 2 | Sectors per track (LE) | | 72 | 8 | Volume serial number |
26 | 2 | Number of Heads (LE) | | 80 | 4 | MFT checksum (not used 00 00 00 00) |
NTFS VBR і деякі примітки GPT
38
39