Компания ALT Linux
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 12597 / 1646 | Оценка: 4.19 / 3.84 | Длительность: 18:18:00
ISBN: 978-5-9556-0019-1
Лекция 12:

Досистемная начальная загрузка

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >

Linux: LILO и GRUB

Процедуру загрузки можно изрядно сократить, если не давать пользователю никакого выбора вплоть до последней стадии - "большого" загрузчика, а уже его обучить загружать ядро (возможно, не одно) или первичные загрузчики других систем, если обучение невозможно. По этой схеме действует, например, стандартный загрузчик Linux - LILO ( LI nux LO ader). Linux на архитектуре i386 пользуется стандартными HDPT и дополнительными разделами, поэтому LI ( первичным загрузчиком LILO ) можно заменить программную часть MBR. LI только и умеет, что загружать LO, вторичный загрузчик, а уж он-то разбирается, передавать ли управление ядру или вызывать другой первичный загрузчик (скажем, DOS). Тогда процедура загрузки станет двухуровневой: монолит LI+LO ( первичный загрузчик + вторичный) -> ядро.

К сожалению, любое упрощение "идеальной" трехуровневой загрузки провоцирует разного рода зависимости между уровнями. Во-первых, нельзя загрузить никакую систему, если что-то случилось с любой из частей LILO, ведь именно оттуда вызываются первичные загрузчики систем. Однако если использовать трехуровневую схему - MBR (Boot0 из FreeBSD или BOOTACTV из пакета pfdisk в Debian GNU Linux) -> LILO -> ядро, этой неприятности можно избежать.

Во-вторых, при стандартном разбиении диска вторичный загрузчик упрятать иногда вообще некуда, кроме как в файл на файловой системе. Стандартный, да к тому же очень маленький, первичный загрузчик не в состоянии разбираться с файловыми системами, поэтому данные о расположении LO на диске приходится "зашивать" в LI, что называется, вручную. Это значит, что при любом изменении вторичного загрузчика (перемещении или изменении файла, изменении настроек) необходимо запускать системную утилиту lilo, которая и обновит в LI карту размещения LO - в терминах самого низкого уровня, например, в нотации C/H/S. Тут тяжелая наследственность просто пляшет на обломках, потому что нынешние жесткие диски зачастую имеют такую геометрию, что функции BIOS, которыми пользуется LI, вообще не достигнут места, указанного в карте; для этого надо пользоваться новыми функциями, а их может не быть в старых версиях BIOS. Некоторые диски поддерживают преобразование геометрии, режимы работы Large Block Access и т. д., а некоторые - нет. Все это требует особого варианта LI и всем этим можно управлять только из загруженной системы; если что-то пойдет не так, повторно загрузить систему не удастся.

Хуже всего то, что, в-третьих, вторичный загрузчик в LILO тоже недостаточно умен, чтобы разбираться в файловых системах. Дело в том, что он должен быть не слишком велик (размер карты размещения в LI ограничен), но при этом достаточно универсален, чтобы уметь загружать ядро, модули (о том, как это делается, речь впереди), вызывать первичные загрузчики других систем и т. п. Для того чтобы LO мог загрузить файл, этот файл должен быть представлен в собственной карте размещения LO, т. е. опять-таки "зашит вручную". Легко вообразить, сколь неприятно это свойство LILO: любое изменение ядра или загружаемых модулей (что, в отличие от изменения вторичного загрузчика, действительно может понадобиться) непременно должно сопровождаться перестройкой всей последовательности загрузки, иначе следующий запуск системы просто не состоится, потому что карта размещения устарела, и там, куда она указывает, на законных основаниях может лежать мусор.

Несколько лучше обстоят дела с другой схемой загрузки, основанной на GRUB (GRand Unified Bootloader) - универсальным и мощным, разрабатываемым в GNU. Как и LILO, GRUB предполагает немедленный вызов вторичного загрузчика из первичного, причем расположение вторичного загрузчика, как и в LILO, должно быть известно первичному заранее. Однако вторичный загрузчик GRUB гораздо более интеллектуален: он умеет разбирать содержимое различных файловых систем, распознает несколько форматов загрузки ядер и модулей и организует настоящий интерфейс командной строки, так что пользователь может сам управлять загрузкой нужных ему файлов.

Чтобы не усложнять первичному загрузчику задачу картами размещения, вторичный вписывается в неиспользуемое пространство - в сектора на диске прямо после загрузочного. Скорее всего, эти сектора (как и вообще вся первая дорожка диска) системой не будут использоваться, и места для GRUB там наверняка хватит. Если же места мало, туда помещается "полуторный" загрузчик - драйвер файловой системы, который только и умеет, что искать вторичный. И тот и другой способ накладывают ограничения на структуру жесткого диска и оставляют проблему зависимости уровней загрузки нерешенной.

Linux: стартовый виртуальный диск

Задачу предварительной загрузки модулей ядра такая организация досистемной загрузки, понятно, не решает. Поэтому в Linux воспользовались технологией, которая применяется при первоначальной установке системы. Процедура установки системы тоже ведь должна выполняться под управлением какой-то ОС? Скорее всего, это будет тот же Linux, только в облегченном варианте, в котором оставлены лишь функции, необходимые для установки. Как будет показано далее, для системной начальной загрузки требуется файловая система определенной структуры с некоторыми стандартными файлами, каталогами и утилитами. Но дискового пространства под это еще не отведено, так что приходится размещать такую файловую систему в памяти. Данная технология носит название initrd ( init ial r am d isk, стартовый виртуальный диск ): вторичному загрузчику передается два файла - ядро и образ стартового диска. Загрузчик размещает образ в памяти и загружает ядро, передавая ему информацию об initrd, как о файловой системе. Утилиты, расположенные в initrd, загружают модули, находящиеся в initrd, после чего становится доступной сеть, специфические дисковые и прочие внешние устройства.

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

Выходит, что initrd решает свою задачу с тем же успехом, что и LILO - свою. С одной стороны, цель достигнута: ядро не обязательно пересобирать, модули и настройки можно подгружать готовые, после загрузки ядра, так что отпала необходимость в средствах разработки (вроде компилятора, компоновщика, библиотек и пр.) для изменения параметров системы. К тому же механизм стартового виртуального диска очень гибок (мини-Linux!) и строго соответствует У, поскольку не вводит ничего сверх уже известного (ни дополнительного языка программирования, ни второго механизма загрузки и компоновки модулей, как в схеме FreeBSD). С другой стороны, платой за экономию становится все та же обратная зависимость: изменение initrd возможно только при уже частично загруженной системе, т. е. после отработки содержимого самого initrd. Так что с точки зрения разделения уровней загрузки initrd мало чем отличается от самой старой схемы с пересборкой ядра.

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >
Max Akt
Max Akt

Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает.

Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started