GRUB 2 это загрузчик (boot loader) и менеджер управления загрузкой по умолчанию начиная с версии 9.10 (Karmic Koala). При старте компьютера GRUB 2 либо показывает меню и ждет ввода пользователя, либо автоматически передает управление ядру операционной системы. GRUB 2 произошел от GRUB (GRand Unified Bootloader). Он был полностью переписан для повышения гибкости и производительности.
В этом руководстве (перевод документации [1]) описано поведение GRUB 2 версии 1.98 и более новой. Устаревший GRUB (версии 0.97) будет упоминаться просто как GRUB. Чтобы определить вашу версию, используйте команду grub-install -V. Grub версии 1.99 стал загрузчиком по умолчанию на Ubuntu 11.04 (Natty Narwhal), и в нем были введены некоторые основные изменения в содежимом файла Grub. Это руководство раскрывает использование Grub 1.98, релиза Grub в Ubuntu 10.04 LTS (Lucid Lynx) и Grub 1.99, встроенный в Ubuntu 12.04 LTS (Precise Pangolin). Содержимое, отражающие поведение других версий Grub 2 будет упомянуто в соответствующем разделе.
Основные улучшения GRUB 2 по сравнению с оригинальным GRUB включают:
1. Поддержку скриптов с операторами условного перехода и функциями. 2. Динамическая загрузка модуля. 3. Rescue mode. 4. Пользовательские меню. 5. Темы. 6. Поддержка графического меню загрузки и улучшенный функционал заставки. 7. Непостредственная загрузка образов LiveCD ISO с жесткого диска. 8. Новая структура конфигурационного файла. 9. Поддержка платформы, не относящейся к x86 (такой как PowerPC). 10. Универсальная поддержка для идентификаторов UUID (загрузка не только для Ubuntu).
Меню по умолчанию GRUB 2 будет выглядеть знакомым для пользователей GRUB, но в глубине много значительных отличий.
1. На новая установке Ubuntu 9.10 или более новой версии, когда больше нет установленных операционных систем, GRUB 2 будет сразу переходить к приглашению логина или выводить рабочий стол (Ubuntu Desktop), без вывода меню загрузки. 2. Долгое удержание правого SHIFT при загрузке отобразит меню. В некоторых случаях нажатие клавиши ESC также может показать меню. 3. Нет файла /boot/grub/menu.lst, он заменен на /boot/grub/grub.cfg. 4. Теперь нет "/find boot/grub/stage1" на grub prompt. Stage 1.5 была убрана. 5. Основным файлом конфигурации Grub 2, нормально размещенным в каталоге /boot/grub, является grub.cfg. Этот файл является результатом работы нескольких скриптов, и он не должен редактироваться напрямую. 6. grub.cfg перезаписывается определенными пакетами обновления Grub 2, каждый раз при добавлении или удалении ядра (kernel), или когда пользователь запускает update-grub. 7. Список меню для доступных ядер Linux автоматически генерируется при запуске update-grub. 8. Пользоватеь может создать свой файл, в котором находятся его пункты меню. Этот файл не будет перезаписан. По умолчанию пользовательский файл с именем 40_custom доступен в папке /etc/grub.d. 9. Основной конфигурационный файл для изменения настроек отображения меню называется grub, и по умолчанию находится в папке /etc/default. 10. Существует несколько файлов для конфигуирования меню - упомянутый выше /etc/default/grub, и все файлы в директории /etc/grub.d/. 11. Изменена нумерация разделов. Первый раздел теперь 1, а не 0. Первое устройство/привод (device/drive) все еще по умолчанию hd0 (это не поменялось). Эти назначения могут быть при необходимости изменены в файле device.map, который находится в папке /boot/grub. 12. При выполнении update-grub выполняется поиск других операционных систем, таких как Windows. Найденные операционные системы будут помещены в меню Grub 2. 13. Изменения, сделанные в конфигурационных файлах, не вступят в силу, пока не будет выполнена команда update-grub.
Пользователи, у которых все еще установлен загрузчик Grub 0.97 на их операционной системе Ubuntu, могут произвести обновление до GRUB 2 путем установки поддерживаемых в настоящее время релизов Ubuntu, или путем разрешения репозиториев, которые содержать GRUB 2 пакет grub-pc.
За дополнительной информацией и инструкциями обратитесь к документации и Grub2/Upgrading [2].
Структура файлов. В GRUB 2 была полностью переработана иерархия файлов и директорий. Основные папки GRUB 2 включают /etc/grub.d, где хранятся основные скрипты GRUB 2, и /boot/grub, где находятся модули GRUB 2 и файл меню (grub.cfg). Пользовательские кастомизации нормально выполняются файлом /etc/default/grub (нужны права sudo).
Описание основных папок и файлов можно найти в разделе "File Structure" на странице документации Grub2/Setup [3].
[Конфигурирование GRUB 2]
Изменения конфигурации обычно вносятся в файл /etc/default/grub и в пользовательские сценарии, расположенные в файле /etc/grub.d. Никакие изменения в меню GRUB 2 не вносятся до тех пор, пока команда update-grub не будет запущена с правами root (через sudo). Эта команда запускает сценарии конфигурации GRUB 2 и обновляет файл /boot/grub/grub.cfg.
Описания опций GRUB 2 и способов их изменения представлены в разделе "Configuring GRUB 2" на странице документации Grub2/Setup [3].
[Поведение экрана загрузки]
GRUB 2 загружается до любой операционной системы. Его модульные компоненты загружаются по мере необходимости. Поведение экрана меню в основном определяется настройками в /etc/default/grub. Руководство по формату настроек для каждой опции см. в разделе "Configuring GRUB 2" документации [3].
Начальные умолчания:
1. Если никакая другая операционная система не была обнаружена, то GRUB 2 сразу перейдет к загрузке операционной системы по умолчанию, и никакое меню отображаться не будет. 2. Если была обнаружена другая операционная система, то GRUB 2 отобразит меню.
Время отображения меню:
1. Меню показывается в течение заранее определенного количества секунд. Пункт меню по умолчанию подсвечивается, и пользователю дается возможность выбрать другой вариант загрузки, пока не истечет таймаут. По умолчанию таймаут ожидания действий пользователя составляет 2 секунды. Таймер продолжит отсчет, пока не будет нажата любая клавиша, или не будет выбран подсвеченный вариант загрузки путем нажатия ENTER. 2. Если пользователь ничего не выбрал, то GRUB 2 загрузит выбор по умолчанию после истечения таймаута. 3. После нажатия клавиши отсчет таймаута деактивируется, и пользователь должен вручную выбрать вариант загрузки. 4. Выбираемый по умолчанию вариант загрузки определяется настройкой GRUB_DEFAULT= в файле /etc/default/grub. У первого пункта меню значение "0".
Скрытое (Hidden). Включены обычные скрытые операции (Hidden Operations):
1. Никакие пункты меню не отображаются. Появится заставка, если она была сконфигурирована. 2. Время, в течение которого экран остаеся пустым, но доступным для просмотра, определяется настройкой GRUB_HIDDEN_TIMEOUT в /etc/default/grub. 3. GRUB 2 может отображать таймер обратного отсчета, чтобы дать информацию о времени, которое осталось до загрузки выбора по умолчанию. Настройка таймаута разрешается GRUB_HIDDEN_TIMEOUT_QUIET в /etc/default/grub. 4. Пользователь может активировать отображение меню, нажав любую клавишу. После появления меню начнется обратный отсчет GRUB_TIMEOUT. Нажатие любой клавиши остановит обратный отсчет.
Если никакая клавиша не была нажата, то по окончанию таймаута загрузится выбор по умолчанию, определяемый настройкой в /etc/default/grub.
Скрытые операции не ожидаются (Abnormal): пользователь может отобразить меню одним из следующих способов.
1. Удерживая нажатой клавишу SHIFT на ранней стадии процесса загрузки, пока не отобразится меню. GRUB 2 ищет нажатый сигнал клавиши SHIFT во время загрузки. Если клавиша нажата, или GRUB 2 не может определить состояние клавиши, то отображается меню. 2. Нажатием клавиши ESC в течение 3 секунд, пока работает GRUB 2.
Сохраненное состояние. Можно выполнить сохранение OS запуском sudo grub-set-default, если установлено GRUB_DEFAULT=saved в /etc/default/grub. Это может быть также сохранено, если GRUB_SAVEDEFAULT=true также установлено в /etc/default/grub. В этом случае умолчание выбора OS сохранится до тех пор, пока не будет выбран другой вариант загрузки в меню GRUB 2, или пока не будет выполнена команда grub-set-default.
Last Boot Failed или загрузка в режим восстановления (Recovery Mode). Если последняя загрузка была неудачной, или после загрузки в Recovery Mode будет отображаться меню загрузки до тех пор, пока пользователь не сделает свой выбор.
Чтобы изменить это поведение, отредактируйте /etc/default/grub, и добавьте переменную GRUB_RECORDFAIL_TIMEOUT. Установите её значение подобно установке GRUB_TIMEOUT.
1. Для -1 обратного отсчета нет, и меню будет отображено. 2. Для 0 меню отображатся не будет даже для сбоя старта (failed startup). 3. Для >=1 меню будет отображаться на указанное количество секунд.
Для применения сделанных изменений настроек запустите update-grub.
В некоторых случаях трюк с GRUB_RECORDFAIL_TIMEOUT не работает. Тогда отредактируйте /etc/grub.d/00_header, и поменяйте значение наймаута на строке 236 (на этой строке находится функция make_timeout()) на значение, описанное выше.
set timeout=-1
Запустите update-grub после внесения изменений. Однако это изменение все еще приведет к загрузке GRUB 2 в текстовый режим. Так что потребуется дополнительное изменение. Отредактируйте /etc/grub.d/10_linux, и поменяйте строку 188 на
set linux_gfx_mode=keep
И снова, запустите update-grub после внесения изменений.
GRUB 2 может защитить паролем редактирование меню, доступ к терминалу GRUB 2, и к определенным или всем пунктам меню. Это также ограничит доступ к определенным элементам для определенных пользователей, и может для повышения безопасности зашифровать открытые пароли. См. документацию Grub2/Passwords.
GRUB 2 позволяет создавать кастомизированные варианты выбора в меню, которые будут автоматически добавлены в основное меню после запуска sudo update-grub. Для этой цели имеется файл 40_custom в каталоге /etc/grub.d/, в нем можно найти пример создания пользовательского меню. Информацию по построению и исопльзованию кастомизированного меню GRUB 2 можно найти по ссылке Grub2/CustomMenus.
GRUB 2 предоставляет отличиные возможности по решению проблем с загрузкой из boot menu или терминала GRUB 2. Процедуры утранения проблем и восстановления детально описаны в документации Grub2/Troubleshooting, где также есть секция по обнаруженным проблемам и ошибкам Selected_Problems_and_Bugs.
Исправление зависания, перезагрузки, выключения. Если ваша машина пытается выключиться или уйти в перезагрузку, попробуйте изменить /etc/default/grub. Откройте файл командой gksudo gedit /etc/default/grub (в графическом интерфейсе) или sudo nano /etc/default/grub (в командной строке). Также подойдет другой редактор простого текста (Vim, Emacs, Kate, Leafpad). Найдите строку с GRUB_CMDLINE_LINUX_DEFAULT, и добавьте reboot=bios в конец.
Если все сделано правильно, то это долно выглядеть примерно так:
После этого сохраните файл и выполните sudo update-grub, и после этого перезагрузитесь любым возможным способом. После перезагрузки и выключения нормальная работа должна восстановиться.
На определенном железе (в частности на DELL) добавляемый параметр ядра должен быть reboot=pci (вместо reboot=bios), а процедура остается прежней.
GRUB 2 может предложить нечто большее, чем просте черно-белое меню. Меню можно настроить и сделать более привлекательным, изменяя цвета шрифта, фон и режим разрешения экрана.
Для информации по использования картинок заставок, изменения цвета шрифта, режима разрешения экрана меню см. документацию Grub2/Displays.
Темы. Эта фича GRUB 2 все еще находится в разработке как интеграция с gfxmenu. Элементы темы включают цвета, шрифты, индикаторы процесса, меню и метки.
[Установка, переустановка, перенос GRUB2]
См. документацию Grub2/Installing [4]. Информацию по обновлению GRUB 0.97 (Legacy) на GRUB 2 теперь можно найти по ссылке Grub2/Upgrading [2].
[Загрузка ISO выбором пункта меню]
Ubuntu ISO, как и многие утилиты ISO и некоторые другие операционные системы, могут быть загружены с жесткого диска выбором в меню GRUB 2. Это устраняет необходимость в создании CD/DVD/флешки, и позволяет сохранять загружаемые файлы образа на жесткий диск.
Информацию по этой фиче Grub 2 см. в документации Grub2/ISOBoot [5].
[Безопасность]
Предотвращение от загрузки через командную строку Grub. Возможность ручной загрузки с использованием командной строки Grub представляет для Linux большую дыру в безопасности. Любую OS можно загрузить таким способом с флешки USB или привода CD/DVD, в обход ограничений BIOS. Размещение паролей или блокировка элементов меню (в конфигуриационных файлах Grub) не проедотвращают пользователя от риска загрузки вручную командами, введенными в консоль grub (само собой, после загрузки чужой OS можно получить доступ к любой части не зашифрованного жесткого диска).
В нестоящий момент не существует опций по предотвращению использования строки команд Grub. Это ограничит загрузку только опциями меню, что не может считаться разумным.
Если вы хотите работать с GRUB через последовательную консоль, то понадобится раскомментировать опцию GRUB_TERMINAL в /etc/default/grub и установить её в serial (вместо консоли по умолчанию). Альтернативно вы можете добавить GRUB_TERMINAL="console serial" в меню grub и для serial console, и для local console. Настройки по умолчанию для serial console работают на первом последовательном порту (ttyS0) со скоростью 9600 бит/сек, 8 data bit, 1 stop bit, no parity.
Если вы хотите использовать другой последовательный порт, или если ваша консоль использует другие настройки, то вы должны добавить строку GRUB_SERIAL_COMMAND для дополнительных параметров. В GRUB 2 используется такой же синтаксис, как и у предка GRUB Legacy [6]. Например, для самой часто используемой скорости 9600 бит/сек (бод), 8 data bit, 1 stop bit, no parity: