Additional GRUB Setup (in Russian)

Загрузка других операционных систем

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

Если вы используете автоконфигурацию GRUB, но хотите, чтобы в генерируемый конфиг добавлялись ваши пункты меню, написанные вручную, отредактируйте файл /etc/grub.d/40_custom и допишите их в конец этого файла. Всё его содержимое будет добавлено в конфиг загрузчика при запуске grub-mkconfig

GNU/Linux

В этом примере другой дистрибутив Linux загружается с раздела sda2:

submenu "Other Linux" { set root=hd0,2 linux /boot/vmlinuz # добавьте сюда все нужные опции ядра initrd /boot/initrd.img # файл initrd, если он используется }

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 может быть запущен через бут-сектор раздела, на который он установлен:

menuentry "Windows" { chainloader (hd0,2)+1 }

либо напрямую из его файла, специальной командой ntldr

submenu "Windows XP" { set root=hd0,2 ntldr /ntldr }

В Windows Vista и выше файл загрузчика называется иначе, но может быть загружен той же командой:

Windows в режиме UEFI

Загрузчик Windows, установленной в режиме UEFI, поддерживает только одну таблицу разделов – GPT, и не поддерживает MBR.

Если GRUB2 установлен в режиме UEFI, его стартовый образ лежит в том же ESP/EFISYS разделе, что загрузчик Windows. Полный путь к стартовому образу GRUB2 режима UEFI указывает переменная $cmdpath с содержимым вида (диск,раздел)/EFI/каталог/grubx64.efi. Чтобы из этого пути получить диск и раздел, можно регулярным выражением обрезать скобки и путь, и записать результат в переменную $root. После этого загрузчик Windows запускается командой chainloader, как обычное EFI-приложение:

Запуск 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 из состава того дистрибутива, либо учить штатный загрузчик Arch Linux работать с версионными ядрами.

Самый простой способ это сделать – подсунуть "своему" GRUB конфиг от чужого, в котором всё уже предусмотрено, не забыв перед этим сбросить некоторые переменные, которые могут вызвать проблемы:

Однако, есть возможность обойтись без чужих конфигов и загрузчиков, если использовать динамическую генерацию меню загрузчиком. В конфиг GRUB2 включается скрипт, генерирующий меню для Ubuntu:

Параметры для загрузки чужих ядер здесь вынесены в отдельный файл настроек:

Сам скрипт:

Этот скрипт в конфиге GRUB динамически генерирует отдельное подменю со всеми имеющимися ядрами Ubuntu, и отдельно (для Ubuntu) запоминает последнее выбранное ядро.

Прямая загрузка из образа диска

GRUB2 может загружать образы ядер ОС в том числе из файлов-образов, отображаемых в псевдоустройство командой loopback. Однако следует иметь в виду, что псевдоустройство действует только в пределах загрузчика. В общем случае загрузка из образа выглядит примерно так:

После отображения образа в loop-устройство (имя может быть любым, не только loop), можно средствами GRUB2 обращаться с ним так же, как и с физическими дисками – не только загружать файлы ядра и initrd, что происходит перед загрузкой, а к примеру, прочитать метку ФС образа (требуется для образа Arch):

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

  • Установочный образ Arch требует метку ФС образа в параметре ядра archisolabel=, и линуксовое устройство раздела, на котором он лежит, в параметре img_dev= (универсальнее всего прочесть и передать его UUID, но можно использовать и метку, если она есть).

  • Образ Ubuntu довольствуется лишь путём к образу на диске, а остальное находит сам.

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

Во всех приведённых ниже примерах предполагается, что GRUB2 установлен на тот же раздел диска или флешки, где лежат образы (в противном случае см. ниже). Такой способ установки позволяет записать на одну флешку или внешний диск один или несколько образов, при этом сохранив возможность использования оставшегося места на носителе по прямому назначению, с сохранением предпочтительной файловой системы.

Arch Linux ISO

В этом примере GRUB2 загружает официальный установочный образ Arch Linux.

Файл образа с именем вида archlinux-YYYY.MM.DD-x86_64.iso должен лежать в корне раздела. В этом случае текст файла конфигурации можно использовать "как есть", без каких-либо правок -- загрузчик сам определит конкретное имя образа (или образов), сам прочитает UUID раздела, метку образа, и при загрузке передаст всё это дистрибутиву через параметры ядра.

Если же вы хотите использовать для образа (образов) особый каталог, впишите путь к нему (относительно корня раздела) в строку dir=, например

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, либо вынести команды с паролями в отдельный файл

и ограничить доступ только к нему.

Внедрение паролей в генерируемый конфиг

Конфигуратор grub-mkconfig сам не умеет ограничивать доступ к загрузчику, хотя и устанавливает права доступа к конфигу в -rw------- root root, что имеет смысл только для сохранения паролей.

Есть возможность вставить вручную написанный фрагмент конфига с паролями, добавив в конец файла /etc/grub.d/00_header примерно такие строки:

Важно: После генерации такого конфига ВСЕ пункты меню станут доступны только администратору!

Более гибкая настройка доступа к загрузчику, например разрешение штатной загрузки системы без ввода пароля, возможна либо путём добавления своих пунктов меню с опцией --unrestricted в конец файла /etc/grub.d/40_custom, либо при самостоятельном написании всего конфига GRUB.

Пример конфига с паролями

Здесь "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) для получения аналогичного результата можно добавить такой код:

Здесь не задаётся отдельный таймаут для скрытого и видимого меню, а используется общий из переменной timeout. После вывода надписи запускается ожидание sleep с в выводом обратного отсчёта --verbose и прерыванием по ESC --interruptible . Если отсчёт не был прерван, таймаут уменьшается до нуля set timeout=0, и меню проскакивает без вывода на экран. В противном случае таймаут отключается вообще unset timeout, чтобы отсчёт не начался повторно после показа меню.

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

Настройка параметров режима экрана

Проверка доступных режимов экрана

GRUB2 может работать в текстовом и графических режимах экрана. Актуальный список режимов доступных средствами BIOS или UEFI на конкретной машине, можно получить, выполнив команду videoinfo в консоли загрузчика. На разных машинах, с разными графическими адаптерами, прошивками и мониторами, этот список может существенно отличаться.

Выбрав нужный режим желательно предварительно его проверить с помощью команды videotest режим в той же консоли, примерно так:

Тестовая картинка должна отображаться на экране до нажатия на любую клавишу. Если вы видите её, значит тест пройден.

Примечание: Тест графики можно запускать только из текстового режима.

Текстовый режим

GRUB2 стартует в текстовом режиме. Если нужно вернуться в текстовый режим из графического, можно использовать в скрипте конфигурации, или прямо в консоли GRUB, следующие команды:

Если вы используете автоматический конфигуратор, в настройках которого стоит auto по-умолчанию, загрузчик после старта будет переходить графический режим. Чтобы изменить это его поведение, можно задать для загрузчика текстовый режим:

или же задать текстовый режим только для загрузки ядра:

Графические режимы

GRUB2 позволяет задать режим экрана для самого загрузчика в переменной gfxmode , и отдельно режим, который будет использоваться ядром Linux при загрузке, через переменную gfxpayload

Эти режимы могут быть разными:

или одинаковыми:

Также можно задать только один из них, не задавая другой.

Режим экрана для ядра Linux будет установлен в начале загрузки ядра, никаких модулей GRUB для этого специально загружать не требуется.

Вместо жесткого указания конкретного режима, можно присвоить переменной слово auto , и в этом случае режим будет выбран автоматически, исходя из предпочтений BIOS видеокарты и предпочтительного режима монитора. Обычно auto соответствует максимальному из штатных режимов монитора, но в некоторых случаях нужный режим приходится выставлять вручную.

Существует также старый, специфический для BIOS, способ задать VESA-режим – через параметр ядра Linux vga, например vga=790

Возможные значения для параметра vga, в зависимости от количества цветов и пикселей на экране, можно найти в этой таблице

 

640x480

800x600

1024x768

1280x1024

 

640x480

800x600

1024x768

1280x1024

256

0x301=769

0x303=771

0x305=773

0x307=775

32K

0x310=784

0x313=787

0x316=790

0x319=793

64K

0x311=785

0x314=788

0x317=791

0x31A=794

16M

0x312=786

0x315=789

0x318=792

0x31B=795

Однако в некоторых версиях BIOS могут использоваться и другие коды режимов. Актуальные значения можно получить из вывода команды videoinfo в консоли GRUB или же выполнить в терминале запущенной ОС GNU/Linux команду

Команда hwinfo доступна в репозитории community.

Графический режим, шрифт и обои

Установка переменной gfxmode сама по себе НЕ переключает GRUB в графический режим. Чтобы перейти в графику, требуется:

  • задать режим в переменной gfxmode

  • загрузить командой loadfont хотя бы один шрифт

  • загрузить модуль поддержки графического режима (vbe для BIOS, либо efi_gop и efi_uga для UEFI)

  • и модуль графического терминала gfxterm

  • после всего этого запустить графический терминал командой terminal_output gfxterm

GRUB2 поддерживает растровые шрифты в собственном формате pf2. Шрифт Unifont включен в пакет grub под именем unicode.pf2, и при установке загрузчика командой grub-install автоматически копируется в каталог /boot/grub/fonts

В графическом режиме GRUB2 также позволяет установить обои командой background_image . Поддерживаются изображения в форматах tga, png и jpeg, для каждого из них требуется предварительно загрузить соответствующий модуль. Максимальный поддерживаемый размер изображения зависит от вашего оборудования.

В настройках конфигуратора /etc/default/grub обои можно задать так:

Пример графического режима с установкой дефолтного шрифта и обоев из дефолтной темы оформления. Нужные модули графического режима выбираются автоматически.

После установки юникодного шрифта можно использовать в меню GRUB кириллицу, и даже перевести на русский язык встроенные сообщения загрузчика, присвоив переменной lang значение ru .

Чтобы использовать в GRUB свои шрифты, нужно предварительно конвертировать их в формат pf2. Для этого в состав пакета grub входит утилита grub-mkfont . Лучше всего она работает с растровыми шрифтами в формате BDF

и векторными в формате TTF

Установка шрифта на примере Terminus

Пакет terminus-font для GRUB не подходит, требуется скачать с официального сайта его исходники, они как раз в формате BDF. Далее остаётся распаковать архив, конвертировать файл со шрифтом нужного размера, и скопировать в каталог, доступный для GRUB:

Пример фрагмента конфига GRUB со шрифтом Terminus и русским языком:

Проверка загрузки шрифтов

Если шрифты должны были быть загружены, но на экране выглядят неправильно, проверить это можно в консоли GRUB, с помощью команды lsfonts, которая выводит список успешно загруженных шрифтов.

Некоторые файлы шрифтов могут быть устаревшими, и несовместимыми с установленной версией GRUB. Чтобы отдельно проверить загрузку каждого шрифта, можно попробовать вручную загружать их в консоли GRUB командами вида

При попытке загрузить несовместимый шрифт будут выдаваться сообщения об ошибках.

Графическая тема оформления

Даже после переключения в графический режим, меню GRUB отображается с помощью символов псевдографики. Альтернативный вариант отображения GRUB – графические темы оформления

Тема включает в себя файл описания theme.txt, а также может содержать элементы картинок для "рисования" меню, шрифты и обои.

В пакет grub входит дефолтная тема оформления, при установке командой grub-install она копируется в каталог /boot/grub/themes/starfield/ . Тему для GRUB требуется прописывать в виде полного пути к файлу описания темы. В настройках конфигуратора /etc/default/grub это делается так:

В файлах конфигурации GRUB путь к файлу описания темы требуется записать в переменную theme ДО переключения в графический режим. Чтобы тема могла использовать указанные в ней элементы, до перехода в графику также нужно загрузить модули для использованных в ней форматов картинок (чаще всего png) и загрузить все имеющиеся в ней шрифты.

Пример загрузки темы оформления, входящей в пакет grub:

Некоторые темы оформления GRUB можно найти в AUR.

Также в некоторых темах могут использоваться шрифты без поддержки кириллицы. Имейте это в виду, включая русский язык в конфигурации загрузчика

Автоматизация в меню

Запоминание выбранного пункта меню

В настройках конфигуратора запоминание включается так:

Пример реализации запоминания в конфиге GRUB2 приведён ниже.

Однократная загрузка заданного без смены дефолта

Существует утилита grub-reboot, с её помощью можно из-под ОС запланировать для однократную загрузку другого пункта меню, например так:

В генерированном меню это работает, если перед запуском grub-mkconfig в /etc/default/grub была строка

Пример реализации однократного выбора в конфиге GRUB2 приведён ниже.

Пример конфига GRUB с реализацией запоминания

В данном примере используется предоставляемая GRUB2 возможность сохранения переменных между сеансами.

Команда load_env загружает из файла все сохранённые в нём переменные.

Команда save_env сохраняет указанные переменные в файл.

В переменную chosen после выбора пункта меню помещается его заголовок. При выборе пунктов вложенных меню, в переменную записывается весь "путь", состоящий из последовательно выбранных заголовков, разделённых знаком ">". Например, если в подменю "Fallback" выбран пункт "Arch linux-lts", в переменной будет "Fallback>Arch linux-lts".

Также здесь используется объявление функции. Функция вызывается так же, как другие команды GRUB. При каждом вызове эта функция будет сравнивать свой параметр или заголовок выбранного пункта меню с переменной default, и если выбор отличается - записывать его в default и сохранять.

Переменные сохраняются в файле /boot/grub/grubenv . Так как GRUB не умеет корректно модифицировать файловые системы, файл должен быть заранее создан, а длина его при перезаписи не должна меняться, поэтому конец файла до нужной длины в 1024 байта всегда заполнен символами ### . Для просмотра и изменения при загруженной ОС сохранённых в этом файле переменных, настоятельно рекомендуется использовать утилиту grub-editenv, либо grub-reboot и grub-set-default.

Динамическое меню

Конфиг GRUB2 это скрипт, выполняемый загрузчиком. Он действительно генерирует, а не статически описывает меню загрузчика.

В этом примере загрузчик сам, "на лету", находит в /boot/ все установленные ядра Arch Linux и образы initramfs, правильно группирует их и формирует меню для их загрузки, а после выбора пункта меню запоминает его. При загрузке в параметры ядра подставляется автоматически найденный загрузчиком UUID корневого раздела.

В grub.cfg пишем только ссылку. (причину см. выше.)

Пользовательские настройки подключаются из отдельного файла settings.cfg

Центральный файл, здесь реализована функция запоминания выбранного пункта меню, сюда же подключены остальные части конфига:

Скрипт поиска ядер и генерации меню:

Консоль GRUB2

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

Нормальная консоль

Запуск консоли

Если вы видите в терминале GRUB2 приглашение вида grub> , значит вы попали в его нормальную консоль.

GRUB2 открывает нормальную консоль, если:

  • при загрузке не найден файл конфигурации grub.cfg;

  • файл конфигурации найден и выполнен, но в ходе его выполнения так и не было создано меню, и не была выполнена команда boot (см. ниже), либо её выполнение завершилось неудачно;

  • в меню загрузчика нажата клавиша "c".

Команды, полезные в консоли GRUB2

Кроме уже описанных в части "Настройка", в консоли GRUB2 могут пригодиться:

  • Переменная pager . Присвоение ей единицы командой pager=1 поможет вам полностью читать вывод следующих команд, если он не помещается на экран.

  • Команда help . Без параметров выводит список всех поддерживаемых в текущей конфигурации команд загрузчика. При вызове вида help слово выводит справку по командам, в которых присутствует заданное слово. Например, команда help normal покажет справку по командам normal и normal_exit.

  • Команда ls без параметров выводит список дисков и разделов, доступных в данный момент загрузчику. С ключом -l показывает подробные сведения о каждом из них -- размер, метку, UUID и тип файловой системы. С ключами -lh выводит размеры в "человекочитаемом" виде. С параметром в виде диска или раздела выводит сведения только о нём, например ls (hd0,1) выведет сведения о первом разделе на нулевом диске.

  • Команда ls с параметром в виде полного пути к каталогу выводит содержимое каталога. С ключом -l показывает подробные ведения о каждом файле и каталоге, с ключами -lh выводит размеры и даты в "человекочитаемом" фромате. К примеру, команда ls -lh /boot подробно выведет содержимое каталога /boot на текущем (в переменной root) разделе, а ls (hd0,1)/ покажет список файлов и каталогов в корневом каталоге раздела hd0,1.

  • Команда set без параметров. Выводит список всех переменных со значениями.

  • Команда echo аналогична такой же команде обычного шелла, и выводит всё, что в ней написано. Может использоваться для вывода переменных, например echo $cmdpath $prefix $root покажет значения трёх самых важных переменных загрузчика.

  • Команда cat аналогична одноимённой команде шелла, и выводит содержимое заданного файла в консоль. Так как перенаправления ввода-вывода GRUB2 не поддерживает, использовать её можно только для просмотра текстовых файлов, например, конфига самого загрузчика, fstab, и т.д.

  • Команда boot запускает образ ядра, другого загрузчика, или EFI-приложения, загруженный перед этим командами linux, initrd, ntldr, chainloader и некоторыми другими. В отличии от меню GRUB, где запуск загруженных образов происходит автоматически после завершения кода пункта меню, в консоли выполнение этой команды обязательно – без неё загруженный образ сам не запустится.

В нормальной консоли GRUB2 поддерживает возврат к предыдущим командам и автодополнение команд, каталогов и файлов по нажатию клавиши TAB, как в консоли Linux.

Пример загрузки Arch Linux из консоли загрузчика

Если вы успешно установили загрузчик в корневой раздел, но забыли создать конфиг загрузчика, вы увидите меню из дефолтного конфига, но оно не будет работать. Чтобы продолжить загрузку, вы можете войти в консоль, нажав клавишу "c", и выполнить команды:

Пример загрузки с внешнего диска из консоли

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

Пример конфига с загрузкой без меню

В этом примере GRUB2 загружает с диска образы ядра и initramfs, ждёт 3 секунды, и запускает ядро.

Если же в течении этих секунд пользователь нажмёт ESC, он попадёт в консоль загрузчика. Так как ядро уже загружено, для продолжения загрузки достаточно набрать команду boot в консоли.

Аварийная консоль

Если вместо меню или "шапки" нормальной консоли вы видите при старте загрузчика сообщение об ошибке и приглашение вида grub rescue>, значит вы попали в аварийную консоль.

Аварийная консоль GRUB2 встроена в стартовый образ загрузчика, и запускается в случаях, когда GRUB2 не может самостоятельно перейти в "нормальный" режим. Такое может случиться, если ядро GRUB2 при загрузке не нашло каталог со своими файлами и модулями по пути, указанному в переменной prefix.

Значение этой переменной обычно имеет вид (диск,раздел)/путь, например (hd0,msdos6)/boot/grub. Обозначение диска подставляется при старте загрузчика, а остальная часть (начиная с запятой) "зашивается" в стартовый образ ещё на этапе установки. Это значит, что после изменения любого из содержащихся в $prefix параметров (таблицы разделов, номера раздела, пути к файлам grub), загрузчик требуется переустанавливать, в противном случае он "вывалится" в аварийную консоль.

В режиме аварийной консоли GRUB2 понимает всего 4 команды: set , unset , ls , и insmod . Повтор и автодополнение не поддерживаются, команда ls поддерживается в урезанном виде – без ключей и с выводом в сведениях о разделах только типа файловой системы, если она опознана. По-умолчанию в стартовый образ загрузчика включается модуль для поддержки таблицы разделов и файловой системы только для того раздела, на который устанавливается GRUB2. Остальные модули должны загружаться уже из файлов, если загрузчику удастся их найти.

В некоторых случаях, когда встроенных в стартовый образ модулей достаточно для продолжения загрузки в изменившихся условиях, загрузку можно продолжить, изменив в аварийной консоли переменную $prefix.

Если вы попали в аварийную консоль, наберите для начала команду set. Вы увидите значения трёх главных переменных GRUB2. В переменной cmdpath будет обозначение диска, либо полный путь к EFI-файлу, из которого стартовал образ загрузчика. В переменной prefix будет тот путь, по которому должен был быть каталог с остальными файлами загрузчика. В переменной root будет текущий диск или раздел, скорей всего совпадающий с тем, что в $prefix. Попробуйте команды

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

Если в переменной $root оказался не тот или несуществующий раздел, можно проверять командами вида ls (диск,раздел)/ каждый раздел из тех, что вывела первая команда, пока не найдётся нужный. Если он нашелся -- к примеру, оказался hd0,msdos5 вместо hd0,msdos6, и читается -- запишите его в переменные:

Если раздел правильный, а неправильный каталог (команда ls $prefix выдаёт ошибку или не то, что нужно), запишите в переменную правильный путь, допустим такой:

Если у вас получилось найти правильный диск, раздел и каталог, и вы успешно прописали из в переменные, остаётся загрузить модуль "normal" и выполнить одноимённую команду (она станет доступна после загрузки модуля), чтобы перейти в "нормальный" режим загрузчика:

Если же из аварийной консоли не удаётся получить доступ к нужному каталогу с файлами загрузчика – увы, но больше она ничем не сможет помочь, и вам придётся обратиться к другим способам загрузки, например с внешних носителей.

Запуск GRUB2 из других загрузчиков

Загрузочный EFI-образ GRUB2 в режиме UEFI может быть запущен так же, как любое EFI-приложение.

Загрузочный образ BIOS-сборки GRUB2 новых версий может быть запущен по стандарту Multiboot из других загрузчиков. См. также главу "Генерация загрузочного образа для BIOS без установки".

Загрузка из старых версий GRUB

Код конфига для GRUB Legacy, с загрузкой GRUB2:

Загрузка из syslinux

Пример загрузки GRUB2 из syslinux приведён в статье о нём.

Примеры исправления проблем

Сообщение о невозможности встраивания в MBR

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

Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.

Смотрите также

Статья о GNU GRUB на Википедии

Официальное руководство пользователя GRUB (англ.)

Статья о GRUB на Ubuntu Wiki (англ.)

Загрузка на UEFI-системах (англ.)

Загрузочный раздел BIOS (англ.)

Настройка GRUB (англ.)

Загрузка с помощью GRUB (англ.)

Определение EFI-файлов и их загрузка с помощью GRUB (англ.)