В реальной жизни всегда есть выбор. Сегодня мы имеем возможность выбирать между двумя популярными загрузчиками: LILO и GRUB. LILO — это традиционный загрузчик Linux, очень стабильный и снабженный хорошей документацией. Но в настоящее время он быстро вытесняется загрузчиком GRUB, который является используемым по умолчанию в системах Red Hat, SUSE и Fedora. Фактически дистрибутивы Red Hat и Fedora вообще не содержат LILO. С другой стороны Debian продолжает использовать LILO.
GRUB: универсальный загрузчик
Этот загрузчик может быть использован в любой Linux-системе и особенно популярен среди пользователей, которые устанавливают несколько операционных систем на одном компьютере. Им также пользуются разработчики ядра. Загрузчик GRUB полезен, когда конфигурация системы часто меняется. В отличие от загрузчика LILO, который при каждом изменении его конфигурации должен быть повторно записан в главную загрузочную запись (ГЗЗ) или в загрузочный сектор, GRUB читает свой конфигурационный файл в ходе начальной загрузки, поэтому дополнительный этап не нужен.
GRUB инсталлируется на загрузочный диск с помощью команды grub-install
, которая в качестве аргумента принимает имя загрузочного устройства. К сожалению, у загрузчика GRUB используются свои правила именования физических дисков, отличающиеся от стандартных соглашений, принятых в Linux (хотя GRUB может применять также и стандартные имена Linux). Имя устройства в загрузчике GRUB выглядит примерно так:
(hd0,0)
Первое числовое значение определяет номер физического диска (нумерация ведется с нуля), а второе — номер раздела (правила нумерации аналогичны). В данном примере запись (hd0,0)
соответствует устройству /dev/hda1
. Следовательно, если нужно инсталлировать загрузчик GRUB на основной жесткий диск, воспользуйтесь такой командой:
# grub-install '(hd0,0)'
Кавычки необходимы, чтобы интерпретатор команд не пытался интерпретировать скобки по-своему.
По умолчанию GRUB читает параметры загрузки из файла /boot/grub/grub.conf
. Вот его образец:
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.6.9-5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.9-5 ro root=/dev/hda1
В этом примере конфигурируется единственная операционная система, которая будет загружена автоматически (default=0
), если в течение 10 секунд с клавиатуры не поступят никакие данные (timeout=10
).
Корневая файловая система для конфигурации Red Hat Linux находится в разделе (hd0,0)
. GRUB загрузит ядро из файла /boot/vmlinuz-2.6.9-5
, а затем выведет начальный образ экрана, хранящийся в файле /boot/grub/splash.xpm.gz
.
GRUB поддерживает мощный интерфейс командной строки и ряд функций, которые позволяют редактировать записи файла конфигурации в ходе загрузки. Чтобы перейти в режим командной строки, в окне загрузки GRUB необходимо ввести команду c. Из командной строки можно загружать операционные системы, не отраженные в файле grub.conf
, выводить на экран информацию о системе и выполнять простейшую проверку файловой системы. Загрузчик предоставляет также ряд функций, подобных функциям интерпретатора команд, в том числе — функции завершения не полностью введенных команд и перемещения курсора. Любые действия, которые могут быть выполнены с помощью файла grub.conf
, могут быть выполнены и посредством командной строки загрузчика GRUB.
Нажатие клавиши <Tab>
позволяет вывести на экран краткий список доступных команд. Некоторые из наиболее полезных команд перечислены в табл. 1.
Таблица 1. Параметры командной строки GRUB
Команда | Назначение |
reboot | Мягкая перезагрузка системы |
find | Поиск файла во всех смонтированных логических разделах |
root | Указание корневого устройства (логического раздела) |
kernel | Загрузка ядра с корневого устройства |
help | Вывод интерактивной справки по команде |
boot | Загрузка системы с указанного образа ядра |
Для получения подробной информации о загрузчике GRUB и его параметрах командной строки обратитесь к официальному руководству:
LILO: традиционный загрузчик Linux
Конфигурирование и инсталляция загрузчика осуществляется с помощью команды lilo
, которая извлекает параметры конфигурации из файла /etc/lilo.conf
. Чтобы изменить настройки загрузчика, нужно отредактировать этот файл и повторно выполнить команду lilo
. Эту процедуру необходимо проделывать всякий раз при изменении процесса загрузки — в частности, когда добавляется новый загрузочный раздел или создается новое ядро.
Загрузчик LILO может быть установлен в главную загрузочную запись диска или в загрузочную запись корневого раздела Linux.
Ниже приведено содержимое файла lilo.conf
для системы, в которой имеются рабочее и резервное ядра:
boot=/dev/hda # помещаем загрузчик в ГЗЗ
root=/dev/hda1 # задаем корневой раздел
install=/boot/boot.b
map=/boot/map
delay=20 # двухсекундная задержка, дающая пользователю возможность вмешаться
image=/vmlinuz # загружаемое ядро
label=linux # метка ядра
read-only
image=/vmlinuz-backup # резервное ядро
label=backup
read-only
Каждому возможному сценарию загрузки присваивается метка. Введя метку на этапе загрузки, можно сообщить программе LILO о том, какой из сценариев следует выбрать. Сценарий, который указан в файле lilo.conf
первым, выбирается по умолчанию.
В стандартном сценарии (метка linux
) загружается файл /vmlinuz
. Флаг read-only
указывает на то, что ядро монтирует свою корневую файловую систему в режиме только для чтения. Этот флаг должен всегда присутствовать. Сценарии запуска системы позаботятся о том, чтобы повторно смонтировать раздел в режиме чтения/записи, когда воз
никнет такая необходимость. Система сконфигурирована таким образом, чтобы в случае сбоя загружалось резервное ядро (файл /vmlinuz-backup
). Наличие подобной возможности никогда не помешает.
Если ввести команду lilo
без аргументов, она создаст и инсталлирует программу загрузки, сообщив о том, какие ядра доступны. Название основного ядра будет помечено звездочкой. Ошибки, присутствующие в файле lilo.conf
, не будут обнаружены до тех пор, пока процедура инсталляции загрузчика не достигнет середины. В этом случае система окажется в переходном состоянии. Не перезагружайте ее, пока очередной запуск команды lilo
не даст положительных результатов.
Чтобы не попасть в подобную ситуацию, воспользуйтесь командой lilo -t
, которая протестирует файл, не выполняя инсталляцию. Если ошибок не выявлено, переходите к процедуре инсталляции. Честно говоря, непонятно, почему команда lilo
не делает такую проверку автоматически.
В случае показанного выше конфигурационного файла результаты работы команды будут такими:
# lilo
Added linux*
Added backup
При загрузке системы программа LILO выдаст следующее приглашение:
LILO:
После двухсекундной паузы (параметр delay
, равный 1, соответствует десятой доле секунды, а в рассматриваемом файле lilo.conf
он равен 20) будет загружено ядро /vmlinuz
, а в качестве корневого будет смонтирован первый раздел первого IDE-диска. Список сценариев загрузки можно просмотреть, нажав клавишу <Tab>
:
LILO: <Tab>
linux backup
LILO:
Чтобы загрузить нужное ядро, введите его метку в строке приглашения.
Параметры ядра
Программы загрузчиков LILO и GRUB позволяют передавать ядру параметры командной строки. Как правило, эти параметры изменяют значения параметров ядра, вынуждают его опросить конкретные устройства, указывают путь поиска демона init
или назначают конкретное корневое устройство. Несколько примеров этих параметров приведены в табл. 2.
Таблица 2. Примеры параметров ядра времени выполнения
Параметр | Назначение |
init=/sbin/init | Сообщает ядру путь к демону init |
init=/bin/bash | Заставляет ядро запускать только интерпретатор bash ; используется при восстановлении системы в случае сбоев |
root=/dev/foo | Сообщает ядру о том, что корневым является устройство /dev/foo |
single | Задает режим однопользовательской загрузки |
Мультисистемная загрузка на персональном компьютере
Поскольку на одном персональном компьютере может быть установлено несколько операционных систем, привычной является ситуация, когда компьютер загружается в мультисистемном режиме (мультизагрузка). Для этого загрузчик должен быть правильно сконфигурирован, чтобы распознать имеющиеся на локальных дисках операционные системы.
В каждом разделе диска может храниться собственный вторичный загрузчик, однако главная загрузочная запись только одна. Поэтому необходимо решить, какой из загрузчиков будет “главным”. Как правило, выбор диктуется особенностями имеющихся операционных систем. Если одной из них является Linux, то лучше всего в качестве главного загрузчика выбрать LILO или GRUB. Заметим, что в данной конкретной ситуации загрузчик GRUB проявляет себя лучше, чем LILO.
Мультисистемное конфигурирование GRUB
Конфигурирование загрузчика GRUB для выполнения мультисистемой загрузки во многом аналогично конфигурированию загрузки только одной операционной системы. Прежде чем вносить изменения в файл /boot/grub/grub.conf,
необходимо установить необходимые операционные системы.
Записанные в файле grub.conf
параметры конфигурации для загрузки ОС Windows, отличаются от параметров для загрузки UNIX или Linux:
title Windows 10
rootnoverify (hd0,0)
chainloader +1
Параметр chainloader
загружает утилиту начальной загрузки из указанного места (в данном случае из сектора 1 первого раздела первого IDE-диска). Параметр rootnoverify
предотвращает попытки загрузчика GRUB выполнить монтирование указанного раздела. Он избавляет загрузчик GRUB от необходимости проверять непонятные для него разделы, такие как разделы NTFS или размещенные вне области, в которой GRUB может выполнять чтение.
Ниже приведен полный текст файла grub.conf
для случая, когда Windows 10 загружается из первого раздела, Linux — из второго, а Fedora — из третьего:
default=0
timeout=5
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
hiddenmenu
title Windows 10
rootnoverify (hd0,0)
chainloader +1
title Red Hat
root (hd0,1)
kernel /boot/vmlinuz
title Fedora
root (hd0,2)
kernel /boot/vmlinuz
Мультисистемное конфигурирование LILO
Если LILO является главным загрузчиком (например, на компьютере установлены Linux и Windows 10), начните со стандартного процесса конфигурирования LILO, описанного выше. Затем по мере необходимости можно добавлять записи для других операционных систем в файл /etc/lilo.conf
.
Вот как будет выглядеть запись, предназначенная для загрузки Windows из первого раздела первого IDE-диска:
other = /dev/hda1
label = windows
table = /dev/hda
Ниже приведен полный текст файла lilo.conf
для случая, когда Windows загружается из первого раздела, Linux — из второго, а FreeBSD — из третьего:
boot = /dev/hda # помещаем загрузчик в ГЗЗ первого IDE-диска
delay = 20 # двухсекундная задержка, дающая пользователю возможность вмешаться
default = linux # по умолчанию загружается Linux из второго раздела
image = /boot/vmlinuz-2.6.9
root = /dev/hda2
label = linux
read-only
other = /dev/hda1 # загрузка из первого раздела
label = windows
table = /dev/hda
other = /dev/hda3 # загрузка из третьего раздела
label = freebsd
table = /dev/hda
После модификации файла lilo.conf
нужно повторно ввести команду lilo
. Не забудьте предварительно выполнить ее в тестовом режиме с флагом -t
.
Поставщики (или добровольцы) часто распространяют пакеты исправления ошибок дистрибутивов Linux. Это же относится и к ядру. Устранение брешей в системе безопасности, исправление ошибок и добавление функций происходит регулярно. Однако, в отличие от других программных пакетов, пакеты исправления ошибок ядра не обновляются, а устанавливаются наряду с существующим ядром. Этот подход позволяет администраторам отменять обновление, если пакет устранения ошибок ядра приводит к разрушению системы. Поэтому постепенно меню начальной загрузки LILO и GRUB заполняются различными версиями ядра. Как правило, можно выполнять загрузку той операционной системы, которая выбрана по умолчанию, но помните о существовании этого простого способа разрешения проблемы в случае невозможности загрузки после установки пакета исправлений.