Linux зачем нужен загрузчик grub lilo

Обновлено: 06.07.2024

После того как вы включаете компьютер, как только будет успешно завершено тестирование всего оборудования POST (Power On Self Test) BIOS попытается обнаружить диск с загрузчиком и прочитать дальнейшие инструкции из таблицы разделов MBR или GPT.

Таблица разделов содержит очень важную информацию, во-первых, это непосредственно разметка разделов на диске, а во-вторых, код загрузчика. В таблице разделов GPT код загрузчика вынесен в отдельный EFI раздел, где может быть размещено несколько загрузчиков.

Что такое загрузчик?

Загрузчик - это небольшая программа, которая помогает загрузить операционную систему в память. Без загрузчика это сделать намного сложнее.

В Linux существует несколько загрузчиков, которые мы можем использовать. Все они одинаковы по выполняемым действиям - загружают операционную систему, но немного отличаются по дополнительной функциональности и внешнему виду. В этой статье мы рассмотрим лучшие загрузчики Linux. Перейдем к списку.

Лучшие загрузчики для Linux

1. Grub


Загрузчик Grub самый популярный на данный момент. Он разработан на основе загрузчика созданного Эриком Стефаном Броленом. Grub может загружать практически все операционные системы, в том числе Linux, Windows и даже MacOS. Загрузчик поддерживает установку пароля, редактирование загрузочных записей во время работы, а синтаксис конфигурационного файла очень похож на Grub. Кроме того Grub поддерживает UEFI системы. Операционные системы в меню можно организовать в подпапки, можно загружаться с iso диска или даже по сети.

2. Burg


Загрузчик Burg основан на коде Grub и расшифровывается как Brand-new Unified loadeR from Grub. Ранее он считался самым новым и самым красивым загрузчиком. Он поддерживал различные темы и стили оформления, которые делали меню загрузки очень красивым. Но потом в Grub тоже была добавлена поддержка тем, а разработка Grub свернулась. На данный момент этот загрузчик устарел, он даже не поддерживает установку на раздел с Ext4. А ещё не известно поддерживает ли он UEFI, так как он давно не обновлялся, с этим тоже могут возникнуть проблемы.

2. LILO

Lilo или Linux Loader - это простой, но уже устаревший загрузчик для Linux и других операционных систем. Разработка загрузчика была прекращена в 2015 году. Он не поддерживает такие современные файловые системы, как Btrfs, не поддерживает таблицу разделов GPT, а следовательно и UEFI. Кроме того, в нём нет текстовой консоли для восстановления системы и не поддерживается загрузка по сети. Одно из преимуществ этого загрузчика - это простой файл конфигурации, поэтому он иногда ещё используется для загрузочных ISO образов, хотя там тоже намного популярнее syslinux.

4. Syslinux

Syslinux - это облегченный загрузчик, который используется чаще всего для загрузки с внешних носителей, LiveCD или по сети. Он поддерживает файловые системы FAT, Ext2/3/4 и Btrfs. Его не следует использовать как основной загрузчик для вашей системы, только для ISO образов, поскольку он может загружать только одну операционную систему, которая находится на том же разделе, где расположен загрузчик.

5. Systemd-boot

Это простой загрузчик от systemd, который умеет работать только с образами UEFI. Может использоваться для загрузки системы без Grub. Здесь нет никаких особенных функций, это просто меню, позволяющее выбрать необходимый EFI образ для загрузки. Например, образ ядра Linux или EFI Shell.

6. rEFInd


Это не совсем загрузчик в привычном понимании, а скорее менеджер загрузки, который указывает системе UEFI какую операционную систему стоит запустить, а также может попросить UEFI запустить ядро Linux из папки /boot. Таким образом этот загрузчик не делает никаких действий по загрузке, а просто обращается к UEFI. Зато у него красивый и современный интерфейс. Теперь это самый красивый загрузчик Linux, вместо Burg.

Выводы

Мы рассмотрели лучшие загрузчики Linux. Загрузчик позволяет управлять несколькими операционными системами на одном компьютере и выбирать какую из них вы хотите загрузить в определенный момент. Без него ваш компьютер не сможет загрузить ядро и другие файлы операционной системы.

Если я пропустил здесь какой-нибудь загрузчик Linux, напишите в комментариях!

Андрей Волков

Загрузчики Linux LILO и GRUB: выбор, настройка

В реальной жизни всегда есть выбор. Сегодня мы имеем возможность выбирать меж­ду двумя популярными загрузчиками: 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) соответствует устройству /dev/hda1 . Следовательно, если нужно инстал­лировать загрузчик GRUB на основной жесткий диск, воспользуйтесь такой командой:

Кавычки необходимы, чтобы интерпретатор команд не пытался интерпретировать скобки по-своему.

По умолчанию GRUB читает параметры загрузки из файла /boot/grub/grub.conf . Вот его образец:

В этом примере конфигурируется единственная операционная система, которая бу­дет загружена автоматически ( 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

Для получения подробной информации о загрузчике GRUB и его параметрах ко­мандной строки обратитесь к официальному руководству:

LILO: традиционный загрузчик Linux

Конфигурирование и инсталляция загрузчика осуществляется с помощью команды lilo , которая извлекает параметры конфигурации из файла /etc/lilo.conf . Чтобы изменить настройки загрузчика, нужно отредактировать этот файл и повторно выпол­нить команду lilo . Эту процедуру необходимо проделывать всякий раз при изменении процесса загрузки — в частности, когда добавляется новый загрузочный раздел или соз­дается новое ядро.

Загрузчик LILO может быть установлен в главную загрузочную запись диска или в загрузочную запись корневого раздела Linux.

Ниже приведено содержимое файла lilo.conf для системы, в которой имеются ра­бочее и резервное ядра:

Каждому возможному сценарию загрузки присваивается метка. Введя метку на этапе загрузки, можно сообщить программе LILO о том, какой из сценариев следует выбрать. Сценарий, который указан в файле lilo.conf первым, выбирается по умолчанию.

В стандартном сценарии (метка linux ) загружается файл /vmlinuz . Флаг read-only указывает на то, что ядро монтирует свою корневую файловую систему в режиме только для чтения. Этот флаг должен всегда присутствовать. Сценарии запуска системы поза­ботятся о том, чтобы повторно смонтировать раздел в режиме чтения/записи, когда воз­
никнет такая необходимость. Система сконфигурирована таким образом, чтобы в случае сбоя загружалось резервное ядро (файл /vmlinuz-backup ). Наличие подобной возмож­ности никогда не помешает.

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

Чтобы не попасть в подобную ситуацию, воспользуйтесь командой lilo -t , которая протестирует файл, не выполняя инсталляцию. Если ошибок не выявлено, переходите к процедуре инсталляции. Честно говоря, непонятно, почему команда lilo не делает такую проверку автоматически.

В случае показанного выше конфигурационного файла результаты работы команды будут такими:

При загрузке системы программа LILO выдаст следующее приглашение:

После двухсекундной паузы (параметр delay , равный 1, соответствует десятой доле секунды, а в рассматриваемом файле lilo.conf он равен 20) будет загружено ядро /vmlinuz , а в качестве корневого будет смонтирован первый раздел первого IDE-диска. Список сценариев загрузки можно просмотреть, нажав клавишу <Tab> :

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

Параметры ядра

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

Таблица 2. Примеры параметров ядра времени выполнения

Мультисистемная загрузка на персональном компьютере

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

В каждом разделе диска может храниться собственный вторичный загрузчик, однако главная загрузочная запись только одна. Поэтому необходимо решить, какой из загруз­чиков будет “главным”. Как правило, выбор диктуется особенностями имеющихся опе­рационных систем. Если одной из них является Linux, то лучше всего в качестве глав­ного загрузчика выбрать LILO или GRUB. Заметим, что в данной конкретной ситуации загрузчик GRUB проявляет себя лучше, чем LILO.

Мультисистемное конфигурирование GRUB

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

Записанные в файле grub.conf параметры конфигурации для загрузки ОС Windows, отличаются от параметров для загрузки UNIX или Linux:

Параметр chainloader загружает утилиту начальной загрузки из указанного места (в данном случае из сектора 1 первого раздела первого IDE-диска). Параметр rootnoverify предотвращает попытки загрузчика GRUB выполнить монтирование указанного раздела. Он избавляет загрузчик GRUB от необходимости проверять непонятные для него разделы, такие как разделы NTFS или размещенные вне области, в которой GRUB может выполнять чтение.

Ниже приведен полный текст файла grub.conf для случая, когда Windows 10 загру­жается из первого раздела, Linux — из второго, а Fedora — из третьего:

Мультисистемное конфигурирование LILO

Если LILO является главным загрузчиком (например, на компьютере установлены Linux и Windows 10), начните со стандартного процесса конфигурирования LILO, опи­санного выше. Затем по мере необходимости можно добавлять записи для других опера­ционных систем в файл /etc/lilo.conf .

Вот как будет выглядеть запись, предназначенная для загрузки Windows из первого раздела первого IDE-диска:

Ниже приведен полный текст файла lilo.conf для случая, когда Windows загружа­ется из первого раздела, Linux — из второго, а FreeBSD — из третьего:

После модификации файла lilo.conf нужно повторно ввести команду lilo . Не за­будьте предварительно выполнить ее в тестовом режиме с флагом -t .

Поставщики (или добровольцы) часто распространяют пакеты исправления ошибок дистрибутивов Linux. Это же относится и к ядру. Устранение брешей в системе безо­пасности, исправление ошибок и добавление функций происходит регулярно. Однако, в отличие от других программных пакетов, пакеты исправления ошибок ядра не об­новляются, а устанавливаются наряду с существующим ядром. Этот подход позволяет администраторам отменять обновление, если пакет устранения ошибок ядра приводит к разрушению системы. Поэтому постепенно меню начальной загрузки LILO и GRUB заполняются различными версиями ядра. Как правило, можно выполнять загрузку той операционной системы, которая выбрана по умолчанию, но помните о существовании этого простого способа разрешения проблемы в случае невозможности загрузки после установки пакета исправлений.

Wikipedia сообщает "GNU GRUB (англ. GRand Unified Bootloader) — загрузчик операционной системы от проекта GNU. GRUB позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки." GRUB 2

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

Установить дистрибутив с GRUB либо мигрировать загрузчик вручную.

Последний пункт выполняет генерацию конфига GRUB на основе шаблонов/скриптов в /etc/grub.d/. Редактировать полученный конфиг руками не рекомендуется т.к. он будет уничтожен следующей автогенерацией (выполняемой, к примеру, installkernel-ом).

Проверьте содержимое /etc/sysconfig/grub2: если там нет раскомментированной переменной GRUB_AUTOUPDATE_DEVICE (при смене загрузчика вручную не будет, т.к. она добавляется только alterator-grub), добавьте устройство или их список; если root/boot на md raid1, следует задать список дисков, на которых он размещён -- например, не '/dev/md0 ', а '/dev/sdb /dev/sda '. После этого стоит выполнить grub-autoupdate.

Для однократного изменения таковых при загрузке GRUB следует:

  1. нажать "e" при курсоре на цели загрузки, соответствующей используемому экземпляру ALT;
  2. в открывшемся редакторе отыскать строку, начинающуюся с linux /boot/vmlinuz;
  3. в её конец дописать требуемые параметры, отделив пробелом;
  4. нажать F10.

Если нужно, чтобы эти параметры ядра передавались ядру при каждой загрузке, надо прописать их в /etc/sysconfig/grub2 и дать команду update-grub ; подробнее см. следующий пункт.

Для постоянного применения иных параметров загрузки следует изменить конфигурацию загрузчика.

  • Параметры ядра содержатся в /etc/sysconfig/grub2
  • После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg

В /etc/sysconfig/grub2 поддерживаются следующие опции:

обновлять ли конфиг файл из файлтриггера установки/удаления ядер (по умолчанию true)

опции загрузки ядра

имя автообновляемого конфигфайла. (по умолчанию /boot/grub/grub.cfg)

добавлять ли симлинки в меню (добавлять, не добавлять, добавлять только /boot/vmlinuz [по умолчанию])

добавлять ли failsafe-пункты (добавлять, не добавлять, добавлять только для /boot/vmlinuz [по умолчанию])

  • Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось - возможно, придумается какой-то новый общий случай.
  • Если вам всё же хочется - допишите то, что считаете нужным в /etc/grub.d/40_custom

Например, если автоматически не обнаружилась Windows 10, может помочь такое описание пункта меню:

Где UUID - UUID раздела с загрузчиком Windows. Узнать UUID раздела можно командой blkid

данный пункт очень похож на следующий, но на этот пункт есть ссылки

  • Выберите нужный вам пункт один раз при загрузке. savedefault должен сохранять ваш выбор на будущее.
  • Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2
  • NB: в 2.00+ поведение изменилось, теперь дополнительные ядра для того же корня спрятаны в субменю "Advanced options".

В файле /etc/sysconfig/grub2 изменить значение GRUB_SAVEDEFAULT на false, перегенерировать конфиг grub:

посмотреть имеющийся список вариантов загрузки утилитой grub-entries:

задать нужный вариант загрузки:

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

В файле /etc/sysconfig/grub2 изменить строку

где n номер пункта меню, либо на

Вариант с названием предпочтительнее, поскольку после обновления ядра количество пунктов в меню увеличится и нумерация некоторых пунктов изменится. Внимание! Нумерация пунктов начинается с 0. Список пунктов можно получить по команде

Например, пусть мы имеем следующие пункты меню (этот пример не учитывает текущее состояние с подменю; оставлено в качестве примера, удобнее использовать grub-entries, как в первом варианте):

и хотим, чтобы по умолчанию грузился Windows. Тогда в /etc/sysconfig/grub2 пишем

Потом в терминале от пользователя root:

Перезагрузка. Так как в GRUB_DEFAULT задано конкретное значение, а не 'saved', переменная GRUB_SAVEDEFAULT значения не имеет.

Иногда бывает удобно загрузиться с произвольным пунктом меню, но не менять текущий вариант. Это удобно, например, для тестирования нового ядра, когда надо иметь возможность вернуть старое ядро простой перезагрузкой. Для этого надо настроить Grub в соответствии со способом 1 предыдущего пункта, после чего можно задать пункт меню для следующей загрузки командой grub-reboot и запустить команду reboot. В момент начала загрузки конфигурация Grub автоматически вернётся в исходное состояние, и следующая загрузка компьютера произойдёт по-старому. Это аналогично использованию опции -R загрузчика Lilo.

Xen грузится с помощью multiboot:

Примерно такими строчками в /etc/sysconfig/grub2:

(см. также). Не забываем про grub-mkconfig.

Grub грузится с основного диска на котором Linux, Windows установлен на дополнительный жесткий диск. В 40_custom добавляем:

Если жестких дисков больше двух, играемся с hdX.

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

  • Зайдите в ЦУС ( acc ), перейдите в режим эксперта, и в разделе "Система" откройте "Загрузчик GRUB".
  • Установите флажок "Установить или сбросить пароль" и введите необходимый пароль.
Примечание: Логин/пароль (последний в хэшированном виде) записываются в файл /etc/grub.d/50_password :


Также для ограничения загрузки (как с изменением параметров, так и без) можно добавить в файл /etc/grub.d/40_custom строки:

Для защиты паролем возможности загрузки именно с изменёнными параметрами придётся добавить в переменную CLASS в скрипте /etc/grub.d/10_linux опцию --unrestricted (внимание: этот скрипт по состоянию на версию 2.00-alt20 входит в пакет grub-common и не помечен как %config, поэтому будет перезаписан при обновлении!).

После подобных операций следует перегенерировать конфигурацию командой grub-mkconfig -o /boot/grub/grub.cfg (либо grub-mkconfig , в зависимости от дистрибутива). В случае использования alterator-grub - это не требуется.

После обновления до grub2-pc-2.00-alt1 операционная система может не загрузиться. В таком случае, необходимо иметь под рукой любой live disk. Далее:

  • Загружаемся с rescue-cd, например ALT Linux Rescue
  • Если использован ALT Linux Rescue:
  • Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
  • Скачиваем предыдущую версию пакета:
  • Устанавливаем rpm
  • Переконфигурируем меню grub

После описанного выше, у меня загрузилась операционная система.

  • Если использован ALT Linux Rescue:
  • Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):

После того как проведены подготовительные действия и сделан сhroot, необходимо выполнить

Примечание: Если при выполнении команды grub-install , в режиме legaсy, вы получаете ошибку:

то выполните команду:


если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi:

Если при загрузке, например, Windows 7 часть экрана содержит "шум", возможно, отдалённо напоминающий картинку заставки GRUB -- попробуйте выровнять используемые видеорежимы VESA:

Вы можете сделать заставку текстовой, указав GRUB_GFXMODE='console'.

Загрузчик LILO (от LInux LOader), разработанный Вернером Алмесбергером (Werner Almesberger), долгое время был основным загрузчиком в большинстве дистрибутивов Linux. И хотя в последнее время все больше дистрибутивов переходят на использование загрузчика GRUB , у Lilo остается немало приверженцев. Дистрибутив Slackware 12, например, даже не предлагает выбора между LILO и GRUB в процессе инсталляции: только LILO.

LILO может загружать ядро Linux как с дискеты, так и с жесткого диска, а также может загружать другие операционные системы, предоставляя возможность многовариантной загрузки. Может быть задан выбор до 16 разных операционных систем на этапе загрузки. Первичный загрузчик от LILO может быть установлен как в MBR, так и в первый сектор активного раздела.

3.4.1. Устройство LILO

  • собственно загрузчик — это та часть LILO, которая первой загружается в память через прерывание BIOS, и которая загружает ядро Linux (или загрузочный сектор другой операционной системы). Загрузчик тоже состоит из двух частей. Первая часть, - первичный загрузчик, - записывается в загрузочный сектор и служит для загрузки второй части, которая значительно больше по размеру. Обе части обычно хранятся на диске в файле /boot/boot.b.
  • программа /sbin/lilo, которая запускается из-под Linux, является, фактически, программой установки LILO, служит для того, чтобы записать в соответствующие места всю информацию, необходимую на этапе загрузки. Ее необходимо перезапускать каждый раз после внесения изменений в ядро или в конфигурационный файл LILO;
  • различные служебные файлы, которые нужны LILO во время загрузки. Эти файлы обычно располагаются в каталоге /boot. Самый важный из них — это map-файл (/boot/map), в котором указывается местоположение ядра;
  • еще один важный файл — это файл конфигурации LILO, который обычно имеет имя /etc/lilo.conf.
  • загрузочный сектор дискеты в формате Linux (/dev/fd0, . );
  • MBR первого жесткого диска (/dev/hda, /dev/sda, . );
  • загрузочный сектор первичного раздела файловой системы Linux на первом жестком диске (/dev/hda1, /dev/hda2, . );
  • загрузочный сектор логического раздела в расширенном разделе первого жесткого диска (/dev/hda5, . ). Правда большинство программ типа fdisk не предполагают, что можно загружаться из расширенного раздела и отказываются объявлять его активным. Поэтому в состав LILO включена специальная программа ( activate ), которая позволяет обойти это ограничение. Но программа fdisk из дистрибутива Linux поддерживает возможность активизации расширенного раздела. Для этого надо использовать либо опцию -b, либо переменную BOOT.
  • загрузочный сектор дискеты или первичного раздела, отформатированных в других файловых системах;
  • в swap-разделе Linux;
  • на втором жестком диске.

Если первичный загрузчик от LILO установлен в главный загрузочный сектор, он загружается системным BIOS в оперативную память по адресу 0х7C00 и ему передается управление. Затем первичный загрузчик, снова используя системный BIOS, загружает в память вторичный загрузчик по адресу 0x9B000.

3.4.2. Конфигурирование LILO

Большая часть настроек LILO может быть выполнена путем редактирования используемого по умолчанию файла конфигурации, каковым является файл /etc/lilo.conf .

Файл lilo.conf состоит из двух секций - секции глобальных настроек и секции локальных настроек. Секция локальных настроек разделена, в свою очередь на подсекции, по одной для каждого из возможных вариантов загрузки. Вот небольшой пример файла lilo.conf :

Листинг 6. Пример файла /etc/lilo.conf

Рассмотрим вначале секцию глобальных настроек. Первая строка в этой секции указывает, где будет установлен LILO. В нашем примере LILO будет установлен в главный загрузочный сектор первого жесткого IDE-диска, обозначаемого как /dev/hda.

Вторая строка (linear) означает, что LILO должен использовать не обычную адресацию диска цилиндр/головка/сектор, а линейную адресацию секторов. Эта опция несовместима с вариантом загрузки системы с дискеты, но необходима для некоторых SCSI-контроллеров, а также в случае расположения ядра выше 1024-го цилиндра.

Третья строка в секции глобальных настроек (compact) означает, что LILO во время загрузки будет пытаться читать соседние сектора. Это может существенно ускорить загрузку с дискеты, но практически не влияет на скорость загруки с жесткого диска.

Четвертая строка (read-only) сообщает LILO, что корневая файловая система должна быть смонтирована в режиме "только для чтения". Стартовые скрипты, запускаемые процессом init, позже перемонтируют корневую файловую систему в режим "чтение-запись" (после того, как эта система будет проверена командой fsck).

Пятая строка требует, чтобы LILO перед загрузкой какой-либо версии ядра, выдал пользователю приглашение. Если эта строка отсутствует, LILO автоматически загрузит ядро, указанное по умолчанию. Если опция prompt задана, но интервал задержки (опция timeout) не указана, то перезагрузка без участия пользователя будет невозможна, поскольку LILO будет бесконечно ждать, пока пользователь не введет что-либо.

Шестая команда в секции глобальных настроек (timeout=100) сообщает LILO длительность интервала, в течение которого LILO должен ждать реакции пользователя, после чего можно (или нужно) загрузить ядро по умолчанию. Единицей измерения времени тут служит одна десятая секунды, так что timeout=100 задает интервал в 10 секунд.

Теперь давайте рассмотрим секцию локальных настроек файла lilo.conf. Эта секция может содержать несколько подсекций, каждая из которых начинается ключевым словом image или other . Та из этих подсекций, которая стоит в файле первой, определяет ядро, загружаемое по умолчанию. Можно указать загружаемую по умолчанию систему с помощью строки вида default=vmlinux-2.6.14 (используя метку из соответствующей строки label). Строка, начинающаяся ключевым словом image , содержит полный путь к файлу ядра, загружаемого при выборе этой подсекции.

LILO может загружать различные операционные системы, каждая из которых, как правило, размещается в отдельном разделе жесткого диска. Даже если известен полный путь к ядру, которое будет загружаться, LILO должен знать в каком разделе жесткого диска размещается каталог /boot с образами ядра. Этот раздел указывается в строке, обозначенной ключевым словом root. Другими словами, опция root в каждой подсекции сообщает LILO, какой раздел диска монтировать как корневую файловую систему. Таким образом, при обработке секции: LILO будет искать ядро /boot/vmlinuz-2.6.14 на первом разделе второго жесткого диска (slave на первом IDE-контроллере), а при обработке секции

LILO будет искать ядро /boot/vmlinuz-2.6.13 на втором разделе того же диска.

Наконец, ключевое слово label задает просто название подсекции или варианта загрузки. Именно эти названия выдаются после нажатия клавиши <TAB> при появлении приглашения LILO. Одно из этих названий вы должны ввести в ответ на приглашение, чтобы загрузилось нужное вам ядро. Две разных подсекции не должны иметь одинаковых названий, иначе lilo может заартачиться.

3.4.3. Запуск операционных систем, отличных от Linux

Для загрузки операционных систем, отличных от Linux, служат секции конфигурационного файла, обозначаемые ключевым словом other. В простейшем случае такая секция может иметь вид:

Ключевое сллово other в данном случае выполняет ту же роль, какую в предыдущих случаях выполняло слово root , то есть оно указывает, где располагается загрузочный раздел данной операционной системы. В нашем примере это четвертый раздел первого IDE-диска. Ключевое слово label , как и в предыдущем случае, задает только название, которое будет выводиться в соответствующей строке меню. Table показывает, где расположена таблица разбиения соответствующего диска. В этой строке всегда указывается диск, который содержит альтернативную ОС, причем имя задается в нотации, принятой в Linux (то есть - /dev/hda, /dev/hdb, /dev/hdc, /dev/sda и т.д.).

3.4.4. Замечания о безопасности

В целях безопасности имеет смысл сделать файл /etc/lilo.conf принадлежащим пользователю root и группе root, а также задать права доступа равные 600: Если вы делаете резервные копии основных конфигурационных файлов вашей системы, имеет смысл включить в число таких файлов и файл /etc/lilo.conf. Если вы добавите в подсекцию команду password , вторичный загрузчик перед загрузкой ядра, указанного в данной подсекции, запросит у вас пароль. Если дополнительно указать опцию restricted , пароль будет запрашиваться только если в командной строке будут заданы еще какие-то опции, например, опция `single', переводящая Linux в однопользовательский режим. Вот пример подсекции, защищенной паролем: Только не надо заблуждаться относительно надежности защиты таким паролем. Он далеко не обеспечивает безопасность вашей системы. Любой человек, получивший физический доступ к компьютеру, может загрузиться с дискеты, установить собственную версию LILO и получить доступ к системе в режиме суперпользователя.

3.4.5. Установка загрузчика

После внесения каких-либо изменений в файл конфигурации необходимо выполнить команду lilo (исполняемый файл lilo расположен в каталоге /sbin) для того, чтобы сделанные изменения вступили в силу. Эта команда (которая в руководстве по LILO называется map-installer) перезаписывает загрузочный сектор, устанавливает вторичный загрузчик системы, который будет активизирован во время следующей загрузки машины, и соответствующим образом изменяет map-файл. Прежде, чем запускать /sbin/lilo для модификации загрузочных процедур, выполните эту команду с параметром -t . При этом будет выполнена вся процедура инсталляции загрузчика, кроме изменения map-файла, записи модифицированного загрузочного сектора и изменения таблицы разбиения диска, то есть выполнен тест нового варианта. Если добавить еще опцию -v , вы получите более подробную информацию о том, что будет делать команда /sbin/lilo .

    geo_comp_addr: Cylinder number is too big (5064 > 1023)

Одно из ваших ядер расположено далее 1024-го цилиндра. В таком случае вы можете попытаться добавить опцию linear в секцию глобальных настроек файла /etc/lilo.conf.
Вы выбрали слишком длинное имя для метки. Сократите название секции.

Когда /sbin/lilo перезаписывает загрузочный сектор, старое содержимое этого сектора автоматически сохраняется в файле. По умолчанию это файл /boot/boot.NNNN, где NNNN соответствует номеру устройства, например, 0300 — это /dev/hda, 0800 — это /dev/sda и т. д. Если такой файл уже существует, он не перезаписывается. Но можно задать альтернативный файл для сохранения загрузочного сектора.

Файл /boot/boot.NNNN можно использовать для восстановления старого содержимого загрузочного сектора, если более простой метод его восстановления недоступен. Соответствующие команды имеют вид:

(bs=446 потому что восстанавливаем только программу-загрузчик, и не трогаем таблицу разбиения диска).

Копию загрузочного сектора лучше сохранить на дискете. В случае, если произойдут какие-либо неприятности, вы сможете восстановить старую загрузочную запись MBR, выполнив команду (предполагается, что дискета смонтирована в каталог /mnt):

Восстановить старый MBR при необходимости можно также командой /sbin/lilo с опцией -u. Только надо иметь в виду, что эта команда отрабатывает корректно при условии, что каталог LILO (а именно, /boot) не изменялся со времени инсталляции.

После переустановки загрузчика надо перезагрузить компьютер, опробовав разные варианты загрузки.

Когда LILO загружается, он выводит на дисплей слово "LILO". При этом вывод каждой буквы обозначает завершение определенного действия или этапа загрузки LILO. Если загрузка сорвется, то по числу выведенных букв можно судить о причине возникновения проблемы.

  • Ничего не выведено — никакая часть LILO не была загружена. Либо LILO не был установлен, либо раздел, на котором он находится, не является активным.
  • L [код ошибки] — первичный загрузчик загрузился и стартовал (на него передано управление), но он не сумел загрузить вторичный загрузчик. Двухзначный код ошибки указывает на конкретную причину проблемы (расшифровку кодов надо искать в технической документации на LILO). Обычно это связано с дефектами носителя или неправильно заданной геометрией диска. Если только LILO не остановился на этом этапе, выдавая бесконечную последовательность кодов ошибки, проблема обычно легко решаема.
  • LI — первичный загрузчик сумел загрузить вторичный загрузчик, но не сумел запустить его на выполнение. Это может быть вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
  • LIL — вторичный загрузчик запустился, но не смог загрузить таблицу дескрипторов из map-файла. Причина обычно состоит в наличии дефектов на диске или неправильно заданной геометрией диска.
  • LIL? — вторичный загрузчик был загружен по неправильному адресу. Обычно вызвано ошибкой в задании геометрии диска или тем, что файл /boot/boot.b был перемещен без перезапуска /sbin/lilo .
  • LIL- — таблица дескрипторов разрушена. Обычно вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo .
  • LILO — все части LILO успешно загружены.

3.4.7. Диалог LILO с пользователем

  • текстовый интерфейс,
  • интерфейс в виде меню,
  • графический интерфейс.
  • Нажатие клавиши <TAB> приводит к тому, что на экране отображается список вариантов загрузки (версий ядра или типов операционной системы), примерно такой, как показано на рисунке 1. Первым в этом списке стоит тот вариант загрузки, который выбирается по умолчанию, то есть в том случае, когда пользователь не указывает явно своих предпочтений. После выдачи списка вариантов LILO снова ждет реакции пользователя.
  • Пользователь может (сразу после появления приглашения или после вывода списка вариантов при нажатии <TAB>) ввести название одного из доступных вариантов загрузки. В таком случае LILO загрузит выбранный вариант ядра (или ОС) и запустит его.
  • Если пользователь после появления приглашения просто нажмет клавишу <ENTER>, LILO загрузит вариант ядра, выбираемый по умолчанию.
  • В большинстве систем пользователь может набрать linux single и LILO загрузит вариант ядра, выбираемый по умолчанию, в однопользовательском режиме.
  • Наконец, вы можете ничего не делать и просто ждать. По истечении отрезка времени, указанного в конфигурационном файле (смотри выше) будет загружен вариант ядра (или системы), выбираемый по умолчанию.

Текстовый интерфейс LILO рассчитан на старые "глупые" (dump) терминалы. Но он обладает и некоторыми преимуществами. Сейчас не помню, где именно я нашел следующий совет (с которым я, тем не менее, склонен согласиться): "Если вы хотите избежать любых осложнений в будущем, используйте текстовый интерфейс LILO. Меню-интерфейс смотрится красиво, но он обладает свойством очистки экрана. При этом исчезает из вида выдаваемая BIOS информация, например, список обнаруженных устройств. А иногда эта информация бывает так необходима! Тем более НИКОГДА не используйте графический интерфейс! Он выглядит привлекательно, но если у вас возникнут проблемы с LILO, вы окажетесь в неприятном положении."

Чтобы обеспечить загрузку LILO с текстовым интерфейсом, нужно задать в конфигурационном файле строку и переустановить LILO (командой lilo).

Если вы предпочтете интерфейс в виде меню (он появился в LILO начиная с версии 21), то эта строка должна принять вид В настоящее время меню-интерфейс используется в LILO по умолчанию. При этом на экран выдается список вариантов загрузки, каждая строка в котором соответствует одной из подсекций файла /etc/lilo.conf. Ниже списка вариантов выбора загрузки выводится строка ввода, такая же, как и в текстовом режиме, с помощью которой пользователь может задать дополнительные параметы загрузки (см. Рис.2).


Рис.2. Интерфейс LILO в виде меню

Как происходит загрузка ядра через LILO

После того, как пользователь выберет предпочтительный вариант загрузки, LILO загружает в оперативную память ядро и образ виртуального диска initrd.

Файлы загружаемых ядер хранятся в каталоге /boot. Обычно к имени файла ядра добавляется номер версии. Например, если версия ядра 2.4.18, то файл будет иметь имя /boot/vmlinuz.2.4.18. Впрочем, название файла ядра значения не имеет, важно, чтобы он был доступен на этапе загрузки. Вторичный загрузчик читает файл /boot/map, чтобы определить расположение образа загружаемого ядра.

Файл /boot/map содержит "карту" размещения файла ядра и файла с образом виртуального диска initrd, представляющую собой последовательность физических адресов блоков на диске, в которых находятся соответствующие файлы. В процессе обработки map-файла загрузчик последовательно считывает блоки с диска в том порядке, который задан в map-файле и формирует образ соответствующего файла в памяти.

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

Зависимость от BIOS, очевидно, ограничивает возможности LILO. В частности, вторичный загрузчик LILO долгое время не мог получить доступ к секторам жесткого диска, расположенным далее 1023-го цилиндра. Вообще говоря, это было проблемой для всех операционных систем для PC-совместимых компьютеров, поскольку источником проблемы является BIOS. У этой проблемы есть два решения. Первое решение заключается в том, чтобы создавать разбиение диска таким образом, чтобы расположить вторичный загрузчик ниже 1023-го цилиндра. Это является причиной того, что загрузочные файлы помещаются в особом каталоге /boot, который часто размещается в отдельной файловой системе, которая находится в начале жесткого диска.

Второе решение состоит в использовании логической адресации блоков ("Logical Block Addresses" - LBA). В этом случае BIOS "думает", что секторов меньше, чем их есть в действительности. Вопросы, которые для меня пока остаются неясными:

Где располагается физически вторичный загрузчик? Попов пишет: "LILO поступает просто: первая часть кода при инсталляции получает адрес продолжения в виде списка блоков, в которых и записано это самое "продолжение". "Продолжение" - не обязательно код. Это может быть и список необходимых файлов, но адресуемых физически, как блоки."

Читайте также: