После процедуры включения ПК и загрузки системных прошивок, управление передается загрузчику операционной системы. Основная задача таких загрузчиков - определить и загрузить соответствующее ядро операционной системы. Большинство загрузчиков могут предоставлять средства для диалога с пользователем, которые позволяют выбирать из нескольких возможных ядер или операционных систем.
Другой задачей загрузчика является передача параметров ядру операционной системы. Например, аргумент single или -s обычно указывает ядру войти в однопользовательский режим, а не выполнить нормальный процесс загрузки. Такие параметры, при желании, могут быть жестко привязаны к конфигурации загрузчика, чтобы они использовались при каждой загрузке.
Самые распространенные загрузчики:
- Windows Boot Manager - загрузчик ядра Windows Vista, 7, 8, 10
- BootX - Загрузчик Mac OS X
- Lilo - Загрузчик применяемый для загрузки ядра Linux
- GRUB - применяется для загрузки ядра Linux и не только. Именно про этот загрузчик поговорим далее.
GRUB.
Grub - это универсальный загрузчик, разработанный GNU Project. Он является загрузчиком по умолчанию для большинства дистрибутивов Linux. Например, для Ubuntu, начиная с версии 9.10 Grub является загрузчиком по умолчанию, а недавно стал загрузчиком для RHEL 7.
Основные возможности GRUB:
- Загрузка ядер Linux
- Передача управления другим загрузчикам, возможность загрузки Windows-систем
- Поддержка большинства файловых систем
- Поддержка прошивок BIOS и EFI
- Помимо всего GRUB может кастомизировать внешний вид загрузочного меню, например, показывать красивую картинку или какое-либо предупреждение.
Конфигурация GRUB.
Так как GRUB понимает большинство используемых файловых систем и может самостоятельно найти корневую файловую систему, то всю информацию загрузчик может черпать из обычного текстового файла. Конфигурационный файл называется grub.cfg и хранится обычно в каталоге /boot/grub (либо /boot/grub2 в системах Red Hat или CentOS). Изменение конфигурации загрузки - это просто вопрос обновления файла grub.cfg.
Хотя можно создать файл grub.cfg вручную, лучше доверить это утилите grub-mkconfig ( grub2-mkconfig в Red Hat и CentOS, update-grub в Debian и Ubuntu). Чаще всего конфигурация задается в /etc/default/grub в виде присваивания переменных оболочки. Вот самые часто используемые параметры:
- GRUB_BACKGROUND - Фоновое изображение (должно быть формата .png, .tga, .jpg, .jpeg)
- GRUB_CMDLINE_LINUX - Параметры ядра для добавления в записи меню Linux.
- GRUB_DEFAULT - Номер или название элемента меню по умолчанию.
- GRUB_DISABLE_RECOVERY - Предотвращает создание записей режима восстановления.
- GRUB_PRELOAD_MODULES - Список модулей GRUB, загружаемых, как можно раньше.
- GRUB_TIMEOUT - Секунды для отображения меню загрузки перед автозагрузкой.
(Более полный список параметров смотрите в шпаргалке по GRUB в телеге. https://t.me/crazy_linuxoid/)
После изменения каталога /etc/default/grub запустите утилиты update-grub для Ubuntu или grub2-mkconfig для CentOS, чтобы перевести вашу конфигурацию в правильный файл grub.cfg.
Еще полезный инструмент для редактирования конфигурационного файла находится в папке /etc/grub.d/. Эта папка содержит в себе скрипты, которые используются для создания файла grub.cfg. При обновлении GRUB они находят все установленные на компьютере системы и ядра и формируют в файле "grub.cfg" меню загрузки, которое мы видим. Основные из них:
- 00_header - скрипт загружает настройки GRUB из /etc/default/grub.
- 05_debian_theme - определяет фон, цвета и темы. Имя этого скрипта зависит от выбранного дистрибутива.
- 10_linux - загружает конфигурации меню для установленного дистрибутива.
- 20_memtest86+ - загружает утилиту тестирования памяти.
- 30_os-prober - скрипт, который сканирует жесткие диски на наличие других ОС и добавляет их в загрузочное меню.
- 40_custom - является шаблоном, который вы можете использовать для создания дополнительных конфигураций, которые добавляются в загрузочное меню.
Допустим, если вы захотите изменить порядок, в котором ядра указываются в меню загрузки, установить пароль загрузки или изменить имена пунктов меню загрузки, достаточно будет отредактировать скрипт 40_custom. И после этого не забыть применить настройки командой update-grub или grub2-mkconfig.
Командная строка GRUB.
В GRUB можно использовать интерфейс командной строки, например, для редактирования файлов конфигурации "на лету". Для того, чтобы войти в режим командной строки, нажмите "с" на экране загрузки GRUB. Из командной строки можно загружать ОС, которые не указаны в конфигурационном файле, отобразить системную информация и провести простое тестирование файловой системы. Наиболее распространенные команды:
- boot - загружает ОС из указанного образа ядра
- help - Получает интерактивную справку для команды
- linux - Загружает ядро Linux
- reboot - Перезагружает систему.
- cat [путь_к_файлу] - выводит на экран содержимое текстовых файлов.
Параметры ядра Linux.
Задача параметров ядра Linux обычно состоит в том, чтобы инструктировать ядро проверять определенные устройства, указывать путь к systemd или init, либо назначать определенное корневое устройство. Примеры параметров загрузки ядра:
- debug - Включает отладку ядра
- init=/bin/bash - Запускает только оболочку bash; полезна для аварийного восстановления.
- root=/dev/foo - Инструктирует ядро использовать /dev/foo в качестве корневого устройства.
- single - Загрузка в однопользовательском режиме.
При задании параметров ядра при загрузке, они не являются постоянными. Для того, чтобы их сделать таковыми, надо отредактировать соответствующую строку в /etc/grub.d/40_custom или /etc/defaults/grub (переменная GRUB_CMDLINE_LINUX).
Так же в системах Linux существует очень удобное правило. При обновлении, новое ядро устанавливается вместе с предыдущими, так что в случае возникновения проблем всегда можно вернуться к предыдущей версии.
Резюме.
Итак, в этой статье вкратце рассмотрели следующий этап загрузки ОС на базе ядра Linux. Далее рассмотрим следующие этапы подготовки системы в работоспособное состояние. Следите за обновления в моем телеграмм канале https://t.me/crazy_linuxoid/, либо подписывайтесь в дзене.