ИЛИ КАК УСТАНОВИТЬ НЕСКОЛЬКО ОC НА ОДНОМ КОМПЬЮТЕРЕ |
|
GRUB... действительно - GRand!О работе богатого возможностями загрузчика GRUB и немного о загрузке операционных систем вообще. Владимир Попов «Существование» любой вычислительной системы представляет собой процесс последовательного выполнения главным вычислительным узлом (в миру – CPU) инструкций (операторов). И, как процесс «последовательный», он должен как-то начинаться. Со времен первых ЭВМ для определения этого начала используют специальное слово «boot», общепринятый русский перевод которого – «начальная загрузка», «загрузить». Спросите, зачем так «издалека»? А затем, что большинство пользователей никогда не задумывалось над тем, что представляют собой эти самые boot loader-ы (первичные загрузчики). Общепринятым заблуждением является то, что загрузчик – часть ОС, что, в принципе, не верно, хотя создаются они, как и любое другое ПО, в рамках той или иной операционной системы и ориентированы, обычно, на выполнение загрузки в первую очередь этой самой «материнской» ОС. Но «обычно» не означает «всегда». Прежде всего, это не относится к вычислительным системам, не использующим операционную систему вообще: многие однокристальные ЭВМ и все устройства на их основе, конечные автоматы и т.п. Эти системы не являются предметом нашего рассмотрения и упомянуты только для того, что бы проиллюстрировать, что загрузка (boot) – общее свойство вычислительных систем, а старт операционной системы IBM PC – частный случай загрузки. Возможно, в таком взгляде на IBM PC есть своя логика. Во всяком случае, Erich Boleyn, первый разработчик GRUB, по роду своей основной деятельности имел дело прежде всего с вычислительными устройствами, обеспечивающими высокоскоростную передачу в сетях, и только потом – с IBM PC. Прежде чем продолжить рассказ о GRand Unified Bootloader-е (именно из этих трех слов составлена аббревиатура GRUB), несколько слов о том, для кого это может быть интересно. Если Вы используете ОДНУ операционную систему ОДНОГО производителя (хотите, угадаю – какого?), то Вам это не нужно. Во всех остальных случаях – может пригодиться. Хотите иметь несколько win'9x на одном диске? Вообще, несколько разных операционных систем? Загрузку с любого из физических дисков (без выхода в BIOS Setup)? Универсальную загрузочную дискету? Попробовать альтернативу LILO? Если хотя бы один из ответов был положительным – читайте дальше. Итак, дальнейшее уже будет иметь отношение исключительно
к IBM PC. Архитектура этого, без сомнения, самого многочисленного клона компьютеров
предполагает загрузку в ОЗУ с нулевого адреса так называемой MBR (Master Boot
Record) – первого (или нулевого, в зависимости от того, с чего начинать считать)
блока загрузочного устройства, и передачу на него управления. Загрузочными устройствами
могут быть FDD, HDD или CD ROM, определяется это обычно в BIOS Setup. Во всех
случаях размер MBR – 512 байт. Для MBR жесткого диска стандартизированы также
возможное количество разделов (четыре, причем только один – расширенный (extended),
который может содержать логические диски), структура и местоположение Partition
Table – таблицы разделов, описывающей их геометрию, тип файловой системы и признаки
активности (загружаемости). Стандарт этот можно бы и игнорировать, но тогда
никакое «чужеродное» ПО не сможет определить содержит ли диск хоть что-нибудь
разумное. Поэтому и не игнорируют – даже MicroSoft, упорно «не замечающая» возможности
существования нескольких первичных разделов. А вот содержимое MBR от «0» до
Partition Table – не регламентировано. То есть, как раз исполняемые инструкции
могут быть различными. И имеется под них всего-то 384 байта. Трудно разместить
в таком объеме что–либо существенное – вместо этого размещают код очередного
(в смысле очередности этапов загрузки) loader-a. В простейшем случае этот загрузчик
загружает (уж простите за тавтологию) в память содержимое начального блока одного
из primary (первичных), активного (bootable) раздела. Этот начальный блок, в
отличие от начального блока диска называется уже не Master..., а просто – Boot
Record). Так это делалось от MS DOS вплоть до win'9x. В более сложных случаях
инструкции, считанные из MBR, служат для того, что бы загрузить первичный загрузчик
ОС, будь то NTLoader, LILO и т.п. Такой специальный загрузчик нужен для многих
целей: во-первых, сама загрузка ОС может быть достаточно сложной, чтобы не «умещаться»
в одном блоке; во-вторых, сколько-нибудь серьезная система предполагает возможность
загрузки нескольких ядер (в простейшем случае хотя бы один дополнительный, аварийный
(failsave) вариант); в-третьих, «хорошим тоном» считается сохранение возможности
загрузки предыдущей версии ОС; ну и в-четвертых, хорошо бы предоставить пользователю
возможность использовать еще одну ОС, хотя и не все производители ПО так считают.
Уже вышеприведенное описание показывает, что есть два принципиально различных
способа загрузки. Первый – «тупой» или, выражаясь мягче, «аппаратный» – так
называемая загрузка «цепочкой»: последовательная загрузка начальных блоков сначала
диска в целом, а затем – активного раздела. Недостатком этого способа являются
архитектурные ограничения (не более четырех первичных разделов), и трудность
размещения в одном блоке (512 байт) более-менее сложного ПО, обеспечивающего,
например, начальный диалог с пользователем. Альтернатива – «интеллектуальный»
способ, предполагающий наличие специальной программы, имеющей доступ к файлам,
расположенным на диске. Этот доступ позволяет вынести содержание и алгоритм
работы меню загрузки в файлы, редактируемые пользователем, снимает все возможные
ограничения на количество загружаемых систем или ядер одной и той же системы.
Именно по этому пути и пошли разработчики всех современных менеджеров загрузки
(из уважения, по-видимому, программы этого класса именуют уже не загрузчиками,
а менеджерами). Обойдя ограничение четырех первичных разделов и
невозможности загрузки разделов логических, разработчики менеджеров загрузки
столкнулись с очередной трудностью – особенностями файловых систем, которые
теперь уже были «небезразличны», и особенностями загрузки ядер различных ОС.
Что касается файловых систем, то с этим «разобрались» быстро. Так, в исполнении
авторов GRUB, программный «слой», обеспечивающий доступность файлов на томах
6-ти различных систем «уместился» в 6-ти файлах общим объемом чуть более 45-ти
кбайт. А вот что касается загрузки ядер, то тут ожидать «консенсуса» не приходится.
Но, на самом деле, такая цель и не ставилась.
Согласитесь: приведенный список – веская заявка
на титул «GRand». Присмотримся поближе. Поскольку проект выполняется в рамках
GNU, то информация о нем находится на http://www.gnu.org/software/grub/.
Продукт и в настоящее время в стадии «alpha» (не пугайтесь, это определяется
больше уровнем притязаний разработчиков, нежели работоспособностью уже сделанного),
поэтому загрузить его можно только с ftp://alpha.gnu.org/gnu/grub/.
Там находится три файла. На декабрь 2001-го это: Для unix систем, безусловно, нужно использовать
первый архив. Выполнив стандартные для unix configure-make-make check-make
install, получаем три исполняемых файла в .../sbin, три man-страницы
в .../man/man8, исчерпывающее info в .../info и восемь бинарных
файлов в .../share/grub/i386-pc, образующих в разных комбинациях собственно
bootloader. Добавлять что-либо к info нет необходимости, но все это – только
для unix. А где же «мультисистемность»? Оказывается – есть. Для инсталляции
GRUB в любой из файловых систем на жестком или флоппи-диске нужно создать в
корне этой файловой системы каталог /boot/grub (различия между прямым
и обратным слэшем нивелируются) и перенести в него несколько файлов из архива
grub-0.90-i386-pc.tar.gz: stage1 и stage2 – обязательно,
а файлы с постфиксом stage1_5 – только те, которые обеспечат GRUB доступ
к нужным файловым системам (которые – очевидно из их названий). Собственно инсталляцию,
то есть запись кода загрузчика в MBR, выполнить тоже можно, но не нужно: разумнее
последовать рекомендации авторов и выполнить инсталляцию непосредственно из
grub, запущенного, например, с дискеты, созданной из grub-0.90-i386-pc.ext2fs.
Под unix такая дискета делается командой: Загрузившись с дискеты, знакомимся с тем самым
«гибким командным интерфейсом». Пользователи unix удивлены не будут: очень похоже
на bash, остальным же, возможно, будет интересно познакомиться с памятью команд
и авто-заполнением. Диалог начинается выводом перечня допустимых команд. Информацию
по любой из команд можно получить, набрав help <имя команды>.
В простейшем случае, для инсталляции GRUB потребуется всего две команды: root (hdn,m)
и setup (hd0). Первая из команд указывает, где искать каталог
/boot/grub с находящимися в нем файлами *stage*. Имя устройства
всегда заключается в круглые скобки. n – номер диска, m – номер раздела Способ
обозначения разделов аналогичен принятому в unix (только нумерация начинается
не с единицы, а с нуля), но для пользователей других систем может показаться
«неочевидным». На помощь придет авто заполнение команды: табуляция после root (
– выведет список допустимых устройств. Еще одна табуляция – и на экране список
всех разделов выбранного диска. Может оказаться полезной команда find /boot/grub/stage1
– она-то уж точно укажет номер раздела, где создан искомый каталог. С помощью
этой же команды можно искать любой файл на всех разделах диска и дискете. Не
забывайте только, что path в данном случае – обязательный компонент имени. Поэтому,
если файл должен быть в корневом каталоге раздела, не забудьте прямой слэш перед
именем. Команда setup выполнит все необходимые для инсталляции
действия. В качестве параметра – диск, с которого и будет происходить загрузка.
Однако с setup можно и не торопиться. Почему бы не проверить
себя еще раз? Для этого команды загрузки ОС вводятся непосредственно в командном
режиме (впоследствии эти команды составят конфигурационный файл). для win'98: Вообще, перечень доступных команд достаточно обширен и всегда может быть выведен на экран нажатием <TAB>. Кроме команд, использование которых предполагает наличие специальных знаний (blocklist, debug, displayapm, displaymem, impsprobe, ioprobe, read, serial, setkey, terminal, testload, uppermem), имеются следующие группы команд:
Приведенный список команд не полон, но более подробное
обсуждение было бы слишком объемным, тогда как еще не рассмотрены команды, с
помощью которых, собственно, и выполняются варианты загрузки. Эти же команды
являются основным содержанием конфигурационного файла. Файл этот называется
menu.lst и располагается все в том же /boot/grub. В начале файла
обычно размещаются команды задания цветов: Время (в секундах) от момента вывода меню до выполнения
позиции, определенной, как «умолчание», задается командой: Позиция «по умолчанию» задается, как: Если загрузка «по умолчанию» по какой-либо причине
не возможна, то будет предпринята попытка выполнить позицию, указанную в команде: Цифры, определяющие позицию меню, могут быть, разумеется, любыми. Обратите внимание только на нумерацию – с нуля. Описание каждой из позиций меню начинается с команды: Группа команд одной позиции меню в обязательном
порядке имеет уже упомянутую команду root. ОС, хотя бы частично
соответствующие Multiboot Specification, загружаются командой kernel,
причем в строке можно указывать дополнительные параметры. Так, команда Для ОС, не соответствующих Multiboot Specification,
сначала взводится бит «активности» раздела, выбранного командой root: Поскольку ОС семейства win'9x не могут быть загружены
из соседних разделов (вне зависимости от флага активности грузится все равно
первый из разделов), для их загрузки нужно использовать команды hide
и unhide. Так, если первый и второй первичные разделы содержат
win'9x, то для загрузки второй системы нужно включить в menu.lst
следующие команды: Еще одна трудность с ОС от MicroSoft – неспособность
грузиться со второго и последующих дисков. Для ее преодоления применяют технику
«свопирования» (swapping technique), или, проще – «подмены». Во всех случаях не лишним будет сначала загрузиться
с дискеты, запустить grub и проверить, соответствует ли результат выбранных
команд ожидаемому. В командном режиме существует специальная команда, загружающая
созданный menu-файл: Еще один совет – для начала инсталлировать GRUB на дискете. Скорость загрузки с дискеты радует, что, собственно, и не удивительно: общий объем загружаемых файлов – менее 100 кбайт. Ну, и последняя рекомендация, содержащаяся в инструкциях
абсолютно ко всем менеджерам загрузки: до инсталляции нового менеджера загрузки
сохраните MBR! В unix это можно сделать командой: Сравнительный анализ различных менеджеров загрузки выходит за рамки данной статьи, но даже без такого анализа можно, наверное, согласиться, что «GRand» – вполне заслуженный титул для рассматриваемого пакета. GRUB – даже больше, чем «unified bootloader». Дискета с ним позволит проанализировать разделы потерявшего способность к загрузке винчестера, загрузить любой из первичных разделов или любое из ядер Hurd, FreeBSD, NetBSD, OpenBSD или Linux. Возможно и более «изощренное» вмешательство в структуру разделов диска, но это, пожалуй, уже другая тема. Источник - SoftТерра, http://www.softerra.ru |