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 сильно изменился. Нравится нам это или нет, через некоторое время всё больше разработчиков внесут его в свои дистрибутивы. А это значит, нужно тестировать, тестировать и просто помогать сообществу в переходе на новое поколение загрузчиков. Успехов!