Ликбез по Linux

GNU GRUB. Настройка и использование

Непосредственно после включения компьютера BIOS находит загрузочное устройство, считывает в память его первый сектор и передаёт на него управление. Этот сектор обычно называется MBR (Master Boot Record) и его размер 512 байт. Кроме самого загрузчика, там ещё находится и таблица разделов диска размером 64 байта, так что непосредственно для загрузчика остаётся очень мало места. В ОС Windows загрузчик передаёт дальнейшее управление на Boot Record первичного раздела, у которого установлена метка "загрузочный".

Ещё несколько лет назад для загрузки Linux использовался LILO (Linux Loader). Его значительным недостатком являлась необходимость заново каждый раз обновлять карту размещения файлов. В настоящее время в большинстве дистрибутивов используется GRUB (GRand Unified Bootloader).


Как происходит загрузка GRUB

В GRUB первичный загрузчик вызывает не вторичный непосредственно, а так называемый полуторный этап (Stage 1.5), который и передаёт управление вторичному загрузчику. В результате достигается не только поддержка широкого спектра файловых систем, но и для изменения параметров загрузки достаточно только отредактировать конфигурационный файл, который называется /boot/grub/menu.lst.

 

Также для загрузки может использоваться initrd (INITial Ram Disk), который загружается в память как минимальное ядро, которое считывает необходимые для корректного запуска модули и затем грузит непосредственно ядро системы.


Конфигурация menu.lst

Открываем файл /boot/grub/menu.lst

# vim /boot/grub/menu.lst

Он очень подробно и хорошо прокомментирован. Разберём основные параметры.

default 0

Указывает, какой пункт будет загружен по умолчанию, причём нумерация начинается с нуля. То есть в данном случае у нас будет выбран первый пункт меню.

timeout 3

Время, по прошествии которого будет автоматически загружен пункт по умолчанию.

colors cyan/blue white/blue

Цвета для выбранного и невыбранного пунктов меню. Список соответствия цветов и его названия можно узнать из файла /usr/share/X11/rgb.txt.

Также возможно использование графического фона для меню выбора системы. Это делается при помощи следующего параметра:

splashimage=(hd0,0)/boot/grub/image.xpm.gz

Тут (hd0,0) - раздел, где расположен раздел /boot

Также необходимо конвертировать изображение в формат, который GRUB понимает (XPM, 14 цветов, 640х480), и упаковать его. Делается это следующим образом:

$ convert myimage.png -color 14 -resize 640x480 myimage.xpm | gzip

и скопировать в папку к GRUB'у

# cp myimage.xpm.gz /boot/grub/

Кстати, стоит заметить, что GRUB использует немного необычную систему нумерации разделов. Вместо привычной /dev/hdaX (hdbX, hdcX (sdaX, sdbX для SCSI и SATA дисков) и т. п.), где X - номер раздела, начиная с 1, используется собственная система. В ней диски обозначаются следующим образом: (hdA,B), где A - номер диска, начиная с 0, а B - номер раздела, тоже начиная с нуля. То есть /dev/sda1 будет обозначаться (hd0,0), а в Windows это будет C:.

Теперь рассмотрим непосредственно пункты меню.

title Debian GNU/Linux, kernel 2.6.26-1-686-bigmem

root (hd0,5)

kernel /vmlinuz-2.6.26-1-686-bigmem root=/dev/sda7 ro noapic vga=792

initrd /initrd.img-2.6.26-1-686-bigmem

title - то, что непосредственно отображается в меню

root - раздел / в формате GRUB

kernel - какой файл является ядром и какие параметры ему передавать при загрузке

initrd - какой файл использовать как initrd

Если у вас есть Windows, то будет запись следующего образа:

title Microsoft Windows

root (hd0,0)

savedefault

makeactive

chainloader +1

savedefault - указывает, что следует запоминать выбранный элемент, если указана опция

default save

makeactive - так как Windows может загружаться только с активного раздела, то эта опция делает раздел активным

chainloader +1 - следует передавать загрузку сразу этому разделу. Такой способ называется цепной загрузкой (chain loading)

Также есть возможность виртуально менять жёсткие диски местами. Например, если у вас Windows установлена на втором диске и она не может загружаться, то можно добавить в пункт загрузки следующее:

map (hd0) (hd1)

map (hd1) (hd0)


Редактирование параметров во время загрузки

Даже без загрузки ОС можно отредактировать то, как вам нужно загружаться.

Сначала отображается список операционных систем, которые можно выбрать. Выберем одну из них и нажмём E для того, чтобы отредактировать пункт меню. В результате попадаем в меню выбранного пункта. Вводим то, что нам надо, например, параметр для ядра vga=792, который устанавливает для текстового режима разрешение 1024х768 при 24-битном цвете. После этого жмём Enter и B для загрузки этого пункта. Если же нам нужно что-нибудь отменить или подняться на уровень выше, то жмём Esc.


Восстановление GRUB после того, как была затёрта MBR

Допустим, после установки Linux вы захотели поставить Windows, которая понятия не имеет об альтернативных загрузчиках. И, естественно, она перепишет MBR. Теперь нам нужно восстанавливать его обратно. Для решения этой проблемы существует несколько способов.

Загружаемся с live-cd с linux или установочного диска, если в нём есть режим восстановления. Например, для Debian GNU/Linux перед загрузкой вводим rescue и выбираем запуск оболочки в разделе, где у нас находится корень. Затем монтируем разделы /boot и /usr, если у нас на другом разделе.

# mount /dev/sda8 /usr

# mount /dev/sda6 /boot

Теперь переустанавливаем GRUB

# grub-install /dev/sda

Если вы загружаетесь с live-cd, то монтируем корень (например, /dev/sda7) в какую-нибудь папку (которую нужно заранее создать).

# mount /deb/sda7 /media/disk

# mount /dev/sda8 /media/disk/usr

# mount /dev/sda6 /media/disk/boot

И переустанавливаем GRUB

# grub-install --root-directory=/media/disk /dev/sda

Также можно переустанавливать GRUB при помощи его оболочки. Если у вас /boot расположен на том же разделе, что и корень, то при загрузке с live cd можно поступить следующим образом.

# grub

> find /boot/grub/stage1 - выдаст раздел, на котором находится загрузчик, например: hd0,2

> root (hd0,2)

> setup (hd0)

Кстати, оболочка имеет довольно мощные возможности. Список доступных команд можно получить, выполнив help.


Как правильно удалить Linux

Конечно, я надеюсь, что вам не придётся прибегать к этому, но иногда эта информация может пригодиться. Просто надо помнить, что не стоит удалять все разделы, которые использовались Linux, потому что в MBR прописана загрузка именно с одного из них. Чтобы корректно его заменить, нужно под Windows установить консоль восстановления (что это такое и для чего нужно - совсем не материал этой статьи) и загрузить её. Там нужно ввести следующее:

fixmbr

нажать y

fixboot

нажать y

exit

Конечно, это не всё, что умеет GRUB, например, можно сделать так, чтобы меню не отображалось или редактирование было защищено паролем. Более подробную информацию можно получить, зайдя на его официальный сайт www.gnu. org/software/grub и прочитав руководство и FAQ. Вообще, Linux располагает к изучению документации. До следующих встреч.

Антон ЛИПАРИН,
oni-ddr.livejournal.com,
oni@mail.by

Версия для печатиВерсия для печати

Номер: 

44 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Аватар пользователя qwerty
зь якога пераляку inird стаўся мінімальным ядром, якое грузіць нармальнае ядро?
Аватар пользователя mike
>В GRUB первичный загрузчик вызывает не вторичный непосредственно, а так называемый полуторный этап (Stage 1.5)

Вообще-то stage - это ЧАСТЬ GRUB; всего их 3: начальная stage1 (MBR), промежуточная stage1_5 для каждого типа ФС, и основная stage2, работающая с меню.

Чтобы не затирать MBR, лучше держать Линукс на отдельном винте.

Есть грабли, на которые я наступал трижды; в статье про них нет. После восстановления Линукса из копии проверьте, соответствует ли реальный UUID линукс-раздела тому, что записан в /boot/grub/menu.lst и /etc/fstab. Это делается командой на правах суперюзера:

vol_id /dev/volume

где volume - раздел с Линуксом, например, sda5. Если UUID поменялся, то его проще поправить вручную, чем переустанавливать GRUB.

Спасибо за статью.

Аватар пользователя Виталий
Необходимые дополнения: initrd является образом стартового диска. Когда при первой установке системы загрузчик передает управление ядру, он также монтирует initrd, чтобы ядро могло подключить необходимые модули для работы с данным железом (которые не находятся в составе самого ядра). НО! initrd сам не управляет загрузкой!