From: Vladislav Lazarenko <VLazarenko at miratech.ua>
Newsgroups: mail
Date: Mon, 11 Jun 2004 14:31:37 +0000 (UTC)
Subject: Инсталляция и конфигурация загрузчика GRUB
PDF версия документа: http://www.opennet.ru/soft/GRUB.pdf
GNU GRUB загрузчик
Автор Jaswinder Singh Kohli <jskohli at fig.org>.
На русский язык перевел Vladislav Lazarenko <VLazarenko at miratech.ua>.
______________________________________________________________________
Что такое загрузчик?
Загрузчик операционной системы - это программа, расположенная в первых
секторах жесткого диска (далее просто загрузчик), например в MBR
(главная загрузочная запись) жесткого диска. После теста системы, в
момент загрузки, BIOS (базовая система ввода-вывода) передает
управление MBR, если система настроена для загрузки из неё. Затем
программа, расположенная в MBR начинает выполняться. Эта программа
называется загрузчиком, её задача - передать управление ядру
операционной системы, которое продолжит загрузку.
Существуют несколько загрузчиков, включая GNU GRUB (универсальный
загрузчик), Boot manager, LILO (загрузчик ОС Linux), NTLDR (загрузчик
Windows NT систем) и другие. Я решил описать GNU GRUB и как его
использовать.
Что такое GRUB?
GRUB - это очень мощный загрузчик, который может загружать
разнообразные операционные системы, такие как Windows, DOS, Linux, GNU
Hurd, *BSD и другие. В данное время LILO является самым популярным
загрузчиком, используемым почти всеми c мультизагрузочными системами.
Но если Вы используете LILO, то не должны забывать перезапускать LILO
каждый раз, когда вы меняете конфигурацию или инсталлируете новое
ядро. Также LILO не такой гибкий как GRUB.
GRUB - это второе имя гибкости. Его последняя версия- 0.5.96.1. Эта
версия поддерживает такие файловые системы, как ext2 (используемая ОС
Linux), FAT16 и FAT32 (используемые Win9x и WinME), FFS (быстрая
файловая система, используемая *BSD UNIX), ReiserFS (журналируемая
файловая система, разработанная для ОС Linux и интегрированная в ядро
Linux 2.4.1) и minix (старая файловая система, разработанная для ОС
MINIX, используемая также в ранних версиях ОС Linux). С GRUB Вы можете
"видеть" содержимое файловой системы без загрузки операционной
системы. Например, если Вы хотите посмотреть дату и время, записанные
в файле, но не имеете времени для загрузки операционной системы, то
можете использовать командную строку GRUB ("grub>") и написать:
Вы получите полное содержимое файла, включая дату и время.
Самая большая польза загрузчика GRUB в том, что он может загрузить
любое ядро из любого раздела диска. Например, если Вы забыли добавить
недавно откомпилированное ядро в список, компьютер должен нормально
загрузиться, добавить его в список и перезагрузиться, чтобы его
использовать. Но Вы можете легко использовать командную строку
загрузчика GRUB и загрузить нужное ядро.
Сейчас я объясню три главных шага для использования GRUB: компиляция,
инсталляция и конфигурация.
Шаг 1: Компиляция и инсталляция программного пакета GRUB
--------------------------------------------------------
Загрузите исходные тексты GRUB с ftp://alpha.gnu.org/pub/gnu/grub/
Распакуйте архив командой "tar -xvzf filename.tar.gz". В моем случае
имя файла было grub-0.5.96.1.tar.gz и я сделал:
# tar -xvzf grub-0.5.96.1.tar.gz
Эта команда извлекла из архива файлы и папки в папку с именем
"grub-0.5.96.1". Теперь делайте следующее:
[root@heaven ~/grub-0.5.96.1 ]# ./configure
Если Вы хотите изменить некоторые настройки компиляции, например,
добавить или удалить поддержку индивидуальных файловых систем, сетевых
карточек, наберите:
Эта команда выведет на экран все возможные опции. Теперь используйте
-enable и -disable префиксы для добавления или удаления поддержки
некоторых устройств и т.п.
(ПРИМЕЧАНИЕ: GRUB поддерживает сетевую загрузку.)
Для начала процесса компиляции, наберите:
[root@heaven ~/grub-0.5.96.1 ]# make
Для инсталляции всех файлов наберите:
[root@heaven ~/grub-0.5.96.1 ]# make install
Вы установили программный пакет GRUB, теперь можно приступать к
установке загрузчика GRUB в загрузочный сектор.
Хорошей идеей является хранить все файлы загрузчика, относящиеся к
загрузке в директории /boot/grub. Для того, чтобы сделать это,
следуйте следующему примеру:
1. По умолчанию все файлы загрузчика проинсталлированы в
/use/share/i386-pc или в /use/local/share/grub/i386-pc в зависимости
от того, как определены переменные среды.
2. Создайте каталог /boot/grub. Затем скопируйте следующие файлы в
папку:
stage1
stage2
*_stage1_5
Я опишу эти файлы позже. Также скопируйте программу GRUB (которая
может находиться в каталоге /usr/sbin или в /use/local/sbin) в папку
/boot/grub.
Перед тем, как инсталлировать GRUB, Вы должны знать о том, как GRUB
воспринимает жесткий диск и информацию о разделах. Прежде всего,
отсчет начинается с 0, а не с 1. В Linux первый жесткий диск,
прикрепленный к основному контроллеру, называется "hda", а в GRUB он
называется "hd0". Подобно этому, дисковод в GRUB называется "fd0".
Итак, первый, второй и третий раздел на первом жестком диске (hda1,
hda2, hda3) называются "hd0,0", "hd0,1" и "hd0,2" в GRUB. ПРИМЕЧАНИЕ:
запятая - это неотъемлемая часть названия раздела жесткого диска в
GRUB.
Для описания двух полей (диск и номер диска, номер раздела диска)
используйте круглые скобки. Например: (hd0,0) (hd0,1) (hd0,2) и так
далее. (hd0,0) - это первый раздел первого диска. Подобным образом,
(hd1,5) - это шестой раздел второго диска, а (hd2,0) - первый раздел
третьего диска.
Инсталляцию непосредственно загрузчика можно разделить на три этапа:
1. Инсталляция "stage1" в MBR.
2. Настройка адреса или расположения, "stage2".
3. Настройка меню загрузки или набора опций для выбора операционной
системы для загрузки.
Начните инсталляцию со следующих команд:
[root@heaven /boot/grub ]# ./grub
Эта команда опрашивает устройства и выводит сообщения. Это может
занять много времени.
end_request: I/O error, dev 02:00 (floppy), sector 0
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
ПРИМЕЧАНИЕ: GRUB имеет минимальную оболочку, похожую на bash. Для
первого слова TAB выводит все возможные завершения команды. В других
случаях TAB выводит возможные завершения названий устройств, имен
файлов. Вы можете быть удивлены этой возможностью. Нечто вроде этого
может произойти:
grub>
Будем считать, что Linux установлен на первом дополнительном разделе
первого жесткого диска или на /dev/hda5. Помните, что в GRUB он будет
называться (hd0,4). Введите следующую команду:
grub> install (hd0,4)/boot/grub/stage1 (hd0)
(hd0,4)/boot/grub/stage2 p (hd0,4) /boot/grub/menu.conf
Теперь давайте рассмотрим эту команду более детально:
(hd0,4)/boot/grub/grub/stage1 to (hd0), MBR.
(hd0,4)/boot/grub/stage2
указывает, где расположен stage2 образ.
p со следующими опциями: (hd0,4)/boot/grub/menu.conf
устанавливает конфигурационный файл для отображения нужного меню.
Позже я объясню структуру конфигурационного файла.
Мы можем суммировать команды:
1. install
2. source_of_stage1
3. where_to_install
4. source_of_stage2
5. p source_of_configuration_file
Теперь у Вас есть элементарная инсталляция.
Инсталляция на дискету:
Для инсталляции GRUB на дискету Вы должны знать команду "dd" и как она
работает. Для загрузочной GRUB дискеты Вы должны записать stage1 и
stage2 файлы на первые секторы дискеты.
Здесь все, так же как и для stage1, за исключением нового параметра,
называемого seek. Этот параметр заставляет пропустить одно "bs"
значение. Например, в выше описанной команде bs - это 512 байт, тогда
seek=1 будет означать пропуск первых 512 байт на дискете и продолжение
записи с 513-го байта. Это сохранит результат первой команды,
записанные данные не будут повреждены переписыванием.
Теперь у Вас есть простейшая инсталляция GRUB загрузчика на дискете.
Шаг 3: Конфигурация GRUB
------------------------
В этой секции мы рассмотрим, как загружать разные операционные системы
и составить menu.conf - конфигурационный файл меню.
Давайте начнем с процедуры загрузки, поддерживаемой GRUB. Загрузка
может быть выполнена двумя путями:
* 1) Передача управления ядру ОC
* 2) Передача управления другому загрузчику
Загрузочная процедура по первому методу:
1. Указать корневое устройство или корневую файловую систему.
2. Указать GRUB место нахождения ядра системы и параметры.
3. Перезагрузить компьютер и испробовать это.
У меня ядро Linux находится в каталоге /boot под названием bzImage, а
корневая файловая система - /dev/hda5 или (hd0,4) в GRUB.
Следовательно, моя процедура загрузки выглядит следующим образом:
1. root (hd0,4) [Указывает корневой раздел]
2. kernel /boot/bzImage root=/dev/hda5 [Указывает ядро]
3. boot [Начинает загрузку Linux]
Загрузочная процедура по второму методу подразумевает наличие другого
загрузчика, например LILO или NTLDR, установленного в один из разделов
жесткого диска:
1. Указать корневой раздел, но не монтировать его.
2. Активировать раздел
3. Указать первый сектор устройства, которому будет передано
управление.
4. Перезагрузить компьютер и испробовать это.
Приведу пример с ОС Windows, проинсталлированной в /dev/hda1 или
(hd0,0). процедура загрузки Windows следующая:
1. rootnoverify (hd0,0)
2. makeactive
3. chainloader +1 [+1 указывает первый сектор текущего основного
раздела]
4. boot [передает контроль]
menu.conf файл используется для загрузки различных операционных систем
и конфигурации меню. Составить menu.conf файл не сложно. Как Вы
увидите в этом разделе, в нем используется текст на английском языке.
Все записи меню начитаются с "title TITLENAME" без запятых. Вы можете
присвоить TITLENAME что угодно.
Для создания меню загрузки Linux:
1. Установите title.
2. Установите корневой раздел.
3. Установите ядро и параметры.
4. Загрузитесь.
Для создания работающего меню:
title Debian GNU/Linux 2.2 kernel 2.4.1
root (hd0,4)
kernel /boot/bzImage.2.4.1
boot
#----
(Символ (#) в начале строки обозначает комментарий.)
Чтобы создать меню для Windows или DOS:
title Windoze
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
А что если Вы хотите установить на ваш компьютер два экземпляра
операционной системы Windows, одну лично для себя, другую для своей
семьи, а Windows при установке сообщает, что уже один экземпляр ОС
установлен ?
Существует легкий путь инсталляции двух экземпляров ОС на Ваш
компьютер путем скрытия одного из разделов жесткого диска в момент
загрузки и использования другого. При этом Вы можете защитить раздел
паролем, так что никто не сможет использовать его по ошибке. Ниже
приведен пример, как создать несколько экземпляров ОС Windows, hda1 и
hda2 или (hd0,0) и (hd0,1), используя команды lock, password, hide и
unhide.
Для ОС Windows "My Entry":
title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
Для эффективного использования команды lock Вы должны указать команду
password в начале конфигурационного файла. Синтаксис команды password
следующий: password secret ("secret" - это пароль). Вы можете ввести
пароль в любое время с помощью нажатия клавиши p.
Для ОС Windows "Family Entry":
title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
----
Любой может загрузиться с этих разделов, если не требуется пароль.
Существует ещё один интересный трюк с использованием команды password.
Для скрытия элементов в списке конфигурационного файла по умолчанию,
Вы можете загрузить собственный список, используя следующую команду:
password secret
/boot/grub/secret-list.conf В этой команде "secret" - это пароль, а /boot/grub/
secret-list.conf - это файл паролей. Перед тем, как делать это, Вы должны
установить корневой раздел и полный путь. Например:
Ещё одной важной командой является команда "map", которую Вы можете
использовать, когда у Вас есть два жестких диска и операционная
система, которая не может загружаться со второго диска, например ОС
Windows. Вы можете отобразить hd0 как hd1 и hd1 как hd0. Другими
словами, можно виртуально переставлять жесткие диски. Пример:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
Для загрузки ОС FreeBSD:
title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#----
Здесь мы передаем управление загрузчику ОС FreeBSD. Вы видите, что
корневой раздел (hd0,4,a) включает три аргумента, это потому, что
FreeBSD виртуально делит существующий раздел жесткого диска. Мы
передаем управление корневому подразделу раздела жесткого диска "a".
Если FreeBSD полностью занимает диск вашей системы, тогда корневой
подраздел будет называться (hd0,a). Итак, мы передаем управление
загрузчику FreeBSD, что намного лучше, чем передать управление
непосредственно ядру этой ОС по ряду причин.
(ПРИМЕЧАНИЕ: ОС OpenBSD и GNU/Hurd ещё не тестировались, рекомендую
использовать передачу управления загрузчикам этих ОС вместо ядра).
Вы ознакомились с базовой инсталляцией пакета GRUB, непосредственно
загрузчика, а так же базовой конфигурацией. Чем больше Вы будете
узнавать GRUB, тем больше будете находить его самым мощным средством
управления загрузкой.
Различные команды GRUB:
default xx
xx - это метка для загрузки по умолчанию.
timeout yy
yy - это таймаут, после которого GRUB начнет загрузку по умолчанию.
fallback zz
zz - это метка для загрузки, которую GRUB станет загружать, если по
истечении таймаута не удастся загрузить метку по умолчанию.
color
Используется для раскраски меню. Синтаксис следующий: color normal
current_selection. Оба поля могут иметь два значения, такие как
приоритетный и фоновый цвета. Например:
color green/black or light-gray/blue
Вы также можете использовать соответствующие номера.
ЗАПОМНИТЕ: все значения начинаются с 0, следовательно, 0 - первый
элемент.
В моей следующей статье я планирую протестировать Fire GNU/Hurd,
OpenBSD и, может быть, некоторые методы сетевой загрузки. Выход
следующей статьи планируется через 3 месяца, следите.
Любые комментарии или информацию об ошибках Вы можете прислать мне на
email: jskohli at fig.org. Любые ошибки перевода или комментарии Вы
можете прислать переводчику статьи на русский язык: VLazarenko at miratech.ua.