3 2012-09-11
Выбор загрузчика Введение

Теперь, когда ядро настроено и собрано, а нужные конфигурационные файлы заполнены как надо, пришло время установить программу, которая будет запускать ваше ядро при старте системы. Такого рода программа называется загрузчиком.

Для архитектуры в Gentoo Linux есть загрузчики GRUB и LILO.

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

Дополнительно: кадровый буфер

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

Прежде всего, вам нужно знать ваше устройство кадрового буфера. Вы должны использовать uvesafb в качестве драйвера VESA.

Параметр video отвечает за порядок отображения кадрового буфера. В нем указывается название драйвера кадрового буфера, а затем режимы, которые нужно включить. Все режимы приведены в /usr/src/linux/Documentation/fb/vesafb.txt. Самые частоиспользуемые опции следующие:

ywrap считать, что видеоплата может закольцовывать свою память (продолжать выборку с начального адреса, когда достигнут конечный) mtrr:n установка регистров MTRR; допустимые значения n:
0 - отключено
1 - без кэширования
2 - отложенная запись (write-back)
3 - объединенная запись (write-combining)
4 - сквозная запись (write-through)
mode Установить разрешение, цветность и частоту кадров. Например, 1024x768-32@85 для разрешения 1024x768, 32-битного цвета и частоты кадров 85 Гц.
Переменная Описание

В результате должно получиться что-то вроде video=uvesafb:mtrr:3,ywrap,1024x768-32@85. Запишите составленное значение, скоро оно понадобится.

Теперь вам нужно установить загрузчик elilo.

Перейдем к установке GRUB или LILO.

По умолчанию: использование GRUB Введение в терминологию GRUB

Самое сложное в освоении GRUB — освоиться с тем, как в нем именуются жесткие диски и разделы. Ваш Linux-раздел /dev/sda1, скорее всего, в GRUB станет называться (hd0,0). Обратите внимание на круглые скобки вокруг hd0,0 — они обязательны.

Жесткие диски нумеруются, начиная с нуля, а не с «а»; разделы — c нуля, а не с единицы. Нужно помнить, что в виде hd нумеруются только жесткие диски, но не устройства atapi-ide, такие как приводы компакт-дисков. Та же нумерация используется для устройств SCSI (обычно им присваиваются номера большие, чем устройствам IDE, кроме случаев, когда BIOS настроен на загрузку с устройства SCSI). Когда BIOS настроен на загрузку с другого жесткого диска (например, с первичного ведомого), именно этот жесткий диск и становится hd0.

Например, если у вас есть жесткий диск /dev/sda, и еще два /dev/sdb и /dev/sdc, то /dev/sdb7 будет соответствовать (hd1,6). Возможно, это покажется запутанным (так и есть), но, как мы увидим, в GRUB есть механизм автодополнения по tab, облегчающий жизнь обладателям множества жестких дисков и разделов, а также тем, кто теряется в схеме нумерации устройств GRUB.

Почувствовав, что к чему, пора установить GRUB.

Установка GRUB

Для установки GRUB сначала добавим его в систему:

Если вы используете профиль без использования 32-битных библиотек, вы не должны устаналивать grub, а, вместо него, должны установить grub-static. Если вы планируете использовать профиль без использования 32-битных библиотек и в вашем ядре отключена эмуляция IA-32, вам следует использовать lilo.
# emerge grub

Хотя GRUB уже установлен, нам еще потребуется подправить его файл конфигурации, и поместить GRUB в MBR, чтобы он автоматически загружал ядро. С помощью nano (или другого редактора) создайте /boot/grub/grub.conf:

# nano -w /boot/grub/grub.conf

Теперь заполним grub.conf своими значениями. Удостоверьтесь, что у себя вы указываете имя своего файла образа ядра, и при необходимости имя своего образа начального корневого диска (initrd).

Grub назначает имена устройствам из BIOS. Если вы измените настройки BIOS, ваши буквы и цифры в именах устройств могут также измениться. Например, если вы измените порядок загрузки с устройств, вам может понадобиться также изменить вашу конфигурацию grub. Если ваша корневая файловая система — JFS, необходимо добавить «ro» в строку kernel, поскольку JFS «накатывает» свой журнал перед тем, как разрешить монтирование раздела на чтение-запись.
# какой пункт загружать по умолчанию: 0 - первый, 1 - второй и т.д.
default 0
# сколько секунд ждать до начала загрузки пункта по умолчанию
timeout 30
# симпатичная заставка, добавить по вкусу :)
# закомментируйте, если у вас не установлена графическая видеоплата
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 
# раздел с файлом образа ядра (или операционной системой)
root (hd0,0)
kernel /boot/ root=/dev/sda3

title Gentoo Linux  (rescue)
# раздел с файлом образа ядра (или операционной системой)
root (hd0,0)
kernel /boot/ root=/dev/sda3 init=/bin/bb

# следующие 4 строки нужны только, если вы также используете
# также систему с Windows. В данном случае, мы считаем, что
# Windows находится на /dev/sda6
title Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

Если при компиляции ядра Linux вы решили включить initramfs для загрузки, то вам нужно изменить конфигурацию, указав на этот файл initramfs, и сказав initramfs, где находится настоящее корневое устройство:

title Gentoo Linux 
root (hd0,0)
kernel /boot/ real_root=/dev/sda3
initrd /boot/

Если вы разбили жесткий диск по-другому, или у вас другое ядро, внесите необходимые изменения. При этом убедитесь, что все пути, следующие за упоминанием устройства GRUB (например (hd0,0)), приведены относительно точки подключения, а не корня файловой системы. Другими словами, (hd0,0)/grub/splash.xpm.gz — на самом деле /boot/grub/splash.xpm.gz, так как (hd0,0) — это /boot.

Кроме того, если вы избрали другую схему разбиения диска, и не выделяли для /boot отдельный раздел, префикс /boot, использованный в примерах выше, обязателен. Если же вы следовали рекомендованному нами плану разбиения, префикс /boot не требуется, но все работает благодаря символьной ссылке boot. Короче говоря, приведенные примеры должны работать независимо от того, есть у вас отдельный раздел для /boot или нет.

Если вам надо передать ядру дополнительные параметры, просто добавьте их в конец строки kernel. Один параметр мы уже передаем ядру (root=/dev/sda3 или real_root=/dev/sda3); можно добавлять и другие, например, параметр video для кадрового буфера, обсуждавшийся выше.

Если файл конфигурации вашего начального загрузчика содержит параметр real_root, то используйте параметр real_rootflags для установки опций монтирования корневой файловой системы.

Если вы используете ядро 2.6.7 или выше, а объем жесткого диска ограничили перемычками из-за того, что BIOS не в состоянии работать с дисками большого размера, вам потребуется добавить sda=stroke. Замените sda на устройство, которое требует данную опцию.

Тем, кто использует genkernel, нужно помнить, что их ядро использует такие же загрузочные параметры, как на установочном компакт-диске. Например, если у вас есть устройства SCSI, следует передать ядру параметр doscsi.

Теперь сохраните grub.conf и выйдите из редактора. Вам по-прежнему необходимо записать GRUB в MBR (Master Boot Record), чтобы GRUB автоматически запускался при загрузке системы.

Разработчики GRUB рекомендуют использовать grub-install. Однако, на случай некорректной работы grub-install есть возможность записать GRUB вручную.

Переходите к разделу по умолчанию: установка GRUB с помощью grub-install или альтернатива: установка GRUB вручную.

По умолчанию: установка GRUB с помощью grub-install

Для установки GRUB вам надо выполнить команду grub-install. Однако, grub-install не заработает сам по себе, т.к. мы находимся в среде с измененным корневым каталогом. Нам нужно создать файл /etc/mtab, перечислив в нем все смонтированные файловые системы. К счастью, для этого есть очень легкий способ: просто скопируйте содержимое /proc/mounts поверх /etc/mtab, исключив строку rootfs, если вы не создавали отдельный загрузочный раздел. Следующая команда подойдет в обоих случаях:

# grep -v rootfs /proc/mounts > /etc/mtab

Теперь мы можем установить GRUB, используя grub-install:

# grub-install --no-floppy /dev/sda

Если у вас есть вопросы о GRUB, пожалуйста, обратитесь к GRUB FAQ (англ.), GRUB Wiki, или прочитайте info grub в вашем терминале.

Переходите к перезагрузке системы.

Альтернатива: установка GRUB вручную

Для начала настройки, введите grub. Вы увидите приглашение grub> — это командная строка grub. Теперь потребуется набрать команды, нужные для установки загрузочной записи GRUB на ваш жесткий диск.

# grub --no-floppy
Если у вас нет приводов для дискет, к приведенной команде добавьте --no-floppy, чтобы grub зря не опрашивал несуществующие дисководы.

В приводимом примере мы хотим установить GRUB так, чтобы он считывал нужную информацию с загрузочного раздела , а загрузочная запись GRUB находилась в MBR (Master Boot Record) жесткого диска, чтобы первое, что мы видели после включения компьютера — это приглашение GRUB. Естественно, если вы при установке отклонялись от предлагаемой схемы, внесите необходимые поправки.

Находясь в GRUB, можно использовать автодополнение по клавише TAB. К примеру, если ввести «root (», а затем TAB, появится список устройств (таких как hd0). Если ввести «root (hd0,» и нажать TAB, появится список для выбора раздела из возможных (такого как hd0,0).

Благодаря автодополнению установка GRUB не так сложна. Теперь приступим к настройке GRUB.

grub> root (hd0,0)          (указание расположения раздела с /boot)
grub> setup (hd0)           (установка GRUB в MBR)
grub> quit                  (выход из оболочки GRUB)
Если вы хотите установить GRUB в определенный раздел вместо MBR, команду setup потребуется исправить так, чтобы она указывала на нужный раздел. Например, команда для установки GRUB в /dev/sda3setup (hd0,2). Однако, так поступают немногие.

Если у вас есть вопросы о GRUB, пожалуйста, обратитесь к GRUB FAQ (англ.), GRUB Wiki, или прочитайте info grub в вашем терминале.

Переходите к перезагрузке системы.

Альтернатива: использование LILO Установка LILO

LILO (сокращение от LInux LOader) — это проверенная временем рабочая лошадка среди загрузчиков Linux-систем. Но ей недостает ряда возможностей, которые есть в GRUB (и в том числе в этом заключается причина растущей популярности GRUB). LILO все еще используется, потому что на некоторых системах он работает, а GRUB — нет. Конечно же, он используется еще и потому, что многие просто знакомы с LILO и сроднились с ним. Так или иначе, в Gentoo поддерживаются оба загрузчика, и вы, видимо, решили использовать LILO.

Установка LILO в систему проста как пробка: просто используйте emerge.

# emerge lilo
Настройка LILO

Для настройки LILO нужно создать файл /etc/lilo.conf. Запустите свой любимый редактор (в руководстве мы для единообразия используем nano) и создайте файл.

# nano -w /etc/lilo.conf

Несколькими разделами раньше мы попросили вас запомнить название созданного файла образа ядра. В следующем примере lilo.conf мы используем нашу схему разбивки для примера.

Удостоверьтесь, что у себя вы указываете имя своего файла образа ядра, и при необходимости имя своего образа начального корневого диска (initrd).

Если ваша корневая файловая система — JFS, необходимо добавить «ro» в строку kernel, поскольку JFS «накатывает» свой журнал перед тем, как разрешить монтирование раздела на чтение-запись.
boot=/dev/sda         # установка LILO в MBR
prompt                # предоставление шанса выбора другого варианта
timeout=50            # ожидание пять секунд до загрузки варианта по умолчанию
default=gentoo        # по истечении времени загрузка варианта gentoo

image=/boot/
  label=gentoo        # название этого варианта
  read-only           # запуск с корневой ФС только для чтения; не менять!
  root=/dev/sda3      # расположение корневой файловой системы

image=/boot/
  label=gentoo.rescue   # название этого варианта
  read-only             # запуск с корневой ФС только для чтения; не менять!
  root=/dev/sda3        # расположение корневой файловой системы
  append="init=/bin/bb" # запустить оболочку восстановления Gentoo

# следующие две строки нужны только для двойной загрузки с Windows
# в этом примере Windows находится на /dev/sda6
other=/dev/sda6
  label=windows
Если вы разбили жесткий диск по-другому, или у вас другое ядро, внесите необходимые изменения.

Если при компиляции ядра Linux вы решили включить initramfs для загрузки, то вам нужно изменить конфигурацию, указав на этот файл initramfs, и сказав initramfs, где находится настоящее корневое устройство:

image=/boot/
   label=gentoo
   read-only
   append="real_root=/dev/sda3"
   initrd=/boot/

Если нужно передать ядру дополнительные параметры, добавьте в соответствующий раздел файла выражение append. Например, добавим параметр video для включения кадрового буфера:

image=/boot/
  label=gentoo
  read-only
  root=/dev/sda3
  append="video=uvesafb:mtrr,ywrap,1024x768-32@85"

Если вы используете ядро 2.6.7 или выше, а объем жесткого диска ограничили перемычками из-за того, что BIOS не в состоянии работать с дисками большого размера, вам потребуется добавить sda=stroke. Замените sda на имя устройства, которое требует данную опцию.

Тем, кто использует genkernel, нужно помнить, что их ядро использует такие же загрузочные параметры, как на установочном компакт-диске. Например, если у вас есть устройства SCSI, следует передать ядру параметр doscsi.

Теперь сохраните файл и выйдите из редактора. Для окончания установки нужно запустить /sbin/lilo, чтобы LILO смог отразить настройки, сделанные в /etc/lilo.conf, в вашей системе (т.е. записался на диск). Имейте в виду, что при каждой установке нового ядра или изменении меню вам потребуется выполнять /sbin/lilo заново.

# /sbin/lilo

Если у вас есть вопросы по использованию LILO, посмотрите страницу в Википедии, посвященную данной программе.

Переходите к перезагрузке системы.

По умолчанию: Установка elilo

На платформе IA64, начальный загрузчик называется elilo. Вам может понадобиться сначала установить его на вашей машине.

# emerge elilo

Файл конфигурации данной программы находится в файле /etc/elilo.conf, а файл с примерами - в обычном каталоге с документацией /usr/share/doc/elilo-<ver>/. Вот еще один пример конфигурации:

boot=/dev/sda1
delay=30
timeout=50
default=Gentoo
append="console=ttyS0,9600"
prompt

image=/vmlinuz
       label=Gentoo
       root=/dev/sda2
       read-only

image=/vmlinuz.old
       label=Gentoo.old
       root=/dev/sda2
       read-only

Строка boot указывает elilo на положение загрузочного раздела (в данном случае, это /dev/sda1). Строка delay устанавливает число 10х долей секунды, которые программа будет ждать, прежде чем автоматически загрузит значения по умолчанию в неинтерактивном режиме. Строка timeout делает примерно то же самое, что и delay, но для интерактивного режима. Строка default устанавливает значение по умолчанию (оно определено ниже). Строка append добавляет дополнительные опции к командной строке ядра. prompt устанавливает поведение elilo по умолчанию, как интерактивное.

Разделы, которые начинаются с image определяют различные загрузочные образы. Каждый образ имеет красивую метку label, корневую файловую систему root и смонтирует корневую файловую систему только для чтения (read-only).

Если при компиляции ядра Linux вы решили включить initramfs для загрузки, то вам нужно изменить конфигурацию, указав на этот файл initramfs, и сказав initramfs, где находится настоящее корневое устройство:

image=/vmlinuz
     label=Gentoo
     initrd=/
     append = "initrd= real_root=/dev/sda2 console=ttyS0,9600"
     read-only

Когда конфигурация закончена, просто запустите elilo --efiboot. Опция --efiboot добавляет пункт меню для Gentoo Linux в менеджер загрузки EFI.

# elilo --efiboot

Теперь продолжайте с Перезагрузки системы.

Перезагрузка системы

Выйдите из изолированной среды и размонтируйте все смонтированные разделы. Затем введите ту самую волшебную команду, которую вы так заждались: reboot.

# exit
cdimage ~# cd
cdimage ~# umount -l /mnt/gentoo/dev{/pts,/shm,}
cdimage ~# umount -l /mnt/gentoo{/boot,/sys,/proc,}
cdimage ~# reboot
# exit
cdimage ~# cd
cdimage ~# umount -l /mnt/gentoo/dev{/shm,/pts,}
cdimage ~# umount -l /mnt/gentoo{/boot,/proc,}
cdimage ~# reboot

Естественно, не забудьте вынуть загрузочный компакт-диск, иначе он загрузится сам вместо вашей новой системы Gentoo.

Когда вы перезагрузитесь, вы должны увидеть новую опцию с Gentoo Linux в менеджере загрузки EFI, при выборе которой произойдет загрузка Gentoo.

Загрузив вновь установленную систему, переходите к завершению установки Gentoo.