| Сначала о физическом устройстве винчестера. Как сказано в мануале к SyMon'у: «...Жесткий диск, как и всякое другое блочное устройство, хранит информацию фиксированными порциями, которые называются блоками. Блок является наименьшей порцией данных, имеющей уникальный адрес на жестком диске. Обмен информацией с жестким диском предполагает указание этого адреса в качестве параметра команды, выдаваемой контроллеру. Размер блока со временем стал стандартным для всех жестких дисков - 512 байт. Исторически сложилось так, что информация на диске хранилась в секторах. Т.е. сектор - это и есть тот самый минимальный блок данных, равный 512 байтам, с которым работает контроллер винчестера. Сектора располагались на дорожках (цилиндрах), дорожки в свою очередь на сторонах диска, так что адрес блока на диске составлялся из трех чисел. Такой способ адресации диска был широко распространен и получил впоследствии обозначение аббревиатурой CHS (cylinder, head, sector). Именно этот способ был первоначально реализован в BIOS, поэтому впоследствии возникли ограничения, связанные с ним. Дело в том, что BIOS определил разрядную сетку адресов на 63 сектора, 1024 цилиндра и 255 головок. Однако развитие жестких дисков ограничилось использованием лишь 16 головок. Отсюда появилось первое ограничение на максимально допустимую для адресации емкость жесткого диска: 1024*16*63*512 = 504Mb. Разумеется, настали времена, когда такой емкости диска стало не хватать. Диски стали становится больше, число цилиндров на них превысило 1024, максимально допустимое число цилиндров. Однако, адресуемая часть диска продолжала равняться 504Мбайтам, при условии, что обращение к диску велось средствами BIOS. Это ограничение со временем было снято введением так называемого механизма трансляции адресов, о котором чуть ниже. Проблемы, возникшие с ограниченностью BIOS по части физической геометрии дисков, привели в конце концов к появлению нового способа адресации блоков на диске. Этот способ довольно прост. Блоки на диске описываются одним параметром - линейным адресом блока. Адресация диска линейно получила аббревиатуру LBA (logical block addressing). Линейный адрес блока однозначно связан с его CHS адресом: lba = (cyl*HEADS + head)*SECTORS + (sector-1); Введение поддержки линейной адресации в контроллеры жестких дисков дало возможность BIOS'aм заняться трансляцией адресов. Суть этого метода состоит в том, что если в приведенной выше формуле увеличить параметр HEADS, то потребуется меньше цилиндров, чтобы адресовать то же самое количество блоков диска. Но зато потребуется больше головок. Однако головок-то как раз использовалось всего 16 из 255. Поэтому BIOS'ы стали переводить избыточные цилиндры в головки, уменьшая число одних и увеличивая число других. Это позволило им использовать разрядную сетку головок целиком. Это отодвинуло границу адресуемого BIOS'ом дискового пpостpанства до 8Gb. Дальнейшее увеличение адресуемых объемов диска с использованием прежних сервисов BIOS стало принципиально невозможным. Тогда был разработан новый расширенный интерфейс BIOS, учитывающий возможность очень больших адресов блоков. Однако этот интерфейс уже не совместим с прежним, вследствие чего старые операционные системы, такие как DOS, которые пользуются старыми интерфейсами BIOS, не смогли и не смогут переступить границы в 8GB. Современные системы уже не пользуются BIOS'ом, используют собственные драйвера для работы с дисками. Поэтому данное ограничение на них не распространяется. Но следует понимать, что прежде чем ОС сможет использовать собственный драйвер, она должна минимум его загрузить. Поэтому на этапе начальной загрузки любая система вынуждена пользоваться BIOS'ом. Это и вызывает ограничения на размещение многих систем за пределами 8GB, они не могут оттуда загружаться, но могут читать и писать информацию...» Согласно существующим стандартам IBM PC, в самом начале физического диска (любого: FDD, HDD, CD-Rom), в его первом секторе, располагается специальная программа - так называемая Главная Загрузочная Запись (Master Boot Record). Для жесткого диска, там же помещается и Корневая Таблица Разделов (Root Partition Table) - небольшая база данных, в которой располагаются сведения о разбитии всего физического пространства винчестера на логические диски или разделы с определенной файловой системой на них. При загрузке компьютера BIOS считывает Master Boot Record (далее MBR) и запускает ее. Она в свою очередь работает с Root Partition Table (далее RPT), содержащей информацию для каждого раздела, с какого сектора той или иной дорожки определенного цилиндра он начинается и где заканчивается, сколько в нем секторов, какой тип файловой системы используется и является ли он в данный момент загрузочным. Поскольку MBR и RPT располагаются в одном секторе, то вместе они не должны занимать более 512 байт. При этом разработчики выделили 384 байта под исполняемый код MBR, а оставшееся место под PRT, что накладывает следующие ограничения: максимальное количество разделов - 4, максимальное количество типов разделов (читай, тип файловой системы) - 255, максимальный поддерживаемый размер винчестера - 4 терабайта. Каждой из записей в RPT соответствует Первичный Раздел (Primary Partition). При своем выполнении стандартная программа записанная в MBR, считывает RPT, а затем запускает Загрузочную Запись (Boot Record) того раздела, который помечен в таблице в качестве загрузочного. В Boot Record обычно содержится программа, которая запускает установленную там ОС (для WIndows 9x и OS/2) или первичный загрузчик (LiLo, NT Loader). Исходя из вышесказанного видно, что самое слабое звено - количество разделов, которое равно 4. Чтобы преодолеть этот барьер, тип раздела код которого равен 5, стал использоваться не для описания раздела, а для указания на сектор диска, содержащий еще одну таблицу разделов. Раздел с кодом 5, назвали дополнительным или расширенным разделом (extended partition), а таблицу разделов которую он содержит, назвали соответственно дополнительной или расширенной. Расширенный раздел, сам по себе является первичным (primary), а вот разделы, находящиеся в дополнительной таблице разделов являются логическими (logical). Т.е. дополнительный раздел на самом деле один, но зачастую логические разделы (диски), которые он содержит, так же называют дополнительными разделами. Все дело в том, что расширенный раздел, как уже было сказано, на самом деле не полноценный раздел с файловой системой, а пользователя в основном, интересует количество полноценных разделов, поэтому обычно полноценные разделы, содержащиеся в RPT, называют первичными, а остальные дополнительными, так понятнее. Поэтому и мы будем придерживаться данной терминологии. Под понятием логический диск, будем понимать любой раздел жесткого диска, а также диск съемного устройства (дисковода, CD-Rom'a), т.е логические диски - a:, c:, d: и т.д. (для Linux fda, hda1, hda2 и т.д.) Как мы видим, недостатком стандартного способа загрузки являются архитектурные ограничения (не более четырех первичных разделов), и трудность размещения в одном блоке (512 байт) более-менее сложного ПО, обеспечивающего, например, начальный диалог с пользователем. Альтернатива - "интеллектуальный" способ, предполагающий наличие специальной программы, имеющей доступ к файлам, расположенным на диске. Этот доступ позволяет вынести содержание и алгоритм работы меню загрузки в файлы, редактируемые пользователем, снимает все возможные ограничения на количество загружаемых систем или ядер одной и той же системы. Именно по этому пути и пошли разработчики всех современных менеджеров загрузки. Менеджер загрузки не является частью ОС, поскольку не использует ее ресурсы (т.к. ни одна ОС еще не загружена). Загрузчик зависит от ОС настолько, насколько его файлы "привязаны" к файловой системе данной ОС. Чем больше количество файловых систем, на которых могут находиться файлы загрузчика, тем больше его "вне-системность". Обойдя ограничение четырех первичных разделов и невозможности загрузки разделов логических, разработчики менеджеров загрузки столкнулись с очередной трудностью - особенностями файловых систем, которые теперь уже были "небезразличны", и особенностями загрузки ядер различных ОС. Что касается файловых систем, то тут среди менеджеров "царит" FAT, т.е. все бут менеджеры поддерживают эту файловую систему, но кроме того некоторые поддерживают и другие файловые системы (подробнее в обзоре). А вот что касается загрузки ядер, то тут ожидать "консенсуса" не приходится. Дело в том, что в 1995 году, ядро Hurd (оригинальная ОС, включающая в себя множество инноваций, обсуждение которой выходит далеко за рамки данной статьи) достигло "готовности", когда нужно было уже задуматься о способе его загрузки. Тогда Erich Boleyn в соавторстве с Brian Ford не стал "умножать" количество мало совместимых способов загрузки IBM PC, предложив вместо этого Multiboot Specification - спецификацию, обеспечивающую универсальный способ загрузки ядер ОС. Вряд ли молодые люди рассчитывали на то, что, например, MicroSoft Co. приведет загрузку Windows XP к упомянутой спецификации, но для ядер Hurd, FreeBSD, NetBSD, OpenBSD и Linux мы получили действительно унифицированный подход. Загрузка систем и загрузчиков, не совместимых с Multiboot Specification возможна по алгоритму "цепочки". Собственно говоря, все ОС MicroSoft, кроме NT, только так и загружаются. Что же касается NT, то по "цепочке" загружается NTLoader, выполняя после своей загрузки все возложенные на него функции. Ну вот, пора приступить к установке операционных систем. Необходимо установить на один компьютер Windows XP, Windows 98, Linux, OS/2 Warp и при этом иметь возможность загружать ОС со второго (сменного) винчестера, при чем в 99% случаев это Windows 98. Хочется сказать, что в инете очень много информации, что Windows 9x не работает (или глючит) если в системе два первичных раздела типа FATxx - так это хрень полная (особенно эта сказка про винды распространена в среде линуксоидов). Не знаю как Windows 95, но 98 и ME превосходно видят эти разделы и работают с ними (за год с лишним ни одного глюка). Так что лично я еще предъявляю к загрузчикам и требование, чтобы все разделы, которые система в принципе может видеть, она видела. Т.е. Windows XP видела все разделы, кроме Линуксовых и Полуосевых; Windows 98 - все разделы FATxx. Про Линукс молчу - он и так все увидит. Полуось - ну только свой раздел, т.к. кроме HPFS, она может видеть только FAT16. Ну а если использовать утилиты сторонних производителей, то NTFS под 98, и Ext2FS под все Windows. При написании этого материала была использована статья Владимира Попова: "GRUB... действительно - GRand!" |