GRUB

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


GRUB (GRand Unified Bootloader — великий универсальный загрузчик, (англ.)) — загрузчик операционной системы GNU. GRUB может загружать ядро не только этой операционной системы, но и множества других, в первую очередь GNU/Linux. Большинство Linux-систем использует GRUB в качестве стандартного загрузчика. OpenSolaris для платформы x86, начиная с 10 1/06, тоже.

GRUB поддерживает огромное количество файловых систем, в том числе ext2, ext3, UFS, UFS2, ReiserFS, FAT, NTFS, ISO 9660, JFS, Minix, FFS и XFS, а начиная с GRUB 1.9 ещё и ext4, ZFS и btrfs. Загрузчик напрямую обращается к загрузочной файловой системе и берёт нужные ему файлы (обычно конфигурационный файл, ядро и начальный виртуальный диск).

Содержание

[править] Конфигурационный файл

Пример простейшего конфигурационного файла:

default         0
timeout     5
color cyan/blue white/blue

title       GNU/Linux, kernel 2.6.32
root        (hd0,0)
kernel      /boot/vmlinuz-2.6.32-trunk-686 root=/dev/sdb1 ro console=tty0
initrd      /boot/initrd.img-2.6.32-trunk-686

[править] Xen и GRUB

С точки зрения Xen, GRUB обладает очень ценным качеством — он поддерживает стандарт множественной загрузки (multiboot standard). Другие загрузчики, в частности LILO, не поддерживают этот стандарт, и их невозможно использовать для загрузки Xen (в принципе, гипервизор Xen можно было бы оформить соответствующим образом, так что его смог бы загрузить и LILO, но не исключено, что при этом возникнут другие проблемы [1]). Ещё один загрузчик, который можно использовать для загрузки Xen — загрузчик NetBSD.

Пример секции конфигурационного файла GRUB, где загружается гипервизор Xen и Linux в качестве операционной системы домена 0:

title       Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.18-4-xen
root        (hd0,0)
kernel      /boot/xen-3.2-1-i386.gz dom0_mem=1200000
module      /boot/vmlinuz-2.6.18-4-xen-686 root=/dev/sda1 ro console=tty0
module      /boot/initrd.img-2.6.18-4-xen-686
savedefault

Новый загрузчик GRUB2, тоже умеет выполнять загрузку гипервизора Xen. Пример записи в grub.cfg[1]:

menuentry “Xen 3.2″ {
    multiboot (hd0,1)/xen-3.2-1-amd64.gz dom0_mem=256M
    module (hd0,1)/vmlinuz-2.6.18-5-xen-amd64 root=/dev/sda2 ro
    module (hd0,1)/initrd.img-2.6.18-5-xen-amd64
}

[править] Вопросы и ответы

[править] Можно ли проинсталлировать GRUB в файл?

# ln -s /dev/loop0 /dev/loop
# losetup /dev/loop0 hd.img
# losetup -o 32256 /dev/loop1 hd.img
# mkfs.ext3 /dev/loop1
# mount /dev/loop1 /mnt
# mkdir -p /mnt/boot/grub
# cp /boot/grub/stage? /boot/grub/e2fs_stage1_5 /mnt/boot/grub
# umount /mnt
# grub
grub> device (hd0) /dev/loop
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
# rm /dev/loop
# losetup -d /dev/loop0
# losetup -d /dev/loop1

Обратите внимание на хитрости с ссылками.

Аналогичная процедура выполняется, если вы не используете ключ -o (offset) losetup, а получаете доступ к партиции в файле с помощью kpartx.

%# kpart -a /dev/loop1
%# ln -sf /dev/loop1 /dev/mapper/loop1p
...
grub> device (hd0) /dev/mapper/loop1p
...
%# rm /dev/mapper/loop1p


[править] Можно ли загружаться с помощью GRUB с обычного flash-носителя?

да

[править] Может ли GRUB загрузить готовый ISO-образ?

Icon-caution.gif

Внимание! Актуально только для Grub4Dos

1) Загрузка непрерывного ISO образа:

 
title The CDROM emulation contiguous
map  (hd0,0)/test.iso  (hd32)
map  --hook
chainloader  (hd32)
boot

2) Загрузка обычного ISO образа, при этом его надо копировать в RAM, иначе ничего не получится.

title The CDROM emulation
map  --mem  (hd0,0)/test.iso  (hd32)
map  --hook
chainloader  (hd32)
boot

http://forum.ru-board.com/topic.cgi?forum=5&topic=22426&start=400

Другое решение (для GRUB2): http://www.opennet.ru/tips/info/2339.shtml

[править] Как привязать корневой раздел к идентификатору (UUID) устройства?

Сначала смотрим идентификатор устройства:

%# tune2fs -l /dev/sda1 | grep -i uuid

Filesystem UUID: ab5266a3-3fa6-464c-85a7-be980aa1efcb

Альтернативные способы узнать UUID:

ls -l /dev/disk/by-uuid | grep sda1
blkid | grep sda1

Добавляем его в таблицу разделов:

%# cat /etc/fstab | grep UUID

UUID=ab5266a3-3fa6-464c-85a7-be980aa1efcb / ext3 defaults 0 1

При необходимости привязки GRUB можно воспользоваться меткой:

%# e2label /dev/sda1 SOME_LABEL

И добавить её в device.map:

%# cat /boot/grub/device.map | grep -i label

(hd0) LABEL=SOME_LABEL

И в menu.lst:

%# cat /boot/grub/menu.lst | grep -i label

kernel /boot/vmlinuz-2.6.24-1-686 root=LABEL=SOME_LABEL ro vga=792

[править] Как проверить, что подготовленный flash-носитель работает?

Если у вас образ находится на flash-диске (предположим, что это /dev/sdb):

  qemu /dev/sdb

или с установками дисплея и ОЗУ:

  qemu /dev/sdb -m 512 -std-vga

Если образ у вас в обычном файле, вместо /dev/sdb указываете путь к файлу.

  qemu /path/to/file-with-fs.img

Иногда случается что после правки файла grub.cfg или команды update-grub в qemu никаких изменений не наблюдается. Такое происходит из-за кэширования в хост-системе, поэтому после любых изменений в конфигурации загрузчика следует сделать сброс кэш-буферов с правами суперпользователя. Пример для linux-систем:

linuxhost:/# sync ; echo 3 > /proc/sys/vm/drop_caches

Да, баг с кешированием проявляется. после отмонтирования надо сделать blockdev --flushbufs </dev/device_where/grub.cfg> ?? вроде помогает, но не уверен.

[править] Что делать при ошибке 'file /boot/grub/stage1 not read correctly"'?

Ошибка может возникнуть по нескольким причинам.

  • Для старых версий загрузчика нужно использовать размер инода 128 при создании файловой системы;
  • Нужно убедиться что в таблице разделов тип файловой системы установлен правильно: 83, а не, скажем, C (FAT).

[править] Примечания

  1. http://daniel.mateos.cc/articles/2008/02/07/xen-with-grub2-on-debian-etch

[править] Материалы на Xgu.ru посвящённые загрузке системы

Бездисковая загрузка:

Источник — «http://xgu.ru/wiki/GRUB»