GRUB
Материал из Xgu.ru
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-образ?
Внимание! Актуально только для 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).
[править] Примечания
[править] Материалы на Xgu.ru посвящённые загрузке системы
Бездисковая загрузка:
- PXE
- pxe/rhel — Инсталляция RHEL/CentOS с помощью PXE
- Бездисковая загрузка FreeBSD с помощью PXE
- Бездисковая загрузка узла Xen с помощью PXE
- pxe/win7 — Бездисковая загрузка Windows 7 с помощью PXE
- pxe/win2008 — Бездисковая загрузка Windows Server 2008 с помощью PXE