Ubuntu 9.10 + GRUB2 (1.97 beta3)

09:57

Ubuntu 9.10 Karmic Koala принес нам довольно спорный в плане надежности и управляемости загрузчик GRUB2 (который почему-то не 2.0, а всего лишь 1.97 beta3). Проблема в том, что принципы конфигурации этого загрузчика довольно сильно отличаются от его предка Grub.

Настройка GRUB2
Новый загрузчик имеет три места, где он хранит свои параметры:

    * Основной файл /boot/grub/grub.cfg
    * Файл дополнительных параметров /etc/default/grub
    * Директория /etc/grub.d/

В отличие от старого загрузчика, основной настроечный файл не подлежит прямому редактированию и даже защищен от него атрибутом „read only“. Все изменения конфигурации должны производиться путем редактирования пп. 2 и 3, причем директория /etc/grub.d/ может быть как изменена путем редактирования существующих файлов, так и созданием новых. После изменения этих файлов требуется запуск команды sudo update-grub для того, чтобы изменения были занесены в главный файл настроек.

Параметры файла /etc/default/grub
Основными параметрами этого файла являются следующие:

    * GRUB_DEFAULT=0

    * GRUB_HIDDEN_TIMEOUT=0

    * GRUB_HIDDEN_TIMEOUT_QUIET=true

    * GRUB_TIMEOUT=10

    * GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

    * GRUB_CMDLINE_LINUX_DEFAULT=»quiet splash”

    * GRUB_CMDLINE_LINUX=”«

GRUB_DEFAULT отвечает за загружаемый по умолчанию пункт меню (нумерация начинается с нуля). Каждый пункт начинается с ключевого слова menuentry. Возможна установка значения этого параметра как saved, в этом случае по умолчанию будет выбран пункт, который загружался во время предыдущей загрузки.
Пример:
GRUB_DEFAULT=0
GRUB_DEFAULT=saved

GRUB_HIDDEN_TIMEOUT если этот параметр не закомментирован (строка не начинается с символа #), загрузочное меню не будет отображено. Обычно это случается, если загрузчик не обнаружил иных ОС, кроме Linux (что случается постоянно, ибо ни Windows, ни BSD он операционными системами не считает, не говоря уж об остальных). Пользователь может заставить загрузчик отобразить меню, если во время загрузки будет удерживать клавишу SHIFT. Значение параметра является целым (int), по умолчанию — 0, если выставлено значение, отличное от нуля, меню не будет отображено, но будет пауза размером в заданное число секунд, во время которой пользователь может вызвать меню загрузки нажатием клавиши ESC.
Пример:
GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT_QUIET отвечает за отображение или скрытие таймера, заданного параметром GRUB_HIDDEN_TIMEOUT, отличным от нуля. Если этот булев параметр выставлен в true, то во время паузы системы по параметру GRUB_HIDDEN_TIMEOUT на экране будет отображаться соответствующий отсчет времени. Если выставлен в false, таймер отображен не будет. Имеет смысл только при значениях параметра GRUB_HIDDEN_TIMEOUT, отличных от нуля.
Примеры:
GRUB_HIDDEN_TIMEOUT_QUIET=TRUE
GRUB_HIDDEN_TIMEOUT_QUIET=FALSE

GRUB_TIMEOUT знакомый по прошлой версии загрузчика GRUB параметр, задающий количество секунд, в течение которого будет отображено загрузочное меню. Если установить этот параметр в -1, таймер будет отключен и система будет ожидать выбора пользователя.
Пример:
GRUB_TIMEOUT=7
GRUB_TIMEOUT=-1
GRUB_DISTRIBUTOR задает имя дистрибьютора (Ubuntu/Xubuntu/Debian/etc)

GRUB_CMDLINE_LINUX_DEFAULT значение этого параметра будет передано в конец строки „linux“ (в старой версии GRUB эти параметры употреблялись в строке kernel) при нормальной загрузке. Является аналогом defoptions из menu.lst.
Пример:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX делает то же самое, что и предыдущий параметр, но как для нормальной загрузки, так и для загрузки в режиме восстановления. Аналог строки altoptions из menu.lst.
Кроме того, файл /etc/default/grub содержит еще несколько параметров, однако они по большей частью или не работают в текущей версии GRUB или работают с непредсказуемым результатом, посему рассматривать я их не стану. Все интересующиеся могут прочитать о них по ссылке.

Параметры директории /etc/grub.d
Интересностей в этой директории хватает. По сути, в этой директории лежат скрипты, которые изменяют отдельные секции файла /boot/grub/grub.cfg. при выполнении команды sudo update-grub. Файлы скриптов могут быть отредактированы пользователем, кроме того можно создавать свои файлы. Имена файлов должны иметь формат ХХ_имя, где ХХ — двузначное число. Файлы должны быть исполняемыми.
По умолчанию в директории уже находится некоторое количество файлов. Рассмотрим их.

    * 00_header — этот файл включает в /boot/grub/grub.cfg параметры, заданные в файле /etc/default/grub.
    * 05_debian_theme — этот файл отвечает за внешний вид загрузчика (включает визуальные параметры из Debian Theme).
    * 10_hurd — заносит в /boot/grub/grub.cfg параметры для загрузки ядер  Hurd.
    * 10_linux — заносит параметры для загрузки ядер Linux.
    * 20_memtest86+ — параметры для загрузки программного обеспечения Memtest86+.
    * 30_os-prober — самый бесполезный скрипт, который как бы должен искать иные ОС на диске и вносить их в меню. Что называется, «by default this script does nothing»
    * 40_custom — шаблон для создания собственных пунктов. Бесполезен чуть более, чем полностью. Не трогайте его вообще.

Скрипты выполняются в порядке своих номеров, если номера совпадают, сортировка идет по буквам (сортировка по именам), все другие номера, кроме 00 свободны для использования (можно создать 06_mytheme или 41_myos).

Windows XP и GRUB2
Не работает, ага. При установке GRUB2 не замечает наличия Windows и вообще не допускает мысли, что иные ОС могут присутствовать на этом компьютере (параметр GRUB_HIDDEN_TIMEOUT всегда раскоментирован). Для того, чтобы заставить непокорную утилиту грузить то что надо, а не то что он хочет требуется выполнить несколько простых шагов.

   1. Загрузите Ubuntu
   2. Запустите ваш любимый эмулятор терминала
   3. Сделайте резервную копию файла /etc/default/grub командой sudo cp /etc/default/grub /etc/default/grub.old
   4. Сделайте резервную копию файла /boot/grub/grub.cfg командой sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.old
   5. Откройте для редактирования файл /etc/default/grub командой sudo nano /etc/default/grub
   6. Закомментируйте строку GRUB_HIDDEN_TIMEOUT
   7. Значение параметра GRUB_TIMEOUT установите отличным от нуля (сколько вам нужно)
   8. Для того, чтобы закончить, нажмите сначала F2 (для сохранения), а затем CTRL+X для выхода
   9. Создайте собственный файл в директории /etc/grub.d, например это будет 41_winxp: sudo touch /etc/grub.d/41_winxp
  10. Сделайте этот файл исполняемым: sudo chmod +x /etc/grub.d/41_winxp
  11. Откройте для редактирования созданный вами файл командой sudo nano /etc/grub.d/41_winxp
  12. Посмотрите, на каком устройстве осталась ваша неприкаянная ОС. Это можно сделать, используя утилиту palimpsest (alt+F2, palimpsest). В моем случае /dev/sda1, в общем случае это тот диск, где у вас есть файлы boot.ini и ntldr. Также обратите внимание, что вам прийдется использовать имя устройства типа (hdX,Y), где X — это номер устройства (sda — первое, sdb — второе, sdc — третье и т.д., нумерация начинается с нуля), а Y — номер раздела на нем (sda1 — (hd0,1), sda5 — (hd0,5), обратите внимание, то нумерация разделов начинается с единицы).
  13. Напишем об этом в файле 41_winxp:

       <font face="monospace"> echo "Adding Windows XP" >&2
      cat << EOF
      menuentry "Microsoft(R) Windows(TM) XP Home Edition Service Pack 2 (on /dev/sda1)" {
              set root=(hd0,1)
              chainloader +1
      }
      EOF

  14. Собственно обновим grub.cfg: sudo update-grub.
  15. Перезагрузимся и посмотрим, что еще сломалось =)

На сем и сказке конец. Надеюсь, сие «руководство» сделает для вас освоение Ubuntu 9.10 Karmic Koala легче и приятнее.

(c) Источник