|
Bog BOS: GRUB - универсальный загрузчик для PC |
Последние изменения: |
Последнее изменение файла: 2017.12.25
Скопировано с www.bog.pp.ru: 2023.11.30
Описывается применение 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 будет установлен в 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 с поддержкой 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:
menuentry 'PassMark MemTest86 (x64) 7.4' { chainloader /efi/memtest/BOOTX64.MEMTEST86-74.EFI }
|
Bog BOS: GRUB - универсальный загрузчик для PC |
Последние изменения: |