Что у диска внутри
 

Жесткий диск, как и всякое другое блочное устройство, хранит информацию фиксированными порциями, которые называются блоками. Блок является наименьшей порцией данных, имеющей уникальный адрес на жестком диске. Обмен информацией с жестким диском предполагает указание этого адреса в качестве параметра команды, выдаваемой контроллеру. Размер блока со временем стал стандартным для всех жестких дисков - 512 байт.

Исторически сложилось так, что информация на диске хранилась в секторах. Сектора располагались на дорожках (цилиндрах), дорожки в свою очередь на сторонах диска, так что адрес блока на диске составлялся из трех чисел. Такой способ адресации диска был широко распространен и получил впоследствии обозначение аббревиатурой CHS (cylinder, head, sector). Именно этот способ был первоначально реализован в BIOS, поэтому впоследствии возникли ограничения, связанные с ним. Дело в том, что BIOS определил разрядную сетку адресов на 63 сектора, 1024 цилиндра и 255 головок. Однако развитие жестких дисков ограничилось использованием лишь 16 головок. Отсюда появилось первое ограничение на максимально допустимую для адресации емкость жесткого диска:

1024*16*63*512 = 504 Mb.

Разумеется, настали времена, когда такой емкости диска стало не хватать. Диски стали становится больше, число цилиндров на них превысило 1024, максимально допустимое число цилиндров. Однако, адресуемая часть диска продолжала равняться 504 Мбайтам, при условии, что обращение к диску велось средствами BIOS. Это ограничение со временем было снято введением так называемого механизма трансляции адресов, о котором чуть ниже.

Проблемы, возникшие с ограниченностью BIOS по части физической геометрии дисков, привели в конце концов к появлению нового способа адресации блоков на диске. Этот способ довольно прост. Блоки на диске описываются одним параметром - линейным адресом блока. Адресация диска линейно получила аббревиатуру LBA (logical block addressing). Линейный адрес блока однозначно связан с его CHS адресом:

lba = (cyl*HEADS + head)*SECTORS + (sector-1).

Введение поддержки линейной адресации в контроллеры жестких дисков дало возможность BIOS\'aм заняться трансляцией адресов. Суть этого метода состоит в том, что если в приведенной выше формуле увеличить параметр HEADS, то потребуется меньше цилиндров, чтобы адресовать то же самое количество блоков диска. Но зато потребуется больше головок. Однако головок-то как раз использовалось всего 16 из 255. Поэтому BIOS\'ы стали переводить избыточные цилиндры в головки, уменьшая число одних и увеличивая число других. Это позволило им использовать разрядную сетку головок целиком. Это отодвинуло границу адресуемого BIOS\'ом дискового пространства до 8 Gb.

Дальнейшее увеличение адресуемых объемов диска с использованием прежних сервисов BIOS стало принципиально невозможным. Тогда был разработан новый расширенный интерфейс BIOS, учитывающий возможность очень больших адресов блоков. Однако этот интерфейс уже не совместим с прежним, вследствие чего старые операционные системы, такие как DOS, которые пользуются старыми интерфейсами BIOS, не смогли и не смогут переступить границы в 8 Gb. Современные системы уже не пользуются BIOS\'ом, а используют собственные драйвера для работы с дисками. Поэтому данное ограничение на них не распространяется. Но следует понимать, что прежде чем система сможет использовать собственный драйвер, она должна как минимум его загрузить. Поэтому на этапе начальной загрузки любая система вынуждена пользоваться BIOS\'ом. Это и вызывает ограничения на размещение многих систем за пределами 8 Gb, они не могут оттуда загружаться, но могут читать и писать информацию.

Обратимся теперь к размещению операционных систем на жестких дисках. Для организации систем дисковое адресное пространство блоков разделяется на части, называемые разделами (partitions). Разделы полностью подобны целому диску в том, что они состоят из смежных блоков. Благодаря такой организации для описания раздела достаточно указания начала раздела и его длины в блоках.

Разделы являются контейнерами всего своего содержимого. Этим содержимым является, как правило, файловая система. Под файловой системой с точки зрения диска понимается система разметки блоков для хранения файлов. После того, как на разделе создана файловая система и в ней размещены файлы операционной системы, раздел может стать загружаемым. Загружаемый раздел имеет в своем первом блоке небольшую программу, которая производит загрузку операционной системы. Однако для загрузки определенной системы нужно явно запустить ее загрузочную программу из первого блока. О том, как это происходит, будет рассказано чуть ниже.

Разделы с файловыми системами не должны пересекаться. Это связано с тем, что две разные файловые системы имеют каждая свое представление о размещении файлов, но когда это размещение приходится на одно и то же физическое место на диске, между файловыми системами возникает конфликт. Этот конфликт возникает не сразу, а лишь по мере того, как файлы начинают размещаться в том месте диска, где разделы пересекаются. Поэтому следует внимательно относиться к разделению диска на разделы.

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

Диск разбивается на разделы программным путем. То есть вы можете создать произвольную конфигурацию разделов. Информация о разбиении диска хранится в самом первом блоке жесткого диска, называемым главной загрузочной записью (Master Boot Record (MBR)).

MBR является основным средством загрузки с жесткого диска, поддерживаемым BIOS. В MBR находятся три важных элемента:

  • Программа начальной загрузки. Именно она запускается BIOS\'ом после успешной загрузки в память первого блока (MBR). Она, очевидно, не превышает 512 байт и ее хватает только на то, чтобы загрузить стартовый сектор операционной системы и передать туда управление;
  • Таблица описания разделов диска. Располагается по смещению 0x1BE в MBR. Таблица описывает четыре раздела. Только один из четырех разделов имеет право быть помеченным как активный, что будет означать, что программа загрузки должна загрузить в память первый сектор именно этого раздела и передать туда управление;
  • Сигнатура MBR. Последние два байта MBR должны содержать число 0xAA55. По наличию этой сигнатуры биос проверяет, что первый блок был загружен успешно. Сигнатура эта выбрана не случайно. Ее успешная проверка позволяет установить, что все линии данных могут передавать и нули, и единицы.

Программа загрузки просматривает таблицу разделов, выбирает из них активный, загружает первый блок этого раздела и передает туда управление.

С точки зрения разделов диска наиболее популярной до недавнего времени была и остается MS-DOS. Она забирает в свое пользование два из четырех разделов: Primary DOS partition, Extended DOS partition. Первый из них, (primary) это обычный досовый диск C:. Второй - это контейнер логических дисков. Они все болтаются там в виде цепочки подразделов, которые так и именуются: D:, E:, ... Логические диски могут иметь и инородные файловые системы, отличные от файловой системы DOS. Однако, как правило, инородность файловой системы связана присутствием еще одной операционной системы, которую, вообще говоря, следовало бы поместить в свой собственный раздел (не extended DOS), но для таких выходок часто оказывается слишком маленькой таблица разделов.

Отметим еще одно важное обстоятельство. Когда на чистый жесткий диск устанавливается DOS, то при загрузке нет никаких альтернатив в выборе операционных систем. Поэтому загрузчик выглядит весьма примитивно, ему не надо спрашивать у пользователя, какую систему тот хочет загрузить. С желанием иметь сразу несколько систем возникает необходимость заводить программу, позволяющую выбирать систему для загрузки.

В случае OS/2 предлагается ставить Boot Manager, который умеет выбирать системы, но он занимает один цилиндр диска и один раздел в таблице разделов. В более общем случае можно поставить System Commander, но эта программа тоже довольно громоздка и, что более критично, она располагается в разделе DOS, что может привести к печальным последствиям в случае вирусов или просто сбоев в файловой системе DOS.

Довольно много программ работает напрямую с таблицей разделов диска. Это делает каждая операционная система при старте, программы типа Norton disk doctor, fdisk и др. Поэтому проблема совместимости заставляет использовать только четыре раздела после загрузки операционной системы. У систем со сродственными файловыми системами (таких как DOS и Windows) может возникнуть проблема перемены местами дисковых разделов. Такое возможно в случае, когда DOS есть отдельно от Windows. Появляется проблема перестановки разделов, чтобы обеспечить различные диски С: при загрузке.

Вот основные проблемы, встающие перед пользователем при желании завести несколько операционных систем.