В начале процесса загрузки, до запуска ядра и команды init, загрузчик системы запускает ядро. Задача загрузчика системы выглядит просто: он загружает ядро в память, а затем запускает его с определенными параметрами. Рассмотрим вопросы, на которые должен ответить загрузчик системы.
• Где находится ядро?
• Какие параметры ядра должны быть переданы ему при запуске?
Ответ (как правило) такой: ядро и его параметры обычно располагаются в корневой файловой системе. Кажется, что параметры ядра отыскать несложно, но ведь само ядро еще не запущено, поэтому оно не может «пройтись» по файловой системе в поисках необходимых файлов. Кроме того, драйверы устройств, которые ядро обычно использует для доступа к диску, также недоступны. Можно увидеть в этом нечто вроде проблемы «яйцо или курица».
Начнем разбираться с драйверами. На персональных компьютерах загрузчики системы используют систему BIOS или интерфейс UEFI, чтобы получить доступ к дискам. Практически все дисковые аппаратные средства снабжаются прошивками, которые позволяют системе BIOS получать доступ к присоединенным устройствам хранения с помощью
Вопрос о файловой системе более сложен. Многие современные загрузчики системы способны читать таблицы разделов, а также имеют встроенную поддержку доступа к файловым системам в режиме «только чтение». Следовательно, они могут находить и читать файлы. Такая возможность значительно облегчает динамическую конфигурацию и улучшение загрузчика системы. Загрузчики системы Linux не всегда обладали этой возможностью; без нее настройка загрузчика была намного более сложной.
5.4.1. Задачи загрузчика системы
Основные функции загрузчика системы Linux содержат следующие возможности:
• выбор среди нескольких ядер;
• переключение между наборами параметров ядра;
• разрешение ручного переопределения и редактирование имен образов ядра и его параметров пользователем (например, чтобы войти в режим одиночного пользователя);
• поддержка загрузки других операционных систем.
Загрузчики системы стали более сложными по сравнению с начальными вариантами ядра Linux. Появились такие функции, как история и меню, однако главной потребностью всегда остается гибкость образа ядра и выбор его параметров. Интересным фактом является то, что некоторые возможности были ослаблены. Поскольку теперь вы можете, например, выполнять аварийную или восстановительную загрузку частично или полностью с USB-накопителя, вам, вероятно, не придется беспокоиться о том, чтобы вручную вводить параметры ядра или переходить в режим одиночного пользователя. К тому же современные загрузчики предлагают больше возможностей, чем когда-либо ранее. Это может быть чрезвычайно удобно, если вы разрабатываете пользовательское ядро или желаете настроить параметры.
5.4.2. Общий обзор загрузчиков системы
Приведем перечень основных загрузчиков системы, которые могут вам встретиться, в порядке их популярности:
• GRUB — почти универсальный стандарт для систем Linux;
LILO — один из первых загрузчиков системы Linux. Версия ELILO предназначена для интерфейса UEFI;
SYSLINUX — может быть настроен для запуска в множестве различных типов файловых систем;
LOADLIN — загружает ядро из оболочки MS-DOS;
efilinux — загрузчик с интерфейсом UEFI, призванный быть моделью и эталоном для других загрузчиков с интерфейсом UEFI;
coreboot (ранее назывался LinuxBIOS) — высокопроизводительная замена системы BIOS в персональных компьютерах. Может содержать ядро;
Linux Kernel EFISTUB — плагин ядра для загрузки напрямую из системного раздела ESP (EFI/UEFI System Partition), имеющегося в современных системах.
В этой книге речь пойдет исключительно о загрузчике GRUB. Основная причина для использования других загрузчиков системы заключается либо в более простом их конфигурировании, по сравнению с GRUB, либо в быстроте работы.
Чтобы ввести имя ядра и параметры, вам сначала необходимо узнать, как попасть в строку приглашения загрузчика. К сожалению, иногда это бывает сложно выяснить, поскольку различные версии Linux по-разному настраивают поведение загрузчика и его отображение.
В следующих разделах вы узнаете о том, как оказаться в строке приглашения загрузчика, чтобы ввести имя ядра и параметры. Когда вы освоитесь с этим, вы изучите настройку и установку загрузчика системы.
5.5. Первое знакомство с загрузчиком GRUB