@ Карта сайта News Автора!

Bog BOS: GRUB - универсальный загрузчик для PC

Последние изменения:
2022.06.27: sysadmin: тестирование настоящих SSD (KIOXIA CM6-V)

Последнее изменение файла: 2017.12.25
Скопировано с www.bog.pp.ru: 2023.06.02

Bog BOS: GRUB - универсальный загрузчик для PC

Описывается применение GRUB для загрузки Linux, поэтому перед чтением статьи полезно ознакомиться с общей картиной процесса загрузки Linux.

Загрузчик GNU GRUB разрабатывался для загрузки ОС, соответствующих стандарту Multiboot (т.е. совместимых с GNU/Hurd ;). Понятное дело, что уговорить разработчиков других ОС не удалось, поэтому GRUB был доработан так, чтобы уметь загружать поделки неразумных: Linux, FreeBSD, OpenBSD, NetBSD и через вызов вторичного загрузчика - MS DOS, MS Windows NT, OS/2.

Особенностью GRUB является понимание форматов нескольких файловых систем (BSD FFS, FAT16, FAT32, Minix fs, ext2fs, ReiserFS, JFS, XFS, VSTa fs и, на всякий случай, номера блоков) и ядер (a.out, различные варианты ELF), что позволяет записывать в конфигурацию загрузчика имена файлов вместо номеров блоков. Позволяет использовать при загрузке меню (читается из конфигурационного файла или встраивается в тело загрузчика) или командный интерфейс. Меню можно редактировать в момент загрузки.

Файлы читаются с флоппи, жёсткого диска или CD средствами BIOS со всеми вытекающими ограничениями и неприятностями типа путаницей со способом трансляции адресов блоков и нумерацией дисков. Однако, может переключать диск в режим LBA, если имеется такая возможность.

Имеется возможность загрузки по сети (TFTP, BOOTP, DHCP, RARP) и использования терминала (RS-232). Ещё он умеет пользоваться Etherboot и PXE ROM, но в комплект обычной поставки (RH) эти компоненты не входят и не понятно, зачем это нужно - PXE сам может загрузить, что скажут.

Есть средства парольной защиты (команды password и lock), но в наше время загрузочных свистков - это ненадёжная защита.

Состоит из 3 частей:

Имена устройств и файлов

Имя устройства заключается в круглые скобки и начинается с указания типа устройства (fd, hd, cd, nd) за которым идёт номер устройства. Устройства нумеруются с нуля, порядок определяется BIOS (в частности, ATA и SCSI диски не различаются). Если устройство разбито на разделы и необходимо указать конкретный раздел вместо всего диска, то далее необходимо после запятой указать номер раздела (нумеруются с нуля, первый расширенный раздел имеет номер 4), например, первый расширенный раздел первого диска:

(hd0,4)

Имя файла записывается сразу после имени устройства (если имя устройства опущено, то подразумевается "корневое" устройство; задаётся командой root), в обычном POSIX синтаксисе, начиная от корневого слеша.

Если же GRUB ничего не знает про используемую файловую систему, то расположение файла можно задать с помощью списка через запятую интервалов блоков (512 байт) в виде: смещение+число-блоков. Если смещение первого интервала опущено, то подразумевается число 0. Если имя устройства опущено, то подразумевается "корневое" устройство. Самое распространнённое использование - загрузка вторичного загрузчика размером 512 байт:

root (hd0,0)
chainloader +1

Командный интерфейс

GRUB переходит после загрузки в режим командного интерфейса, если не находит конфигурационный файл или если пользователь переводит его явно (команда c в режиме меню). Режим ввода команды напоминает bash, те же клавиши редактирования строки (включая историю команд и автодополнение команд и имён дисков и файлов), немедленное исполнение после нажатия клавиши "Enter". Команды:

GRUB может самостоятельно загрузить ядро ОС или загружить вторичный загрузчик и передать ему управление. В первом случае типовой набор команд выглядит так:

root (hd0,0)
kernel /vmlinuz root=/dev/hda1 ...
inird /initrd.img
boot

Во втором так:

rootnoverify (hd0,0)
map ...
hide ...
unhide ...
makeactive ...
chainloader +1
boot

Команды управления интерфейсом и процессом:

"Исследовательские" команды:

Команды для установки GRUB:

Команды для загрузки по сети (после определения сетевых параметров можно использовать сетевой диск - (nd) - для загрузки файлов по TFTP; интересно GRUB знает про все на свете сетевые карточки?):

Команды для работы с терминалом по RS-232:

Описание меню

GRUB переходит после загрузки в режим работы с меню, если находит конфигурационный файл. Команды работы с меню описаны на экране (перемещение по меню, выбор текущей секции, переход в командный режим, редактирование меню).

Меню создаётся из конфигурационного файла grub.conf в загрузочном каталоге (/grub или /boot/grub) в момент загрузки. Конфигурационный файл может содержать любые команды командного интерфейса GRUB и некоторые дополнительные. Комментарии начинаются с символа '#'. Файл делится на секции, разделяемые командой title. Секция до первой команды title задаёт общие параметры, в частности секцию по умолчанию и описание интерфейса. Каждая команда title задаёт имя секции, которое будет высвечиваться на экране в момент загрузки. При выборе данной секции выполняются составляющие её команды. Указывать команду boot в конце секции необязательно - она подразумевается.

Команды, задающие общие параметры:

Команды, которые могут входить в секцию:

Установка GRUB

Скорее всего, что GRUB будет установлен в MBR во время установки Linux, но иногда приходится его восстанавливать (после NTLDR ;) или перемещать на другое место. Для этого необходимо иметь установленным пакет grub (/boot/grub: stage1, *stage1_5, stage2). stage1 - это 512 байт, помещаемые обычно в MBR. Кроме программы загрузки stage1_5 или stage2 в них помещается таблица разделов и прочая информация. Адрес загрузчика следующего этапа "впечатывается" в тело stage1 в виде адресов блоков, так что о файловых системах он ничего не знает и после смены адреса stage1_5 и stage2 его надо модифицировать и записывать заново.

Установка GRUB на флоппи:

dd if=stage1 of=/dev/fd0 bs=512 count=1
dd if=stage2 of=/dev/fd0 bs=512 seek=1

Установка GRUB на диск после загрузки GRUB с флоппи (этот метод гарантирует правильную нумерацию дисков):

# сделать корневым раздел, содержащий каталог boot
grub > root (hd0,0)
# запись stage1 в MBR
grub > setup (hd0)

Можно установить GRUB на диск без изготовления флоппи непосредственно из текущей ОС с помощью скрипта grub-install, но при этом есть риск ошибиться с номером устройства (см. файл device.map):

grub-install /dev/hda

Восстановление загрузчика (загрузка с CD-ROM в режиме rescue, корневая файловая система вместе с /boot на /dev/hda1):

mkdir /mnt/hard
mount -t ext3 /dev/hda1 /mnt/hard
chroot /mnt/hard
/sbin/grub --no-floppy
device (hd0) /dev/hda
root (hd0,0)
setup (hd0)
quit
exit

Установка GRUB на CD (создание и запись ISO9660 в Linux, формат El Torito без эмуляции):

mkdir grubiso
mkdir -p grubiso/boot/grub
cp stage2_eltorito grubiso/boot/grub
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \
         -boot-load-size 4 -boot-info-table -o /tmp/grub.iso grubiso
запись /tmp/grub.iso на CD

После загрузки с этого CD мы попадаем в командный режим GRUB. Файлы, записанные на CD дополнительно доступны с указанием устройства (cd). Этим можно воспользоваться для записи на CD конфигурационного файла, ядра Linux и initrd. Например, создадим конфигурационный файл grubiso/boot/grub/grub.conf:

#boot=/dev/hda
default=4
timeout=5

title chainloader hd0
        rootnoverify (hd0)
        chainloader +1

title chainloader hd0,0
        rootnoverify (hd0,0)
        chainloader +1

title CD CentOS 4.0 (2.6.9-5.0.3.EL)
        root (cd)
        kernel /boot/vmlinuz-2.6.9-5.0.3.EL ro root=/dev/hda3
        initrd /boot/initrd-2.6.9-5.0.3.EL.img

title CD Fedora Core 3 original (2.6.9-1.667)
        root (cd)
        kernel /boot/vmlinuz-2.6.9-1.667 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.9-1.667.img

title CD Fedora Core 3 upgrade (2.6.10-1.770_FC3)
        root (cd)
        kernel /boot/vmlinuz-2.6.10-1.770_FC3 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.10-1.770_FC3.img

Все упомянутые файлы необходимо скопировать в grubiso/boot/, создать образ ISO9660 и записать на CD. Получившийся CD (его необходимо дополнить строчками меню для всех вариантов Linux в сети предприятия) можно использовать как "универсальный" аварийный загрузчик (или как ключ доступа, если убрать загрузчик из MBR ;). Например, глючный BIOS моего домашнего компьютера не умеет работать с большими дисками и его приходится загружать с CD.

GRUB 2

Этой ОС не нужны другие ОС! Шутка (почти).

GRUB 2 с поддержкой UEFI, GPT, OpenFirmware, NTFS. Варианты установки:

настройки (/boot/grub2/grub.cfg) изготавливаются из /etc/default/grub с помощью команды "grub2-mkconfig -o /boot/grub2/grub.cfg" (или "grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg").

Установка загрузчика:

/sbin/grub2-install /dev/sdb

Проблемы с PXE: work/PXE.html.

Установка memtest86 от PassMark (free, 7.4, ISO версия) на сервер с UEFI и GRUB2:

Ссылки

@ Карта сайта News Автора!

Bog BOS: GRUB - универсальный загрузчик для PC

Последние изменения:
2022.06.27: sysadmin: тестирование настоящих SSD (KIOXIA CM6-V)

TopList

Copyright © 1996-2023 Sergey E. Bogomolov; www.bog.pp.ru