Лучшие загрузчики Linux
После того как вы включаете компьютер, как только будет успешно завершено тестирование всего оборудования POST (Power On Self Test) BIOS попытается обнаружить диск с загрузчиком и прочитать дальнейшие инструкции из таблицы разделов MBR или GPT.
Таблица разделов содержит очень важную информацию, во-первых, это непосредственно разметка разделов на диске, а во-вторых, код загрузчика. В таблице разделов GPT код загрузчика вынесен в отдельный EFI раздел, где может быть размещено несколько загрузчиков.
Что такое загрузчик?
Лучшие загрузчики для 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
4. Syslinux
5. Systemd-boot
Это простой загрузчик от systemd, который умеет работать только с образами UEFI. Может использоваться для загрузки системы без Grub. Здесь нет никаких особенных функций, это просто меню, позволяющее выбрать необходимый EFI образ для загрузки. Например, образ ядра Linux или EFI Shell.
6. rEFInd
Это не совсем загрузчик в привычном понимании, а скорее менеджер загрузки, который указывает системе UEFI какую операционную систему стоит запустить, а также может попросить UEFI запустить ядро Linux из папки /boot. Таким образом этот загрузчик не делает никаких действий по загрузке, а просто обращается к UEFI. Зато у него красивый и современный интерфейс. Теперь это самый красивый загрузчик Linux, вместо Burg.
Выводы
Мы рассмотрели лучшие загрузчики Linux. Загрузчик позволяет управлять несколькими операционными системами на одном компьютере и выбирать какую из них вы хотите загрузить в определенный момент. Без него ваш компьютер не сможет загрузить ядро и другие файлы операционной системы.
Если я пропустил здесь какой-нибудь загрузчик Linux, напишите в комментариях!
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Загрузчики Linux
Master Boot Record
Для того, чтобы начать разговор про загрузчиков, для начала необходимо понимать, как разбиваются жесткие диски и систему их разбиения.
MBR Master Boot Record это первые 512 Байт диска, это не раздел, не партиция это участок места в начале жесткого диска, зарезервированный для загрузчика Операционной системы и таблицы разделов.
Когда компьютер включается BIOS производит тестовые процедуры. После чего, передает код управления начальному загрузчику, который как раз расположен в первых байтах MBR. Причем, какому жесткому диску передавать управление мы определяем самостоятельно в соответствующих настройках BIOS. MBR это очень важная часть нашего жесткого диска, потеря его чревата потерей данных с нашего жесткого диска или невозможностью загрузится. Поэтому ранее возникала потребность в резервном копировании данной части жесткого диска. Но это было достаточно давно.
Для начала надо нам понять, что и куда у нас смонтировано какой раздел у нас является загрузочным и его скопировать. Вводим команду fdisk l и видим следующее:
Только, что мы скопировали первый блок жесткого диска, это то самое место, где на жестком диске находится MBR.
Загрузчики
Первый загрузчик Lilo Linux Loader
Это был самый популярный загрузчик для Linux и для Unix систем в целом, он не зависел от файловой системы, мог загружать ОС с жесткого диска или с дискеты. Из этого выходила его особенность, загрузчик Lilo хранил в своем теле положение ядер и пункты меню и требовал обновления себя с помощью специальной утилиты, можно было поместить до 16 пунктов меню при загрузке. Данного загрузчика уже нету во многих дистрибутивах ОС Linux.
В настоящее время повсеместно используется загрузчик GRUB2, но мы можем поставить загрузчик Lilo, чтобы с ним разобраться.
В процессе установки выскакивает предупреждение, что это первая установка lilo, после установки необходимо будет исполнить команду, а затем запустить непосредственно загрузчик, который применит непосредственно все изменения. Нажимаем ОК. Далее запускаем liloconfig. Ничего не произошло, просто утилита создала файл и этот файл является файлом конфигурации. С помощью команды cat /etc/lilo.conf мы можем посмотреть файл конфигурации загрузчика.
В заголовке файла написано сразу, что после внесения изменений необходимо выполнить команду lilo, чтобы он сразу применил их. Далее идут основные параметры конфигурационного файла. Первый параметр lba32. Вот он как раз и меняет ту самую традиционную конфигурацию цилинд-головка-сектор, на logical block адреса, что позволяет работать с большими дисками.
В разделе boot мы должны указать на каком диске у нас находится MBR. Если внимательно посмотреть, то можно увидеть подсказку, где посмотреть /dev/disks/by-id/ata* uuid дисков. После, чего можно скопировать имя диска и вставить его и тогда его сможет загружать. Lilo узнает, где MBR и будет оттуда загружать систему.
Далее мы можем посмотреть, где находятся ядра нашей операционной системы. Когда мы запустили liloconfig загрузчик нашел наши ядра операционной системы. Как видно на скриншоте определил версию ядра, определил где будет корневая файловая система. Смонтировал в режиме read-only. В данных параметрах мы может отредактировать строчку lable, чтобы переименовать отображение при загрузке. Если есть желание можно отредактировать данный файл и добавить еще ядро, если установлена вторая OS.
Загрузчик GRUB
Старый загрузчик GRUB эта та версия загрузчика, который использовался с Lilo. Тогда Lilo был самый распространенный. Теперь данный загрузчик называется Grub legacy. Больше никак не развивается, для него выходят только патчи и обновления и его даже невозможно установить на новые операционные системы. Т.к. команды и инструментарий используется одинаковый, как для старого GRUB, так и для нового.
Далее мы будем рассматривать современный вариант загрузчика GRUB 2.
Примерно так выглядит файл настроек для загрузки.
Отредактировать данный файл возможно в редакторе.
Второй путь к папке /etc/grub.d в ней лежат исполняемые файлы. Данные файлы сканируют, также ядра при необходимости добавят нужные параметры в загрузчик. Мы всегда можем добавить опцию и написать скрипт. Для применения настроек в загрузчике, надо выполнить update-grub.
Что такое Grub
Если вы когда-либо использовали систему Linux, то вы должны были видеть экран загрузчика. Это называется экран GRUB. Да, это пишется заглавными буквами.
В этой небольшой статье о Linux мы расскажем вам, что такое GRUB и для чего он используется. Также вкратце затронем настройку и модификацию внешнего вида загрузчика.
Что такое GRUB?
Загрузчик или менеджер загрузки
Я не хочу запутать вас на этом этапе, но эта тема нуждается в разъяснении перед тем, как мы продолжим. Разница между менеджером загрузки и загрузчиком весьма размыта.
Ядро Linux версии 3.3 включает в себя встроенный загрузчик EFI. Фактически, любая операционная система, способная работать с EFI включает в себя загрузчик EFI. В системах с поддержкой EFI системная прошивка считывает системный раздел EFI (ESP) для обнаружения файлов EFI на загрузочном разделе.
2. Какие существуют загрузчики, похожие на GRUB?
Персонализированный экран менеджера загрузки rEFInd
systemd-boot в Pop OS
Про другие загрузчики читайте в статье Лучшие загрузчики для Linux.
3. Доступ к опциям и настройкам GRUB
В зависимости от настроек, у вас могут быть другие опции в меню GRUB. Вы можете редактировать меню GRUB. нажав кнопку Е. Таким способом вы можете менять параметры ядра перед его загрузкой. Например, в некоторых случаях отключение драйвера графики поможет загрузить зависшую при старте систему.
Вы также можете войти в командную строку GRUB используя кнопку C в меню GRUB.
4. Файл настроек GRUB
Стандартный файл настроек GRUB находится в /etc/default/grub. Также есть папка /etc/default/grub.d. Вы можете редактировать файл /etc/default/grub напрямую, однако рекомендуется сохранять дополнительные изменения в вышеуказанной папке.
Стандартный файл настроек GRUB
Вы должны обновить GRUB для того, чтобы ваши изменения стали действовать. Фактически, когда бы вы ни установили дополнительный дистрибутив Linux на ваш компьютер, он попытаться переписать существующие настройки GRUB своими. Подробнее о настройках Grub читайте здесь.
5. GRUB customizer для лёгкой настройки GRUB
GRUB Customizer может быть установлен в Ubuntu 20.04 из репозитория Universe и через PPA в Ubuntu 18.04. Он также доступен через AUR в дистрибутивах, основанных на Arch Linux. Подробнее про использование Grub Customizer рассказано в этой статье.
Заключение
Надеюсь, что вы немного лучше понимаете теперь, что такое GRUB. Возможно вы хотите рассказать ещё что-то о Grub? Пишите в комментариях!
GRUB (Русский)
GRUB2 – мультисистемный модульный программируемый кроссплатформенный загрузчик, с поддержкой сети, множества файловых систем, таблиц разделов, логических томов, образов и архивов.
Contents
Предисловие
Релиз GRUB-2.00 уже вышел, но разработка продолжается. В репозиториях ArchLinux появляюся самые свежие, в том числе и бета-версии GRUB, поэтому переустанавливать загрузчик (командой grub-install) и особенно обновлять файл конфигурации (командой grub-mkconfig) следует с осторожностью.
Если вы не хотите использовать GRUB2, можно установить GRUB Legacy из AUR.
Замечание для текущих и бывших пользователей GRUB Legacy
Требования к диску
Загрузчик в BIOS
Сама по себе BIOS, как правило, не требует наличия на диске каких-либо таблиц разделов.
Поэтому, для успешной загрузки в режиме BIOS, используемый способ разметки диска должен предусматривать:
1) встраивание кода загрузчика в начальный сектор;
2) выделение на диске специальной, не занятой файловыми системами области (группы секторов), из которой будет загружаться стартовый образ загрузчика, умеющий читать хотя бы одну файловую систему.
Программа установки GRUB2 умеет встраивать код BIOS-версии загрузчика на диски с таблицами разделов MBR и GPT, которые удовлетворяют обоим требованиям.
В обоих случаях, для встраивания используются два образа:
Требования GRUB2-BIOS к MBR
Для встраивания образа загрузчика core.img на диск с MBR, используется промежуток между начальным сектором с MBR и самым первым (по расположению) разделом. Если ближайший к началу диска раздел начинается с сектора 63 или больше,
то в большинстве случаев этого места (31КБ) вполне достаточно для встраивания GRUB2. Размер образа core.img зависит от размера модулей для чтения используемых таблицы разделов и ФС. В частности, для комбинации MBR+ext4 он составляет всего 25КБ.
Однако, в некоторых более сложных случаях, размер образа может оказаться больше 31КБ, и тогда отступа в 63 сектора уже не хватит. Поэтому современные версии fdisk по-умолчанию предлагают создавать первый раздел с гораздо большим отступом (1МБ), начиная с 2048 сектора.
Требования GRUB2-BIOS к GPT
Загрузчик в UEFI
В отличии от BIOS, UEFI загружает образ загрузчика из файла, и поэтому предъявляет определённые требования к таблице разделов, разделу, файловой системе, и к содержимому загружаемого файла.
Рекомендации по установке загрузчика
Выбор раздела
Если на компьютере установлено несколько операционных систем или диструбутивов, может оказаться удобным сделать один системонезависимый загрузчик, и установить его на отдельный диск или раздел. В этом случае стоит учесть следующее:
Выбор таблицы разделов
Установка
Установка GRUB2 в процессе установки Arch Linux
Чтобы установить GRUB2 в процессе установки, предварительно требуется смонтировать корневой раздел устанавливаемого Arch, (а в него boot-раздел, если требуется), и выполнить команду arch-chroot.
Установка пакета
Файлы и утилиты для установки GRUB2 содержатся в пакете grub, и устанавливаются командой
Установка загрузчика
Установка BIOS-версии загрузчика
Полноценная установка для BIOS
Генерация загрузочного образа для BIOS без установки
Установка UEFI-версии загрузчика
В режиме UEFI
Используя эти опции вместе, при желании можно установить файлы загрузчика непосредственно в загрузочный раздел EFI, например так:
Без доступа к UEFI
Из 32-битного Arch
Если на машине есть UEFI, но установленный ArchLinux имеет архитектуру i686, установить UEFI-версию GRUB можно, но есть дополнительное затруднение – сборка загрузчика x86_64-efi отсутствует в пакете «grub» для архитектуры i686. В пакете же для архитектуры x86_64 присутствуют все три сборки:
Перед тем, как устанавливать UEFI-версию GRUB из системы i686, придётся сначала скачать пакет grub для x86_64, и распаковать из него (под рутом) недостающую сборку загрузчика:
После этого можно устанавливать загрузчик, как описано в предыдущей главе «Без доступа к UEFI».
Установка в LVM
Установка GRUB2 на диск с LVM происходит в целом так же, как и на диск без LVM.
GRUB2 читает файловые системы из логических томов LVM, как и из обычных разделов, поэтому никакого отдельного раздела /boot вне LVM для файлов GRUB2 и загружаемых им образов ядра не требуется. Однако, для встраивания стартовых образов GRUB2 по-прежнему нужна таблица разделов.
Для загрузки в режиме BIOS, в MBR никаких дополнительных разделов создавать не нужно, достаточно единственного раздела на весь диск, полностью отданного под LVM, и оставленного свободного места перед разделом для встраивания загрузчика.
Для загрузки в режиме UEFI, или загрузки с GPT в любом режиме, требуется как минимум один загрузочный раздел вне LVM для стартового образа GRUB2, но не для файлов загрузчика, и не для образов ядра (не /boot ).
Установка на образ диска
В некоторых случаях может понадобиться установить GRUB2 на образ диска, например, для загрузки в виртуальной машине. К сожалению, в нынешних версиях (на конец 2015г) программа установки загрузчика grub-install по-умолчанию считает loop-устройство, через которое подключается образ, не имеющим разделов, а потому не ищет на нём таблицу разделов, и не включает в начальную загрузку модуль чтения таблицы разделов.
Пример установки GRUB2 на образ диска с MBR, и размещением файлов загрузчика в каталоге /grub на первом разделе:
Переустановка загрузчика
Переустановка пакета не переустанавливает загрузчик.
Переустановка GRUB2 выполняется командой grub-install, и ничем не отличается от установки.
Переустановка GRUB2 может потребоваться в следующих случаях:
Переустановка GRUB2 не требуется:
Перенос загрузчика
Загрузчик GRUB состоит из двух частей: (внефайлового) загрузочного кода в таблице разделов и файлов в каталоге /grub (/boot/grub).
Если загрузчик переносится на другой диск, также может потребоваться изменение настроек BIOS/UEFI, чтобы загрузка начиналась с этого диска.
Загрузчик GRUB не читает fstab и игнорирует флаг bootable в MBR, поэтому любые манипуляции с ними не имеют никакого отношения к установке, переустановке или переносу GRUB.
После установки
В настоящее время GRUB2, сразу после установки, готов к работе только в режиме консоли. (Это будет продолжаться до тех пор, пока мейнтейнеры пакета «grub» не заменят бессмысленный дефолтный файл конфигурации загрузчика на рабочую статическую или автоматически генерируемую версию.)
Чтобы получить при загрузке действующее меню GRUB2, требуется заменить файл grub.cfg самостоятельно. Речь об этом идёт в следующей части «Настройка».
Настройка
Главный файл конфигурации загрузчика
Автоматическая конфигурация (grub-mkconfig)
Генерация конфига
Чтобы применить изменения, запустите команду:
Параметры конфигуратора
Дефолтный файл /etc/default/grub содержит параметры конфигуратора с настройками по-умолчанию, снабженные комментариями на английском языке. Ниже перечислены некоторые наиболее общие из них:
Другие параметры конфигуратора вы можете найти ниже, в соответсвующих тематических главах.
Прямая конфигурация
GRUB2 – программируемый загрузчик, и файл его конфигурации – это не файл настроек, а программа, выполняемая загрузчиком, скрипт. Как всякий скрипт, он может быть как очень простым, не сложнее menu.lst в GRUB Legacy, так и очень сложным, поскольку сложность скриптов практически ничем не ограничена.
При запуске автоматического конфигуратора, выполняется набор скриптов, работающих на уровне ОС, которые генерируют скрипт конфигурации загрузчика. Уже этот, сгенерированный скрипт, выполняется на уровне загрузчика, и в свою очередь, генерирует меню GRUB. Такая схема предполагает некоторое упрощение типовой настройки GRUB, но ценой загромождения кода, снижения надёжности и гибкости.
Прямое написание скрипта даёт непосредственный доступ ко всем возможностям GRUB2, значительно большую гибкость, надёжность и стабильность, просто за счёт упрощения кода и устранения лишних звеньев в цепочке.
Язык конфигурации GRUB2 – сильно упрощённый UNIX-шелл, из которого убраны возможности перенаправления ввода-вывода, и добавлены команды, специфичные для загрузчика.
Автоматический генератор конфигурации изначально создавался для дистрибутивов Debian и Ubuntu, в которых используются версионные имена образов ядра, что заставило разработчиков этих дистрибутовов создавать автоматические генераторы конфигов вообще для всех используемых там загрузчиков.
В ArchLinux не используется версионное обновление ядер – имена образов ядра и initramfs для каждого пакета с ядром не меняются при обновлении, и файл конфигурации загрузчика не обновляется при обновлении ядра.
Более того, возможности скриптов GRUB2 позволяют средствами самого загрузчика, прямо перед загрузкой ОС, генерировать меню с переменным количеством строк, для поиска и загрузки всех установленных ядер ArchLinux, без изменения каких-либо файлов конфигурации. То же самое возможно и для версионных ядер Debian и Ubuntu.
Примеры кода конфигурации даны ниже, подробный справочник имеется на сайте GRUB.
Прежде чем приступать к написанию конфига, крайне желательно защитить его от возможной перезаписи при обновлении/переустановке пакета grub.
Защита конфигурации
К сожалению, мейнтейнеры пакета grub отказываются убирать из него бессмысленный, по определению неработающий и никому не нужный «дефолтный» вариант файла grub.cfg, создающий небольшую, но постоянную угрозу перезаписи настоящего рабочего конфига GRUB, особенно в случае ошибок со стороны мейнтейнеров. Эта опасность не зависит от используемого метода конфигурации GRUB – и ручной, и автогенерированный конфиг может быть однажды случайно перезаписан или переименован при очередном обновлении пакета, и выяснится это с большой вероятностью только после перезагрузки.
Вынос конфигурации в другой файл
Так как GRUB поддерживает модульность конфигурации, можно оставить в файле grub.cfg только одну строку со ссылкой на другой файл, например menu.cfg
и в дальнейшем вместо grub.cfg править только menu.cfg
Для автоконфигурации в этом случае можно использовать команду
Прямая блокировка grub.cfg
Чтобы защитить файл от любых изменений, присвойте ему атрибут immutable
Блокировка снимается командой
Если основная конфигурация уже вынесена в другой файл, блокировку grub.cfg достаточно установить однажды и больше не снимать.
Блокировка защитит файл от перезаписи скриптами установки пакетов. Чтобы избежать конфликта с файлом из пакета, добавьте его имя в строку NoUpgrade в /etc/pacman.conf :
Перенос каталога grub
Если каталог grub/ со всеми файлами загрузчика расположен в корневом разделе, для защиты конфигурации можно переместить его из /boot в другое место в пределах раздела, проще всего прямо в корень :
Если вы используете автоконфигуратор, не забудьте после переноса заменить возможные упоминания /boot/grub на /grub в файлах /etc/default/grub и /etc/grub.d/*
Для генерации конфига после переноса можно пользоваться командой
Синтаксис файла конфигурации GRUB
Пример минимальной работающей конфигурации
Здесь только один пункт меню, загрузчик в корневом разделе, который передаётся ядру меткой Arch_root
Основные команды и переменные
Файл конфигурации состоит из команд, выполняемых по порядку, как в обычном шелл-скрипте.
Стандартный пример конфигурации
В этом примере так или иначе фигурируют три раздела:
Вторичные конфиги, вложенные меню и смена контекста
Как и UNUX-шелл, GRUB2 поддерживает три вида переменных: обычные, позиционные параметры и переменные окружения.
Обычные переменные создаются в момент первого присвоения, командой set переменная=значение
При этом само слово set можно не писать:
Для уничтожения обычной переменной может быть использована команда unset
Обычные переменные могут быть экспортированы «в окружение» командой export
Так же как в шелл-скриптах, из одного конфига GRUB2 может вызван другой файл конфига.
Постоянное именование устройств
Пример загрузки ядра с автоматической подстановкой UUID:
Параметры команды probe здесь те же самые, просто в сокращённой форме.
Метки
Метку можно подставить в параметры ядра. Пример:
Если загрузчик находится в отдельном от ядра и корня разделе, корневой раздел можно указать через метку и загрузчику:
Особые типы устройств
Загрузка других операционных систем
GRUB можно использовать для загрузки и других установленных на той же машине дистрибутивов и операционных систем. Для добавления каждого нового пункта загрузочного меню GRUB, в его конфиг добавляется своя секция menuentry. Примеры конфигурации дополнительных пунктов для запуска Linux и Windows приведены ниже.
Если вы используете автоконфигурацию GRUB, но хотите, чтобы в генерируемый конфиг добавлялись ваши пункты меню, написанные вручную, отредактируйте файл /etc/grub.d/40_custom и допишите их в конец этого файла. Всё его содержимое будет добавлено в конфиг загрузчика при запуске grub-mkconfig
GNU/Linux
В этом примере другой дистрибутив Linux загружается с раздела sda2 :
Windows
Операционные системы Windows не поддерживают протокол Multiboot, и GRUB не может загружать Windows непосредственно. Чтобы загрузить Windows, нужно запустить её собственный загрузчик, который, в свою очередь, загружает ядро Windows и набор необходимых для старта драйверов, по списку, который он читает из реестра Windows.
Для BIOS и для UEFI в одной и той же версии Windows используются две различных версии загрузчика, каждая со своими особенностями. Windows, установленная в режиме BIOS, не имеет UEFI-загрузчика и не стартует в режиме UEFI, и наоборот – будучи установленной в режиме UEFI, Windows не стартует режиме BIOS.
Windows в режиме BIOS
Загрузчик Windows для режима BIOS поддерживает только одну таблицу разделов – MBR, и не поддерживает GPT, независимо от версии Windows. Кроме того, 32-битная версия Windows XP может быть запущена только в режиме BIOS.
Загрузчик Windows может быть запущен через бут-сектор раздела, на который он установлен:
либо напрямую из его файла, специальной командой ntldr
В Windows Vista и выше файл загрузчика называется иначе, но может быть загружен той же командой:
Windows в режиме UEFI
Загрузчик Windows, установленной в режиме UEFI, поддерживает только одну таблицу разделов – GPT, и не поддерживает MBR.
Запуск FreeDOS
Аналогично командам linux и ntldr, в GRUB предусмотрена возможность прямой загрузки ядра FreeDOS, командой freedos, без использования оригинального загрузочного кода в MBR и бут-секторе:
Это может быть удобно, когда требуется скопировать уже установленную, к примеру, на флешку, FreeDOS, используемую для запуска MHDD и подобных инструментов. Такой способ загрузки позволяет под Linux копировать файлы и каталоги однажды установленной FreeDOS на другие носители, в том числе «мультизагрузочные». (Установка FreeDOS штатным способом, с записью её загрузочного кода в MBR и бут-сектор, требует каждый раз загружать саму FreeDOS, хотя бы в виртуальной машине.)
Запуск программ, работающих без ОС
Memtest86+
Тест памяти memtest86+ (запускается только в режиме BIOS):
EFI-приложения
EFI-приложения можно запускать не только из интерфейса UEFI, но и из других EFI-приложений, в том числе из UEFI-версии GRUB2, с помощью команды chainloader. На примере загрузчика Windows это уже показано выше.
Чтобы запустить EFI-приложение, вовсе не обязательно класть его на раздел EFISYS, особенно если приложение большое, а на спецразделе очень мало места. Достаточно, чтобы файл приложения читался средствами GRUB, а переменная root указывала на EFISYS. В этом примере UEFI Shell запускается прямо из /boot :
При выходе из UEFI Shell вы снова увидите меню GRUB.
Debian, Ubuntu и другие дистрибутивы с версионным обновлением ядра
В дистрибутивах с версионными ядрами, при каждом обновлении ядра автоматически вызывается генератор конфигурации загрузчика, поскольку имена загрузочных образов vmlinuz и initrd меняются при каждом обновлении. Это обстоятельство вынудило разработчиков Debian и Ubuntu сделать автоконфигуратор даже для первой версии GRUB, в которой обычно использовались только статические конфиги.
Если другой дистрибутив установлен на отдельный диск (в режиме BIOS), и имеет собственную установку GRUB2, для его загрузки достаточно запустить другой загрузчик:
В режиме UEFI несколько загрузчиков могут быть установлены и на один диск, и запускаться один из другого как EFI-приложения:
В некоторых случаях (не всегда) другую установку GRUB2 можно запустить в режиме BIOS с помощью команды multiboot, минуя встраивание образа в таблицу разделов:
К сожалению, часто встречается ситуация, когда другой дистрибутив установлен в режиме BIOS на тот же самый диск, в таблицу разделов которого можно установить только один загрузчик, и запустить второй проблематично. В этом случае остаётся либо использовать GRUB из состава того дистрибутива, либо учить штатный загрузчик ArchLinux работать с версионными ядрами.
Самый простой способ это сделать – подсунуть «своему» GRUB конфиг от чужого, в котором всё уже предусмотрено, не забыв перед этим сбросить некоторые переменные, которые могут вызвать проблемы:
Однако, есть возможность обойтись без чужих конфигов и загрузчиков, если использовать динамическую генерацию меню загрузчиком. В конфиг GRUB2 включается скрипт, генерирующий меню для Ubuntu:
Параметры для загрузки чужих ядер здесь вынесены в отдельный файл настроек:
Этот скрипт в конфиге GRUB динамически генерирует отдельное подменю со всеми имеющимися ядрами Ubuntu, и отдельно (для Ubuntu) запоминает последнее выбранное ядро.
Прямая загрузка из образа диска
GRUB2 может загружать образы ядер ОС в том числе из файлов-образов, отображаемых в псевдоустройство командой loopback. Однако следует иметь в виду, что псевдоустройство действует только в пределах загрузчика. В общем случае загрузка из образа выглядит примерно так:
После отображения образа в loop-устройство (имя может быть любым, не только loop), можно средствами GRUB2 обращаться с ним так же, как и с физическими дисками – не только загружать файлы ядра и initrd, что происходит перед загрузкой, а к примеру, прочитать метку ФС образа (требуется для образа Arch):
Так как средства загрузки с loopback-устройства в разных дистрибутивах различаются, для каждого из них требуется передавать при загрузке параметры, специфичные для данного дистрибутива.
В некоторых дистрибутивах средства загрузки из образа могут и вовсе отсутствовать, поэтому не все существующие загрузочные образы могут быть использованы подобным образом.
Во всех приведённых ниже примерах предполагается, что GRUB2 установлен на тот же раздел диска или флешки, где лежат образы (в противном случае см. ниже). Такой способ установки позволяет записать на одну флешку или внешний диск один или несколько образов, при этом сохранив возможность использования оставшегося места на носителе по прямому назначению, с сохранением предпочтительной файловой системы.
Arch Linux ISO
В этом примере GRUB2 загружает официальный установочный образ ArchLinux.
Файл образа с именем вида archlinux-YYYY.MM.DD-x86_64.iso должен лежать в корне раздела. В этом случае текст файла конфигурации можно использовать «как есть», без каких-либо правок – загрузчик сам определит конкретное имя образа (или образов), сам прочитает UUID раздела, метку образа, и при загрузке передаст всё это дистрибутиву через параметры ядра.
Ubuntu desktop ISO
В этом примере GRUB2 загружает любые ISO-образы Ubuntu, кроме серверных. В сгенерированном меню будут варианты загрузки для всех найденных образов Ubuntu.
Как и в предыдущем примере, код не требует никаких правок, если файлы образов лежат в корне раздела, но можно вписать отдельный каталог для них в строку dir=
Загрузка образов с отдельного раздела встроенного диска
Если образы требуется загружать с некорневого раздела встроенного жесткого диска (например, /home ), можно использовать тот же код, создав для него подменю:
Если раздел требуется задать по UUID, можно сделать так:
Защита загрузчика паролем
О защите загрузчика
По-умолчанию GRUB2 предоставляет любому пользователю полный доступ ко всем своим возможностям, включающим в себя не только выполнение любых пунктов меню, но и изменение их кода перед выполнением, а также терминал, позволяющий вручную выполнить любые команды загрузчика.
Всё это может помочь при настройке и восстановлении системы, однако те же самые инструменты существенно облегчают любому посетителю взлом системы. Изменение параметров ядра может быть использовано для получения полномочий root без ввода пароля, а загрузка с внешнего носителя – для получения полного доступа ко всем незашифрованным данным.
GRUB2 включает в себя средства ограничения доступа к загрузчику. С их помощью, в сочетании с ограничением доступа к BIOS, и запретом в BIOS на загрузку с любых внешних носителей, можно сильно затруднить несанкционированный доступ к системе, кроме случая вскрытия корпуса для извлечения дисков или сброса настроек BIOS.
Реализация паролей в GRUB2
Пользователи в GRUB2 делятся на три категории:
Для управления доступом к пунктам меню, команды menuentry и submenu поддерживают следующие опции:
—users= позволяет задать список пользователей, которым разрешено выполнять этот пункт меню
—unrestricted разрешает выполнять этот пункт меню без авторизации.
Список администраторов задаётся в переменной superusers, например так:
Пароль для каждого пользователя отдельно может быть задан в открытом виде командой
либо в зашифрованном (хешированном) виде, командой
Для хеширования пароля используется утилита grub-mkpasswd-pbkdf2. Запустив её и введя (дважды) пароль, можно получить его хеш, пригодный для вставки в конфиг GRUB2.
Чтобы защитить пароли и хеши от просмотра, можно задать права на файл с конфигом GRUB в виде root:root 600, либо вынести команды с паролями в отдельный файл
и ограничить доступ только к нему.
Внедрение паролей в генерируемый конфиг
Есть возможность вставить вручную написанный фрагмент конфига с паролями, добавив в конец файла /etc/grub.d/00_header примерно такие строки:
Пример конфига с паролями
Здесь «Arch Linux» разрешено загружать без авторизации, «Windows» разрешено загружать пользователю second с паролем dnjhjq, а активировать «Boot next disk», позволяющий загрузиться с подключённой флешки, может только администратор по имени root, который никому не сказал свой пароль.
Визуальная настройка
GRUB2 предоставляет возможность менять способы отображения и внешний вид меню.
Цвета меню
Цвета меню GRUB2 задаются в переменных menu_color_normal (общие цвета текста/фона) и menu_color_highlight (цвета текста/фона выделенной строки). Например, цвета по умолчанию для Arch задаются в конфиге GRUB (grub.cfg) так:
или в настройках /etc/default/grub конфигуратора grub-mkconfig так:
Список доступных в GRUB2 цветов можно найти на сайте.
Скрытое меню
grub-mkconfig умеет «скрывать» меню так, что оно появляется на экране только при нажатии клавиши ESC до истечения таймаута. Чтобы использовать эту его возможность, нужно раскомментировать в /etc/default/grub строки
В конфиг GRUB (grub.cfg) для получения аналогичного результата можно добавить такой код:
Если вы используете в загрузчике графический режим с обоями и шрифтами, следует решить, нужно ли их инициализировать до начала отсчёта, или только если отсчёт прерван пользователем.
Настройка параметров режима экрана
Проверка доступных режимов экрана
GRUB2 может работать в текстовом и графических режимах экрана. Актуальный список режимов доступных средствами BIOS или UEFI на конкретной машине, можно получить, выполнив команду videoinfo в консоли загрузчика. На разных машинах, с разными графическими адаптерами, прошивками и мониторами, этот список может существенно отличаться.
Выбрав нужный режим желательно предварительно его проверить с помощью команды videotest режим в той же консоли, примерно так:
Тестовая картинка должна отображаться на экране до нажатия на любую клавишу. Если вы видите её, значит тест пройден.
Текстовый режим
GRUB2 стартует в текстовом режиме. Если нужно вернуться в текстовый режим из графического, можно использовать в скрипте конфигурации, или прямо в консоли GRUB, следующие команды:
Если вы используете автоматический конфигуратор, в настройках которого стоит auto по-умолчанию, загрузчик после старта будет переходить графический режим. Чтобы изменить это его поведение, можно задать для загрузчика текстовый режим:
или же задать текстовый режим только для загрузки ядра:
Графические режимы
Эти режимы могут быть разными:
Также можно задать только один из них, не задавая другой.
Режим экрана для ядра Linux будет установлен в начале загрузки ядра, никаких модулей GRUB для этого специально загружать не требуется.
Существует также старый, специфический для BIOS, способ задать VESA-режим – через параметр ядра Linux vga, например vga=790
Возможные значения для параметра vga, в зависимости от количества цветов и пикселей на экране, можно найти в этой таблице
Однако в некоторых версиях BIOS могут использоваться и другие коды режимов. Актуальные значения можно получить из вывода команды videoinfo в консоли GRUB или же выполнить в терминале запущенной ОС GNU/Linux команду
Команда hwinfo доступна в репозитории community.
Графический режим, шрифт и обои
Установка переменной gfxmode сама по себе НЕ переключает GRUB в графический режим. Чтобы перейти в графику, требуется:
В настройках конфигуратора /etc/default/grub обои можно задать так:
Пример графического режима с установкой дефолтного шрифта и обоев из дефолтной темы оформления. Нужные модули графического режима выбираются автоматически.
и векторными в формате TTF
Установка шрифта на примере Terminus
Пакет terminus-font для GRUB не подходит, требуется скачать с официального сайта его исходники, они как раз в формате BDF. Далее остаётся распаковать архив, конвертировать файл со шрифтом нужного размера, и скопировать в каталог, доступный для GRUB:
Пример фрагмента конфига GRUB со шрифтом Terminus и русским языком:
Проверка загрузки шрифтов
Если шрифты должны были быть загружены, но на экране выглядят неправильно, проверить это можно в консоли GRUB, с помощью команды lsfonts, которая выводит список успешно загруженных шрифтов.
Некоторые файлы шрифтов могут быть устаревшими, и несовместимыми с установленной версией GRUB. Чтобы отдельно проверить загрузку каждого шрифта, можно попробовать вручную загружать их в консоли GRUB командами вида
При попытке загрузить несовместимый шрифт будут выдаваться сообщения об ошибках.
Графическая тема оформления
Даже после переключения в графический режим, меню GRUB отображается с помощью символов псевдографики. Альтернативный вариант отображения GRUB – графические темы оформления
В файлах конфигурации GRUB путь к файлу описания темы требуется записать в переменную theme ДО переключения в графический режим. Чтобы тема могла использовать указанные в ней элементы, до перехода в графику также нужно загрузить модули для использованных в ней форматов картинок (чаще всего png) и загрузить все имеющиеся в ней шрифты.
Пример загрузки темы оформления, входящей в пакет grub :
Некоторые темы оформления GRUB можно найти в AUR.
Автоматизация в меню
Запоминание выбранного пункта меню
В настройках конфигуратора запоминание включается так:
Пример реализации запоминания в конфиге GRUB2 приведён ниже.
Однократная загрузка заданного без смены дефолта
Существует утилита grub-reboot, с её помощью можно из-под ОС запланировать для однократную загрузку другого пункта меню, например так:
В генерированном меню это работает, если перед запуском grub-mkconfig в /etc/default/grub была строка
Пример реализации однократного выбора в конфиге GRUB2 приведён ниже.
Пример конфига GRUB с реализацией запоминания
В данном примере используется предоставляемая GRUB2 возможность сохранения переменных между сеансами.
Команда load_env загружает из файла все сохранённые в нём переменные.
Команда save_env сохраняет указанные переменные в файл.
Динамическое меню
Конфиг GRUB2 это скрипт, выполняемый загрузчиком. Он действительно генерирует, а не статически описывает меню загрузчика.
В этом примере загрузчик сам, «на лету», находит в /boot/ все установленные ядра Arch Linux и образы initramfs, правильно группирует их и формирует меню для их загрузки, а после выбора пункта меню запоминает его. При загрузке в параметры ядра подставляется автоматически найденный загрузчиком UUID корневого раздела.
В grub.cfg пишем только ссылку. (причину см. выше.)
Пользовательские настройки подключаются из отдельного файла settings.cfg
Центральный файл, здесь реализована функция запоминания выбранного пункта меню, сюда же подключены остальные части конфига:
Скрипт поиска ядер и генерации меню:
Консоль GRUB2
Загрузчик GRUB2 выполняет свой файл конфигурации как шелл-подобный скрипт, состоящий из команд. Все те же команды он позволяет выполнять и в интерактивном режиме, с помощью консоли.
Нормальная консоль
Запуск консоли
GRUB2 открывает нормальную консоль, если:
Команды, полезные в консоли GRUB2
Кроме уже описанных в части «Настройка», в консоли GRUB2 могут пригодиться:
В нормальной консоли GRUB2 поддерживает возврат к предыдущим командам и автодополнение команд, каталогов и файлов по нажатию клавиши TAB, как в консоли Linux.
Пример загрузки ArchLinux из консоли загрузчика
Если вы успешно установили загрузчик в корневой раздел, но забыли создать конфиг загрузчика, вы увидите меню из дефолтного конфига, но оно не будет работать. Чтобы продолжить загрузку, вы можете войти в консоль, нажав клавишу «c«, и выполнить команды:
Пример загрузки с внешнего диска из консоли
Во многих версиях BIOS нет специального интерфейса для однократной загрузки с флешки. Для этого можно создать отдельный пункт меню, но на один раз проще обойтись консолью GRUB:
Пример конфига с загрузкой без меню
В этом примере GRUB2 загружает с диска образы ядра и initramfs, ждёт 3 секунды, и запускает ядро.
Если же в течении этих секунд пользователь нажмёт ESC, он попадёт в консоль загрузчика. Так как ядро уже загружено, для продолжения загрузки достаточно набрать команду boot в консоли.
Аварийная консоль
Аварийная консоль GRUB2 встроена в стартовый образ загрузчика, и запускается в случаях, когда GRUB2 не может самостоятельно перейти в «нормальный» режим. Такое может случиться, если ядро GRUB2 при загрузке не нашло каталог со своими файлами и модулями по пути, указанному в переменной prefix.
Если вы знаете, что делалось с диском перед тем, как GRUB показал ошибку, то возможно, вы уже догадываетесь, в чём ошибка и удастся ли её исправить.
Если у вас получилось найти правильный диск, раздел и каталог, и вы успешно прописали из в переменные, остаётся загрузить модуль «normal» и выполнить одноимённую команду (она станет доступна после загрузки модуля), чтобы перейти в «нормальный» режим загрузчика:
Если же из аварийной консоли не удаётся получить доступ к нужному каталогу с файлами загрузчика – увы, но больше она ничем не сможет помочь, и вам придётся обратиться к другим способам загрузки, например с внешних носителей.
Запуск GRUB2 из других загрузчиков
Загрузка из старых версий GRUB
Код конфига для GRUB Legacy, с загрузкой GRUB2:
Загрузка из syslinux
Примеры исправления проблем
Сообщение о невозможности встраивания в MBR
Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом здесь.
Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.