Разделы.Главная загрузочная запись и таблица разделов.

Разделы

Верхний уровень логической структуры диска — разделы (partitions). Идея разделов применима к жестким дискам: диск разбивается на несколько частей, каждая из которых несет свою файловую систему и далее представляется ОС вполне самостоятельным носителем.

Флеш-диски и оптические диски обычно «пропускают» этот уровень. В сущности такой носитель весь является одним разделом и несет только файловую систему.

Главная загрузочная запись и таблица разделов

Начальный сектор диска содержит главную загрузочную запись (англ. master boot record, MBR). Синоним — основная загрузочная запись. MBR состоит из программного кода загрузчика, таблицы разделов (partition table) и заканчивается сигнатурой (подписью). Все вместе это занимает 512 байтов. Структура главной загрузочной записи приведена в табл. 2.1.


Посмотреть на Яндекс.Фотках

Первые 446 байтов отводятся под код загрузчика (Boot Record). При загрузке с диска эту короткую программу считывает и выполняет BIOS компьютера. Код загрузчика зависит от того, какой программой создавалась главная загрузочная запись. Например, если вы форматировали (точнее, инициализировали) диск стандартными средствами Windows, код загрузчика один, если с помощью Partition Magic — другой, если с помощью программ семейства Acronis — третий. Стандартным считается загрузчик, записываемый утилитой fdisk или установщиком Windows.

В адреса 01B8–01BB программа, которой форматировался диск, может записать сигнатуру диска. Например, ОС семейства Windows NT по этим значениям «запоминают» диск, который однажды подключался к системе, и «узнают» его, даже если потом он будет переставлен на другой канал IDE или SATA.

Следующие четыре группы по 16 байтов служат для записи сведений о разделах диска. Вместе они образуют таблицу разделов (Partition Table). Пока на диске не создавались разделы, все эти группы содержат нули. На диске можно создать максимум 4 основных (basic) раздела — больше структурой MBR не предусмотрено. Каждая группа состоит из 10 полей.

Нулевой байт — флаг активности раздела. Из всех разделов диска активным может быть только один (или ни одного). При загрузке компьютера BIOS, прочитав и выполнив код загрузчика MBR, будет искать «продолжение», т.е. загрузчик операционной системы, в активном разделе. Больше этот флаг ни на что не влияет.

Следующие 3 байта содержат координаты начала раздела, а байты с пятого по седьмой — координаты его конца. Координаты выражены через значения CHS.

Относительно головок, секторов и цилиндров придется сделать отступление. Исторически сначала появилась «трехмерная» адресация секторов на жестких дисках, или система адресации CHS. В ней каждый сектор обозначался тремя числами: C (номером цилиндра, т.е. дорожек, лежащих одна под другой), H (номером головки, т.е. пластины) и S (номером сектора на дорожке). Это отражало реальную «геометрию» винчестеров того времени .

Тогда же сложилась спецификация таблицы разделов, которая действует и до сих пор. В ней под номер цилиндра C отведено 10 битов, и цилиндров может быть не более 210 = 1024. Под номер сектора S отдано 6 битов, и секторов может быть не более 26 – 1 = 63 (нумерация секторов начинается с единицы). Соответственно, головок может быть не более 28 = 256. Итого, адресуемый объем диска теоретически не может превышать 1024 • 63 • 256 • 512 = 8 455 716 864 байта, чуть больше 7,8 Гбайт.

В дальнейшем, когда емкость винчестеров превысила 7 Гбайт, была принята «линейная» адресация LBA (Logical Block Addressing, адресация логических блоков). В ней все секторы «выстроены в ряд», и у сектора есть только порядковый номер. При таком типе адресации данные считываются логическими блоками, состоящими из нескольких секторов.

Адресация LBA преобразуется в CHS и наоборот. Примерно так же на строевом смотре воинское подразделение из «коробки» в несколько шеренг развертывается в колонну или шеренгу по одному, а затем вновь выстраивается в «коробку». За нулевой принимается блок, который начинается в первом секторе нулевой головки нулевого цилиндра. Блоки (секторы) LBA нумеруются с нуля, а не с единицы, как секторы CHS! Дальше номера блоков определяются по формуле:

LBA = (CYL • HDS + HD) • SPT + SEC – 1,

где LBA — номер блока (сектора); CYL, HD, SEC — номера цилиндра, головки и сектора в пространстве CHS; HDS — количество головок; SPT — количество секторов на дорожке (цилиндре).

Если начало раздела лежит за пределами адресации CHS, то в соответствующие поля таблицы разделов записываются максимально возможные значения: C = 1023 (3FFh), H = 255 (FFh), S = 63 (3Fh), а для обращения к разделу система будет применять адресацию LBA. Где же «сидят» адреса LBA?

Для них и пригодились последние 8 байтов каждой группы таблицы разделов! Адрес начального блока (сектора) раздела записан в байтах с восьмого по одиннадцатый, а в байты с двенадцатого по шестнадцатый заносится длина этого раздела в секторах.

Если в MBR под запись каждого адреса LBA отводится 4 байта (32 бита), то через LBA теоретически можно адресовать до 232 • 512 = 2 199 023 255 552 байта (около 2 Тбайт). На современных винчестерах координаты начала и длину разделов нужно искать именно в последних 8 байтах каждой записи таблицы разделов.

ПРИМЕЧАНИЕ

На этом долгая счастливая жизнь MBR заканчивается. Летом 2010 года компании Seagate и WD почти одновременно объявили о выпуске винчестера емкостью 3 Тбайт. Но это уже совсем другая история: диски объемом свыше 2 Тбайт требуют совершенно иную таблицу разделов и 48битную адресацию LBA!

Четвертый байт — код (идентификатор) типа раздела. Если значение этого байта равно 00, считается, что такого раздела не существует, и его содержимое игнорируется. Любое другое значение указывает на раздел определенного типа. Некоторые идентификаторы приведены в табл. 2.3.

Добавление к коду типа раздела шестнадцатеричного числа 10 делает раздел «скрытым» (hidden). Например, если идентификатор 0C указывает на раздел FAT32, то идентификатор 0C + 10 = 1C соответствует скрытому разделу FAT32.

Скрытые разделы недоступны большинству ОС — для них это «раздел неизвестного типа», следовательно, он не должен содержать файловую систему. Однако в скрытых разделах часто располагают средства восстановления системы. Например, Зона безопасности Acronis является скрытым разделом FAT32, а на ноутбуках Acer скрытый раздел несет утилиту eRecovery (специализированная ОС на базе Linux) и образ системного диска. В таком случае программа, создающая скрытый раздел, заменяет стандартный загрузчик MBR своим, модифицированным. Такой «хитрый» загрузчик предлагает в процессе загрузки нажать какоелибо сочетание клавиш, чтобы загрузить компьютер со скрытого раздела.

Если на диске нужно создать больше четырех разделов, применяется специальный тип раздела с кодом 05 — расширенный раздел (Extended Partition). В терминологии Windows отформатированные расширенные разделы называются логическими дисками.

Расширенный раздел отличается от всех других типов разделов. Он описывает не сам раздел, а область пространства накопителя, в которой начинается описание логических дисков. Сектор, который указан в таблице разделов MBR как начальный сектор расширенного раздела, фактически содержит еще одну загрузочную запись — Extended Boot Record (EBR). Загрузочного кода в ней нет, есть только таблица разделов из двух записей и сигнатура.

Записи EBR устроены точно так же, как записи таблицы разделов в MBR. Если логический диск, на который ссылается указатель, занимает не все пространство, то в EBR заполняется второй элемент — указатель на следующий расширенный раздел. Он вновь описывает оставшееся пространство как Extended Partition и указывает на следующую расширенную загрузочную запись (EBR). В секторе, на который ссылается эта запись, точно так же описывается один раздел (логический диск) и, если осталось место, делается очередная запись об Extended Partition. Так продолжается до тех пор, пока пространство не будет разделено.

Все записи о расширенных разделах образуют цепь (Extended Partition Chain), в которой от дискового пространства последовательно отрезаются фрагменты (логические диски). Ошибка в любом элементе этой цепи приводит к ее обрыву. Все разделы, которые описаны после обрыва цепи, операционная система найти не сможет. Занимаемое этими расширенными разделами пространство она будет считать незанятым.

ПРАКТИЧЕСКИЙ ВЫВОД

Если вам не нужно разбивать диск на десяток мелких, постарайтесь ограничиться только основными разделами. Большинству пользователей на диске вполне хватит трех: первый раздел для системы, второй — для хранения документов, а третий — под игры и «свалку всякой всячины». При желании может быть создан еще и четвертый раздел, например, Зона безопасности Acronis True Image. Достаточно для нормальной работы?