Pull to refresh

GRUB2. Начало

Reading time3 min
Views16K

0. Это что такое?


Расскажу о новой версии самого популярного загрузчика. Она появилась опционально в стабильном Debian 5.0 Lenny, а значит можно сделать вывод о некоторой стабильности. К сожалению, по словам самих разработчиков, на документацию времени нет, поэтому всё пока работает методом тыка, логики и комментариев в коде :)
Кстати, о версиях. Первой и пока основной считается ветка 0.9x(которую уже окрестили GRUB Legacy), а версии 1.хх официально называются GRUB 2.
Итак, чем же отличается эта версия от старого доброго дефолтного загрузчика всего и вся? На официальном сайте сказано примерно так:
  • Поддержка скриптов, в частности циклов, условий, переменных и функций
  • Графический интерфейс
  • Динамическая подгрузка модулей, позволяющая расширять функционал не на этапе сборки, а прямо во время выполнения
  • Переносимость на разные архитектуры
  • Интернационализация
  • Настоящее управление памятью, делающее GNU GRUB более гибким
  • Модульный, иерархичный, объектно-ориентированный фреймворк для файловых систем, файлов, устройств, дисководов, терминалов, команд, таблиц разделов и загрузчиков операционных систем
  • Кроссплатформенная установка, позволяющая установить GRUB с другой архитектуры
  • Безопасный режим для трудных случаев. Stage 1.5 ликвидирована
  • Исправление ошибок, которые были допущены при проектировании GRUB Legacy, и не могли быть исправлены из-за требований обратной совместимости. Например, способ нумерации разделов


Как видно, изменений куча. Здесь же я хочу остановиться на некоторых практических моментах, с которыми столкнулся в жизни.
Традиционно, предупреждаю: я проделывал все действия на стабильном Debian Lenny. У вас команды или расположение файлов может отличаться (хотя и не должно).

1. Как редактировать меню?


Это естественный вопрос при работе с загрузчиком. В новой версии к нему подошли с другой стороны. Если вы откроете аналог старого menu.lst, файл /boot/grub/grub.cfg, вас ждёт сюрприз. Шапка файла гласит:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/update-grub using templates
# from /etc/grub.d and settings from /etc/default/grub
#

То есть, руками его править можно, но это не по правилам.
По правилам, меню теперь генерируется автоматически, на основе скриптов, лежащих в /etc/grub.d и настроек из конфига /etc/default/grub
Поискав, описание скриптов, находим файл /etc/grub.d/README, который проливает луч света на хитрое устройство нового загрузчика. Мы узнаём, для чего нужны префиксы в именах скриптов:
  • 00_*: Зарезервирован для 00_header
  • 10_*: Загрузочные записи
  • 20_*: Сторонние программы (например, memtest86+)

Можно посмотреть сами скрипты, написанные на обычном shell-языке. Они не должны вызвать особых затруднений. Эти скрипты просто ищут в вероятных директориях скомпилированные ядра и образы init.rd, соответственно.
Если вы задумаете скомпилировать ядро самостоятельно, всё будет предельно просто: воспользовавшись соответствующим руководством, вы получите deb-пакет. При установке он положит всё по местам и запустит обновление загрузчика. Когда скрипты отработают, в /boot/grub/grub.cfg будет обновлённое меню с новым ядром. Без единого редактирования конфигов.

2. Предупреждения.


Теперь заглянем с другой стороны: что плохого может случиться при такой схеме работы?
  • Для специфических ядер нужно писать специальные скрипты.
  • За примером далеко ходить не надо — посмотрите на ядра Xen. Они запускаются немного отлично от стандартных, поэтому стандартный пункт меню для Xen-ядра не запустит ничего хорошего. Если кому-то интересно, напишу об этом подробнее. (UPD: Написал)
  • Если вы всё-таки поменяете меню вручную из-за «какой-то не такой» работы скриптов, в следующий раз (при обновлении ядра или самого GRUB) скрипты вылетят с ошибкой и пакет grub-pc будет считаться ненастроенным. Придётся всё переделать по правилам.
  • Как уже упоминалось выше, очень не хватает нормальной документации. Приходится перебиваться постами с блогов и wiki-страничками.


3. Заключение


Как видно, GRUB сильно изменился. Нравится нам это или нет, через некоторое время всё больше разработчиков внесут его в свои дистрибутивы. А это значит, нужно тестировать, тестировать и просто помогать сообществу в переходе на новое поколение загрузчиков. Успехов!
Tags:
Hubs:
+75
Comments18

Articles

Change theme settings