grub2 and menus
В предыдущий раз я немного спалился конфигом bootchartd
для
grub2
. Теперь grub2
загружает большинство моих систем. В этот
раз похвастаюсь несколькими своими хаками.
Перейти на grub2
раньше мне мешало несколько вещей:
grub1
просто работал - незачем менятьgrub2
поглюкивал вrescue mode
и часто безвозвратно портил меню при редактировании из менюgrub2
гораздо сложнееgrub1
, а значит и больше шансов вляпаться в новую ошибку
Но grub1
- мёртвый проект: обновлений к нему нет, а проблем вылазит
всё больше с новыми версиями gcc
.
Здесь в единственном баге собралась приличная их пачка:
- не грузится с
1TB
+ смещения - не работает после сборки
gcc
, который вставляетSSE2
оптимизации: загрузчик сам не инициализирует блокSSE2
, но компилятор уже вставляет инструкцииSSE2
. Это долгое время мешало размаскироватьgcc-4.6
вgentoo
. - портит память стека на некоторых кривых
BIOS
и не грузится
и другие.
В grub2
этих проблем нет. Ошибки исправляются быстро и фич для
обычных пользователй навалом:
- загрузка с
ext4
,btrfs
,reiserfs
. Дляgrub1
это всё только в сторонних патчах. - поддержка загрузки со всяких
RAID
,GPT
, черезUEFI
и прочих извратов - пррержка приличного разрешения для прикольных картинок :)
- поддержка русских букв в меню
- автогенерация рабочего конфига
grub.cfg
(в том числе для загрузкиwindows
)
При установке grub2
выдается классная ссылка на
HOWTO
. В моём случае
всё было просто:
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
Единственная мелочь, которая мне не понравилась - это ядро по умолчанию.
Я хотел, чтобы грузился /boot/vmlinux
(он у меня показывает на
последнее установленние ядро).
grub2-mkconfig
- довольно смешной скрипт. Интересно знать, как он
генерит grub.cfg
:
- Детектит тип файловых систем для
/
и/boot
, - запускает скрипты из
/etc/grub.d/
, - которые генерят
grub.cfg
, - который является
shell
-подобным скриптовым языком дляgrub2
такая вот вложенность.
Мне сюда просто нужно было вклинить первую строку меню:
$ cat /etc/grub.d/01_my_live
#! /bin/sh
set -e
cat /boot/grub2/grub.cfg.mine
$ cat /boot/grub2/grub.cfg.mine
menuentry 'Gentoo current' {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
linux /boot/vmlinuz root=/dev/sda2 ro video=SVIDEO-1:d i915.i915_enable_rc6=1 init=/sbin/bootchartd
}
Часть этого меню взята из оригинального автогенеренного grub.cfg
.
Теперь grub2-mkconfig
генерит мне меню с моим любимым ядром по
умолчанию.