четверг, 21 января 2010 г.

Сменил загрузчик на GRUB2

С тех пор как начал пользоваться LVM, стало очевидно, что GRUB Legacy пора менять на что-то более продвинутое. Естественным выбором казался GRUB2. Однако, долгое время переход откладывал, потому что соответствующий пакет в Gentoo замаскирован и рисковать не хотелось. К сожалению, такая картина наблюдается уже не первый год, а тем временем Ubuntu собирается сделать GRUB2 загрузчиком по умолчанию. Видимо у кого-то оно работает...

Поскольку давно зреет желание опробовать KUbuntu, а свободное место есть только в LVM, решил воспользоваться случаем. Достаточно подробная, инструкция по установке есть в Gentoo Wiki.

Связываться со собркой из trunk, правда, не стал. Использовал недавно вышедший grub-1.97.1. Переход в целом прошел успешно. Однако, следует признать, что замаскирован пакет заслужено. Просто работает — это не про него. После установки все придется настраивать вручную, плюс есть явные недоработки.

  • Отсутсвует /etc/default/grub. Откуда брутся общие параметры непонятно, видимо выставляются по умолчанию.

  • Определяются далеко не все ОС. Фактически grub-mkconifg нашел только сам Gentoo.

  • С какими модулями собирается /boot/grub/core.img для меня так и осталось загадкой.

Поскольку меня больше интересовала загрузка KUbuntu 9.10 поставленного в LVM дальше chainload из GRUB Legacy я в Gentoo не пошел. После загрузки в KUbuntu загрузчик настраивал уже там.

Общее впечатление от GRUG2 в KUbuntu очень хорошее. Установка пакета происходит полностью автоматически. Все что можно загрузить определилось автоматически, даже то, о чем я уже и сам забыл. Никаких проблем с LVM я также не заметил: опреационки в LVM определяются наравне с обычными разделами, boot размещен в LVM и загрузке это не мешает. Несколько омрачило впечатление поведение графического меню, но разбираться не стал, просто отключил графику.

После пары тестовых перезагрузок, установил GRUB2 из KUbuntu 9.10 основным загрузчиком. Пока полет нормальный.

Выводы:

  • GRUB2 достаточно стабилен, чтобы им можно было начинать пользоваться "простым смертным". Наличие же командной строки, сильно снижает шансы "убить" систему, как это часто бывает с LILO.

  • В Gentoo состояние GRUB2 оставляет желать много лучшего. Фактически все придется делать вручную, а для этого надо хорошо разбираться в предмете.

  • В KUbuntu GRUB2 доведен за стадии, когда им можно пользоваться. Любой технически грамотный пользователь вполне способен с ним разобраться.

  • Самый большой недостаток — отсутствие внятной документации. Тем не менее, положение постепенно исправляется. Черновик документации уже вполне можно читать. Остальное можно при должном усердии найти в Grub Wiki.

С лирикой все. Ниже опищу некоторые технические моменты, с которыми столкнулся в процессе перехода.

Во-первых, тестирование загрузчика. До недавнего времени сама мысль об экспериментах загрузчиком заставляла меня вздрагивать и нервно вспоминать, где же лежит загрузочный CD на случай, если что-то пойдет не так. Благодаря QEMU рисковать остаться с незагружающимся компьютером больше нет необходимости. Всегда можно проверить работу загрузчика с помощью виртуальной машины. В отличие от VirtualBox запуск осуществляется одной простой командой:

   sync ; echo 3 > /proc/sys/vm/drop_caches ; qemu -hda /dev/sda

В тестировании загрузчика с помощью QEMU есть несколько тонкостей:

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

  • Если у вас несколько жестких дисков их желательно указывать все (-hda, -hdb, …). Как минимум, обязательно указываеть диски участвующие в загрузке, особенно это казается LVM.

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

  • С версией qemu-0.9.1 (текущая стабильная версия в portage) у меня в GRUB Legacy отказалась работать клавиатура. Я не мог ни выбрать пункт меню, ни перейти в командную строку. После обновления до версии qemu-0.11.1 все заработало.

Установка в Gentoo. Флаг multislot поначалу заставил несколько понервничать. Отчет eix упрямо утверждал, что такого флага для sys-boot/grub нет, а emerge в режиме --pretend показывал, что собирается делать обновление пакета вместо установки в новый слот. Оказалось что все нормально, и опасения беспочвенны. Пакет grub-1.97.1 встал в свой слот, не потревожив уже установленный grub-0.97-r9.

Никаких изменений в текущие настройки установка grub-1.97.1, насколько я заметил, не вносит. С одной стороны это хорошо — ничего не сломается, с другой — прежде чем начать пользоваться новой версией, её придется настраивать. Собственно я остановился на том, что добавил в /boot/grub/menu.lst загрузку GRUB2:

   title=Chainload into GRUB2
   root (hd0,4)
   kernel /boot/grub/core.img

Начальную настройку GRUB2 выполнил командой:

   grub2-install --grub-setup=/bin/true /dev/sda

Команда устанавливает в /boot/grub необходимые файлы. В частности генерирует core.img и grub.cfg. Параметр --grub-setup=/bin/true указывать обязательно, иначе загрузчик будет установлен в MBR и это будет уже не тестирование, а "разведка боем". В принципе, ничего страшного, так как в отличие от lilo, загрузка скорее всего дойдет до grub shell, а там можно будет загрузить систему из командной строки вручную, конечно, если вы знаете, какие команды запускать... На такой случай имеет смысл, распечатать файлы /boot/grub/menu.lst и /boot/grub/grub.cfg и держать распечатки поблизости.

В уже сгенерированном /boot/grub/grub.cfg, прописал загрузку KUbuntu (вообще-то так делать не надо, лучше правьте /etc/grub.d/40_custom):

   menuentry "KUbuntu" {
      insmod lvm
      search --fs-uuid --set <uuid>
      multiboot /boot/grub/core.img
   }

Узнать UUID для томов проще всего командой

   ls -l /dev/disk/by-uuid

Установка в KUbuntu. Все происходит автоматически. В отличие от Gentoo при установке GRUB2 происходит удаление GRUB Legacy. Возможно этого можно избежать, но я не разбирался, так как и GRUB2 отлично работает. Меню загрузки генерируется автоматически при установке.

Из-за пролем с графикой, вместо меню у меня был черный экран, пришлось графику отключить. Раскомменрировал в /etc/defaul/grub строчку

   GRUB_TERMINAL=console

В текстовом, режиме все работает отлично, но чтобы настройки вступили в силу, необходимо обновить /boot/grub/grub.cfg командой

   update-grub

После завершения тестирования, установка в MBR выполняется командой:

   grub-install /dev/sda

Комментариев нет:

Отправить комментарий