Подписаться  на наше издание быстро и дешевле чем где-либо Вы можете прямо сейчас! Подписаться! 


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

ВСЕ ЛУЧШЕЕ в этом мире создано людьми неравнодушными. В этом очередной раз можно убедиться, посмотрев, что пишет о своем детище Гордон Матзикейт (Gordon Matzigkeit), который входит в команду разработчиков одного из лучших дисковых загрузчиков операционных систем GRUB (GRand Unified Bootloader — "основной объединенный загрузчик"). На странице официальной документации он так рассказывает о роли загрузчиков: "Некоторые люди путают понятие ядра и операционной системы, когда говорят о своем компьютере. Из их уст можно услышать, например, GNU/Linux или GNU/Hurd.

Другие считают, что ядро ОС играет более важную роль, чем остальная структура. Они говорят "Linux системы". Я же думаю, что загрузчик системы имеет самое важное значение в компьютере, и считаю, что можно говорить о GRUB- или LILO-системах". Конечно, в этой цитате есть много юмора, но такое отношение к своему продукту, тем не менее, заслуживает уважения.

Что же такое GRUB и почему он стал официальной частью всех современных Linux? В x86 системах, первоначальное включение компьютера проходит через несколько стадий. Первая это POST (Power On Self Test), конечным результатом которой является обнаружение блочных устройств( жестких дисков, флоппи-контроллеров и т.п.). Далее BIOS выбирает один из дисков, загружает первый сектор (512 байт) в оперативную память и предает управление этому блоку кода. Эта маленькая программа именуется MBR (Master Boot Record, главная загрузочная запись) и она уже дальше ответственна за загрузку операционной системы.


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


Стартовать по новому


Программ, реализующих вариантную загрузку ОС существует достаточно много. Это и фирменная разработка Microsoft, позволяющая параллельно существовать на винчестере нескольким копиям Windows(а если постараться то и других ОС). Другим распространенным случаем есть LILO (LInux LOader), также умеющий загружать разные системы по выбору пользователя. Есть и много других. Но даже при таком изобилии этих загрузчиков, у пользователя оставалось интуитивное впечатление какой-то бреши в данном сегменте компьютерных разработок.


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


Разработку спецификации Multiboot Specification, описывающей универсальный механизм запуска нескольких ОС, связывают с GNU/Hurd. По сути она является не технологией, а протоколом, описывающим интерфейс между загрузчиком и операционной системой. К сожалению, большинство коммерческих ОС построены не учитывая пожелания данной инициативы Free Soft Fundation. С другой стороны, практически все открытые ОС как раз ориентированы на внедрение Multiboot.


В частности, загрузчик GRUB является достойным примером реализации этой разработки на практике. Кстати, он может использоваться не только для работы с ОС поддерживающими технологию Multiboot, но и многими другими (Windows, например), через включение традиционного механизма цепочечной загрузки "chain-loader".


Маленький чародей


В 1995 году Эрик Болин (Erich Boleyn) начал разрабатывать GRUB как проект по адаптации FreeBSD к протоколу Multiboot. В 1999 г. к этой работе подключились Гордон Матзикейт и Йошинори Окуи (Gordon Matzigkeit и Yoshinori Okuji), которые вывели работу в пространство GNU.


Интересно, что большие и "монстровитые" операционные системы, которые мы знаем сегодня, в своей работе опираются на массу совсем маленьких по объему утилит, которые, тем не менее, имеют критичную для всей системы роль. Загрузчики ОС, традиционно являются компактными, ведь их нужно уместить в 512 байт кода. Но если с этой точки зрения посмотреть на GRUB, то поражаешься его возможностям:

  • загрузка *NIX систем(FreeBSD, NetBSD, OpenBSD и Linux);
  • загрузка коммерческих ОС(DOS, Windows NT и OS/2) посредством chain-loader;
  • выполнение кода в виде a.out и ELF;
  • хранение конфигурационного файла в виде доступного человеку текста;
  • использование интерактивного командного языка на этапе загрузки;
  • предоставление пользователю удобного меню;
  • "понимание" почти всех распространенных файловых систем(BSD FFS, DOS FAT16 и FAT32, Linux ext2fs, ReiserFS, JFS, XFS);
  • предоставление доступа ко всем блочным устройствам, инициализированным BIOS;
  • возможность сетевой загрузки компьютера;

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


Вживление


Процесс установки загрузчика сложно назвать инсталляцией — это слишком тонкая операция. Кстати, для данного действия предлагается два метода: простой — с применением утилиты grub-install и более сложный — с помощью команд оболочки.

 

Архитектура компонентов GRUB включает в себя несколько модулей и файл конфигурации. Первый модуль называется stage1 и служит для старта загрузчика. Он записывается в первый сектор диска, то есть в MBR, или в начало первичного логического раздела диска, то есть в загрузочный сектор. Размер этого модуля равен 512 байт.

 

Задача stage1 в том, чтобы загрузить stage2 или stage1_5 с диска. При этом, размещение этих файлов кодируется в терминах цилиндр/головка/сектор, и значит на этом этапе еще не требуется распознавание типа файловой системы. С другой стороны, для возможности работы с дисками больших объемов, требуется поддержка LBA. Для GRUB это не проблема.


Модуль stage1_5 наделен большим интеллектом — в него встроена поддержка файловых систем. Существует несколько разновидностей этого компонента GRUB: e2fs_, fat_, ffs_, reiserfs_ и xfs_stage1_5. Каждая разновидность предназначена для определенной файловой системы. В задаче этой программной части GRUB — загрузить ядро stage2. При этом последний модуль может изменить свое расположение, но все равно будет обнаружен предыдущим модулем.


Кроме этих основных модулей stage* есть еще несколько, более специфических: stage2_eltorito для установки GRUB на компакт-диск, nbgrub и pxegrub для сетевой загрузки.


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


Процесс установки GRUB состоит в том, чтобы записать и модули и конфигурационный файл в надлежащие для этого места. Вначале эти файлы находятся в /usr/lib/grub/i386-pc работающей среды. Но они должны будут перемещены в секторы загрузочного диска и в точку /boot/grub файловой системы. Сюда же должен быть помещен конфигурационный файл grub.conf или menu.lst.


Так как начальная точка установки компонентов есть /boot/grub, то имеется один нюанс. Под раздел /boot может быть выделен отдельный логический диск, а можно обойтись и без этого, разместив файлы в корневой системе. Поэтому, при установке GRUB следует указать корневую точку размещения загрузчика.


Как мы говорили, данная утилита реализует командный язык. Для того, чтобы определить точку /boot она в том или ином виде выполняет внутреннюю команду root. Синтаксис ее выглядит так: root (hdx,y). Тут x это номер блочного устройства (отсчет от нуля), а y это номер раздела на этом устройстве(отсчет от нуля). Например, если мы на первом винчестере выделили три раздела "/", "/boot", и "swap", то потребуется выполнить такую команду: root (hd0,1). А если у нас "/"- это весь первый винчестер, и /boot это просто директория в корневой системе то тогда: root (hd0,0). Для BSD-систем, где используются слайсы (slice), требуется еще указывать и буквенный идентификатор раздела. К примеру, (hd1,0,a) или (hd1,a) это одно и тоже. Ведь если пропускается номер слайса, то ищется первый по очереди. Расширенные разделы начинают нумероваться с четырех. И еще, очень важно, GRUB не делает разницы между IDE дисками и SCSI. То есть обозначений типа sd0,sd2 и подобных тут нет. Все винчестеры именуются как hdx. А вот флоппи-диск обозначается как fd0, компакт диск как cd.


Другая важная команда установщика это setup - она делает stage1 загрузочным. Обычный синтаксис это setup (hdx) или setup (hdx,y). Именно setup (hd0) записывает stage1 в MBR первого винчестера, а setup (hd1,0) в загрузочную запись второго винчестера. Рекомендуется размещать GRUB в главной загрузочной записи, а значит типичный вид команды это setup (hd0).


Для того, чтобы установить GRUB как загрузчик, мы вначале должны проинсталлировать его инструментарий в UNIX-систему. Например, загрузить этот пакет со страницы проекта http://www.gnu.org/software/grub/ и скомпилировать его в обычный способ. По другому, можно добиться того же результата если воспользоваться загрузочной дискетой или компакт-диском, уже имеющим необходимые утилиты. Вообще, можно рассчитывать практически на любой современный инсталляционный диск Linux. Стандартным сценарием установки GRUB есть копирование всех файлов stage* в директорию /boot/grub, и создание там же правильного конфигурационного файла, содержащего меню загрузки. Если вы установили в своей системе пакет GRUB, то скорее всего эта работа уже сделана за вас. Иначе все надо проделать вручную(или воспользоваться grub-install). Это же означает, что для использования этого загрузчика отдельно от систем UNIX, нужно создавать отдельный раздел для /boot.


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


#grub
grub>root (hd0,0)
grub>setup (hd0)
grub>quit
#


Кстати, оболочка поможет вам правильно написать опции команд, если нажимать клавишу TAB. например, если набрать root ( и нажать TAB, то строка будет дополнена до root (hd0, .Тоже относится и команде setup. Если же вы совсем запутались, то можно воспользоваться опцией поиска: find /boot/grub/stage1 которая найдет все диски, содержащие модуль stage1.


Однако этот способ является боле сложным. Легче воспользоваться специальной утилитой grub-install. Ее синтаксис — grub-install [--root-directory=dir] dev. Здесь dev — блочное устройство, на которое следует установить загрузчик. При этом оно может быть указано в терминах ОС или GRUB. Если директория с модулями не должна быть корневой (например, вы загрузились с CD и смонтировали жесткий диск в /mnt/gentoo), необходимо задать опцию root-directory=/mnt/gentoo.


Таким образом, процесс установки загрузчика несложен. Единственное, что может вызвать затруднения, — это правильная конфигурация GRUB с помощью конфигурационного меню.

 


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


Как уже говорилось, информацию о необходимых действиях GRUB черпает в файле конфигурации grub.conf (или menu.lst для некоторых версий, это можно узнать из документации). Этот файл должен находиться в директории grub (если вы выделили для /boot отдельный раздел), или в /boot/grub раздела диска. Синтаксис его не сложен, но насчитывает большое число конструкций, чтобы реализовать огромные возможности GRUB. Один из лучших способов сэкономить время, это изучать предмет на практичном примере. Берем стандартный — загрузка Linux. В этом случае grub.conf может выглядеть так:


default 0
timeout 10
title Fedora Core 4(vanilla kernel)
root (hd1,0)
kernel /boot/vmlinuz root=/dev/hdb1
boot


Расшифровываются эти опции так:

  • default указывает какой блок по счету будет загружаться автоматически, если пользователь не сделает никакого выбора;
  • timeout определяет счетчик в секундах, прежде чем начнется загрузка;
  • title обозначает начало нового блока; строчка следующая сразу после него это заголовок блока, который отображается в экранном меню;
  • root (hd1,0) указывает на корневую точку, относительно которой будет описываться расположение файлов;
  • kernel указывает на ядро ОС и его параметры; в данном случае мы видим, что ядро vmlinuz находится в директории /boot первого раздела, второго жесткого диска;
  • boot это команда конца блока и старта загрузки; эта опция необязательна и будет подставлена автоматически, перед следующей опцией title;

Теперь добавляем новую операционную систему:


title FreeBSD
root (hd0,2,a)
kernel /boot/loader


Здесь старт системы происходит со слайса "a", третьего раздела, первого жесткого диска.


title Windows NT / Windows 95 boot menu
root (hd0,0)
makeactive
chainloader +1


Здесь встречаются уже две новые опции:

  • makeactive устанавливает метку "загрузочный" на текущий раздел; это необходимо для старта операционных систем Microsoft;
  • chainloader file инициирует использовать file как загрузчик в цепочечной модели(chine-load); в данном примере +1 обозначает, что в качестве file нужно использовать первый сектор раздела диска.

Что касается DOS/Windows-систем, они не могут загружаться со второго физического диска (если не изменить соответственно установки BIOS). Эту проблему также поможет решить изучаемая утилита с помощью следующего кода:


map (hd0) (hd1)
map (hd1) (hd0)


Еще одна интересная возможность GRUB состоит в скрытии определенных разделов диска для DOS/Windows. Это может быт полезно, если у вас на диске установлено несколько таких ОС, что может вызвать трудности в их старте. В этом случае используем:


hide (hd0,0)
unhide (hd0,1)


В этих строках происходит скрытие первого раздела первого диска, а второй раздел этого диска получает статус видимости.

 

Съемные носители бывают полезны

 

При различных манипуляций, проводимых системным администратором, очень кстати бывает наличие загрузочного носителя на дискете или компакт диске. Как же можно поместить GRUB на таких устройствах?


Что касается дискеты, это будет выглядеть так:


cd /usr/lib/grub/i386-pc
dd if=stage1 of=/dev/fd0 bs=512 count=1
...
dd if=stage2 of=/dev/fd0 bs=512 seek=1


Вначале, чтобы упростить работу команде dd, переходим в директорию с обрзами GRUBа. После этого внедряем модули stage1 и stage2 в первый и второй сектор дискеты. Так же как и для других случаев, ничто не мешает вам использовать grub-меню для такой дискеты, и по выбору загружать DOS(например, записанный в третью дорожку диска), или UNIX, используя локальную сеть.


Конечно, сегодня в качестве основного переносного устройства чаще используется CD/DVD. Тут и возможностей побольше, да и распространение у таких носителей получило очень широкое. Поэтому давайте научимся "грабизировать" и оптические носители информации.


Для этого, нам понадобится специальный модуль, входящий в состав пакета GRUB - stage2_eltorito. Он нужен для поддержки не эмулированной загрузки в режиме El Torito. Теперь в созданную директорию iso/boot/grub копируем файлы загрузчика (не забываем про stage2_eltorito), а в директории iso создаем структуру системы загружаемой с компакта. Теперь создаем iso-образ:


#mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \
-boot-load-size 4 -boot-info-table -o grub.iso iso


Теперь с помощью доступных вам утилит записи CD можно прожечь образ grub.iso

 

Давайте пользоваться


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

 

НА ЗАМЕТКУ

 

"Википедия" о MBR


Одним из важных элементов загрузки систем является MBR — главная загрузочная запись. Вот какое определение дает "Википедия" (Wikipedia), онлайновая энциклопедия, основанная Уэльсом (Wales) и Сенгером (Sanger) в 2001 году: "В IBM PC-архитектуре MBR — это загрузочный сектор размером 512 байт, который находится в начале жесткого диска и содержит последовательность команд, необходимых для старта ОС. Микропрограмма BIOS, отвечающая за старт компьютера, ответственна за загрузку и выполнение кода MBR. В свою очередь, главная загрузочная запись обычно содержит таблицу разделов (Partition Table), которая используется для поиска загрузочного сектора логического диска, помеченного флагом активности. Такая технология позволяет BIOS загружать любую ОС без необходимости прошивки в нее информации о разделе, на котором находится операционная система. MBR — это программа, которая является первой из выполняемых, и этим пользуются вирусы, чтобы влезть в систему еще до того, как начнет работать антивирусный сканер. Архитектура процессоров семейства i386 предполагает выполнение кода в реальном режиме, поэтому и машинный код MBR является кодом реального режима выполнения. Необходимость иметь MBR есть только у носителей, которые могут быть разбиты на разделы (жесткие диски), для остальных носителей достаточно иметь загрузочную запись в первом секторе пространства".

2006.05.12
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".