GRUB

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page GRUB and the translation is 74% complete.
Outdated translations are marked like this.

GRUB 2 (GRand Unified Bootloader version 2, GRUB2 или чаще просто GRUB) — мультизагрузочный загрузчик, способный загружать ядра с различных файловых систем на большинстве системных архитектур. GRUB поддерживает PC BIOS, PC EFI, IEEE 1275 (Open Firmware), SPARC и MIPS Lemote Yeeloong.

GRUB заменил оригинальный загрузчик GRUB Legacy совершенно новой кодовой базой, включающей в себя синтаксис командной строки для продвинутых возможностей написания сценариев.

Для быстрой установки посмотрите статью Быстрый старт GRUB2.

В случае миграции системы с GRUB Legacy на GRUB2 смотрите статью Миграция на GRUB2.

Установка

Ввиду того, что в Gentoo GRUB Legacy (grub-0.97) и GRUB2 были слотированы, обе версии GRUB могли быть одновременно установлены в одной системе; однако, только одна версия могла быть установлена в главную загрузочную запись (Master Boot Record, MBR) жесткого диска.

Рекомендуется перевести все системы на использование GRUB2, так как она обладает всеми возможностями, что и Legacy. Версия Legacy была удалена из репозитория Gentoo.

Предварительные требования

Чтобы контролировать на какие платформы будет установлен GRUB, установите переменную GRUB_PLATFORMS в файле make.conf. Архитектура amd64 включает в себя профиль по умолчанию, который подходит для большинства систем.

ФАЙЛ /etc/portage/make.confПример настройки GRUB_PLATFORMS для платформ EMU, EFI и PC
GRUB_PLATFORMS="emu efi-32 efi-64 pc"

Следующие платформы поддерживаются, в зависимости от целевого CPU:

Target
Platform i386 ia64 mips mipsel powerpc sparc64 x86_64
ARC No No No Yes No No No
Coreboot Yes No No No No No 32-bit
EFI Yes Yes No No No No Yes
EMU Yes Yes Yes Yes Yes Yes Yes
IEEE 1275 (Open Firmware) Yes No No No Yes Yes 32-bit
Loongson No No No Yes No No No
Multiboot Yes No No No No No 32-bit
QEMU Yes No No No No No 32-bit
QEMU-MIPS No No Yes No No No No
PC Yes No No No No No 32-bit
Заметка
Каждый раз, когда значение в переменной GRUB_PLATFORMS корректируется, GRUB необходимо будет переустановить для перекомпиляции измененных двоичных файлов. Убедитесь, что это делается с опцией --newuse --deep, как это показано в разделе emerge ниже.

Профили amd64 по умолчанию включают поддержку (U)EFI-функциональности. В случае использования систем на базе BIOS, установите в переменной GRUB_PLATFORMS значение pc, чтобы избежать ненужных зависимостей.

USE-флаги

USE flags for sys-boot/grub GNU GRUB boot loader

device-mapper Enable support for device-mapper from sys-fs/lvm2
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
efiemu Build and install the efiemu runtimes
fonts Build and install fonts for the gfxterm module
libzfs Enable support for sys-fs/zfs
mount Build and install the grub-mount utility
nls Add Native Language Support (using gettextGNU locale utilities)
sdl Add support for Simple Direct Layer (media library)
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
themes Build and install GRUB themes (starfield)
truetype Build and install grub-mkfont conversion utility

Emerge

Чтобы установить GRUB, используйте обычный для emerge синтаксис:

root #emerge --ask --newuse --deep sys-boot/grub

Дополнительное программное обеспечение

Можно установить необязательную утилиту os-prober (она находится в пакете sys-boot/os-prober), чтобы при запуске grub-mkconfig GRUB мог находить загрузочные записи других операционных систем. В большинстве случаев это даст GRUB возможность автоматически обнаруживать другие операционные системы, включая Windows 7, 8.1, 10, другие дистрибутивы Linux, и так далее.

root #emerge --ask --newuse sys-boot/os-prober

Установка GRUB (и необязательного sys-boot/os-prober) сама по себе не включает работу загрузчика. Она лишь устанавливает программы загрузчика в систему. Для установки загрузчика в систему (чтобы он использовался для загрузки системы), необходимо выполнить дополнительные действия, о которых написано в разделе конфигурация.

Конфигурация

Есть два важных аспекта в конфигурации GRUB:

  1. Установка GRUB в качестве второго загрузчика системы.
  2. Настройка самого GRUB.

Установка GRUB специфична для каждого типа системы и описана в разделе установка загрузчика. Сначала рассмотрим настройку самого загрузчика.

Главный конфигурационный файл

Для создания конфигурации grub используется скрипт grub-mkconfig. Он использует скрипты в папке /etc/grub.d/* вместе с конфигурационным файлом /etc/default/grub для создания окончательного файла /boot/grub/grub.cfg - это единственный конфигурационный файл, который используется самим GRUB.

Файл Формат Редактирование рекомендуется? Описание
/usr/sbin/grub-mkconfig скрипт оболочки POSIX Нет Этот скрипт является частью пакета sys-boot/grub:2. Запустите его после настройки нижеописанных файлов, чтобы сгенерировать /boot/grub/grub.cfg.
/boot/grub/grub.cfg скрипт оболочки GRUB2 Нет Этот файл генерируется скриптом grub-mkconfig. Этот файл читается встроенным интерпретатором скриптов GRUB2 и нет гарантии, что он поддерживает все команды или синтаксис POSIX. Для того, чтобы узнать обо всех поддерживаемых возможностях, смотрите раздел scripting reference в руководстве пользователя GRUB. Помните, что изменения в этом файле сохраняются только до следующего запуска grub-mkconfig.
/etc/grub.d/* скрипты оболочки POSIX Возможно Все скрипты в каталоге /etc/grub.d/*, у которых установлен исполняемый бит, читаются последовательно, их стандартный вывод объединяется и из него формируется файл /boot/grub/grub.cfg (или файл, указанный в качестве параметра -o команды grub-mkconfig). Эти скрипты используют текущую системную оболочку и, следовательно, могут использовать любой поддерживаемый ею синтаксис. В идеале эти скрипты должны быть POSIX-совместимыми, и скрипт вывода должен быть совместим с интерпретатором GRUB2. Возможно, возникнет необходимость выключить или добавить некоторые скрипты, например для того, чтобы добавить пункты меню, которые не удалось сгенерировать автоматически.
/boot/grub/custom.cfg скрипт оболочки GRUB2 Возможно Скрипт /etc/grub.d/41_custom заставит GRUB2 во время загрузки читать этот файл, если он существует. В этот файл можно добавить дополнительные пункты меню или команды. Этот файл не требует повторной генерации основного файла конфигурации grub.cfg.
/etc/default/grub скрипт оболочки POSIX Да В большинстве случаев, это единственный файл, который следует редактировать. В основном, он используется для присвоения переменных, используемых скриптами в каталоге /etc/grub.d для генерации рабочего конфигурационного файла. Для того, чтобы узнать, какие переменные поддерживаются, смотрите статью GRUB configuration variables или official reference.

GRUB не требует ручного изменения администратором конфигураций загрузочных записей (как в случае с GRUB Legacy и LILO). Вместо этого он может генерировать свой конфигурационный файл (/boot/grub/grub.cfg) с помощью команды grub-mkconfig. Эта утилита использует сценарии из /etc/grub.d/ и настройки из /etc/default/grub.

Предупреждение
Утилита grub-mkconfig может работать не корректно, если используется программный RAID. Необходимо вручную сконфигурировать скрипты в /etc/grub.d/, так как, в противном случае, после установки, система может не загрузится.

После изменения одной или более настроек, запустите утилиту grub-mkconfig с опцией -o, которая указывает файл, куда необходимо сохранить конфигурацию /boot/grub/grub.cfg (это конфигурационный файл GRUB по умолчанию):

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.3.0-gentoo
done

Каждый раз, когда вызывается утилита grub-mkconfig, будет сгенерирована новая конфигурация.

Предупреждение
Если grub-mkconfig не сообщила о каких-либо найденных записях, то никаких записей не найдено. В этом случае, после перезагрузки системы, GRUB не предложит какого-либо выбора для загрузки, что весьма плохо и отнимет много времени для решения этой ситуации. Перед перезагрузкой, убедитесь, что вывод содержит записи об успешно найденном ядре.

Настройка параметров конфигурации

В основном, через следующие переменные из /etc/default/grub настраивают функциональность GRUB:

Переменная Объяснение Значение по умолчанию
GRUB_DEFAULT Определяет пункт меню выделенный по умолчанию. Может быть номером, названием пункиа, или "saved". Первый найденный пункт.
GRUB_TIMEOUT Задержка (в секундах) перед загрузкой стандартного пункта. Выставьте значение в 0 чтобы загружаться сразу или в -1 чтобы отключить автоматическую загрузку. 5 секунд.
GRUB_CMDLINE_LINUX Параметры, передающиеся командной строке ядра для каждого Linux пункта. Например, для поддержки гибернации пользователям надо добавить GRUB_CMDLINE_LINUX="resume=/dev/sdXY", где /dev/sdXY - своп-раздел.
GRUB_CMDLINE_LINUX_DEFAULT Параметры, передающиеся всем не-recovery Linux-пунктам.
GRUB_DEVICE Гланое устройство (т.е. параметр ядра root=). Выставьте его чтобы переопределить устройство, найденное авто-детекцией grub-mkconfig. Например, GRUB_DEVICE=/dev/ram0 заставит загрузчик использовать root=/dev/ram0 в командной строке ядра.

Для более полного списка обратитесь к подстранице Список настроек и info-странице grub-mkconfig.

После изменения параметров перегенерируйте файл конфигурации GRUB с помощью grub-mkconfig.

Включение или отключение конфигурационных скриптов

Каталог /etc/grub.d/ содержит скрипты, которые использует grub-mkconfig для генерации файла grub.cfg. По умолчанию содержимое этого каталога должно выглядеть примерно так:

user $ls /etc/grub.d/
00_header  10_linux  20_linux_xen  30_os-prober  40_custom  41_custom README

GRUB использует все установленные скрипты, которые помечены как выполняемые (по умолчанию они все включены). Чтобы отключить любой из этих скриптов, просто удалите бит выполнения с скрипт-файла используя команду chmod. В следующем примере все скрипты, кроме 00_header и 10_linux, отключены:

root #chmod -x /etc/grub.d/{20_linux_xen,30_os-prober,40_custom,41_custom}

После редактирования сценариев (или удаления бита выполнения), перегенерируйте конфигурационный файл используя grub-mkconfig.

Управление конфигурационными сценариями

Некоторые возможности доступны только при помощи модификации конфигурационных сценариев. Например, для поддержки двойной загрузки с FreeBSD необходимо выполнить следующие действия.

Измените конфигурационный скрипт /etc/grub.d/40_custom так:

ФАЙЛ /etc/grub.d/40_customДобавление записи для двойной загрузки
menuentry "FreeBSD" --class freebsd --class bsd --class os {
 insmod ufs2
 insmod bsd
 set root=(hd0,1)
 kfreebsd /boot/kernel/kernel
 kfreebsd_loadenv /boot/device.hints
 set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s1a
 set kFreeBSD.vfs.root.mountfrom.options=rw
 set kFreeBSD.hw.psm.synaptics_support=1
}

/dev/sda1 или (hd0,1) это раздел в котором находится FreeBSD. В случаи использования обычной UFS инсталляции для раздела с FreeBSD, /dev/sda1 это контейнер (что-то вроде логического раздела). Он содержит swap и root разделы. Проверьте скрипт 40_custom на возможность запуска, запустив ls -la /etc/grub.d/40_custom. Если бит выполнения не установлен, установите его используя команду chmod u+x 40_custom.

Заметка
Пользователи, которые знакомы нумерацией разделов в GRUB Legacy, должны заметить, что нумерация разделов в GRUB начинается с 1, не с 0.

Далее, установите GRUB и обновите конфигурационный файл:

root #grub-install /dev/sda
root #grub-mkconfig -o /boot/grub/grub.cfg

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

Предупреждение
The --efi-directory used in this article deviates from that one used in the AMD64 Handbook.

Установка GRUB в качестве системного загрузчика зависит от того, как система будет загружаться (через какой тип прошивки, например на PC — через BIOS или его наследника UEFI) и как диск, на котором должен быть установлен загрузчик, был разбит до этого (например, на PC это может быть схема разбиения разделов MBR или GPT).

Эта статья описывает следующие ситуации:

Выберите одну из инструкций подходящую для используемой системы.

BIOS и MBR

Заметка
В случаи двойной загрузки с Microsoft Windows, убедитесь, что в системе нет UEFI-прошивки. Даже если загрузка осуществляется в режиме 'legacy BIOS', Microsoft Windows может не загрузится.

Удостоверьтесь, что /boot существует - если для нее используется отдельный раздел, убедитесь, что он смонтирован:

root #mount /boot

Запустите команду grub-install, которая скопирует необходимые файлы в /boot/grub. На платформе PC также установится загрузочный образ в главную загрузочную запись (MBR) или в загрузочный сектор раздела. Если все пройдет успешно, после запуска grub-install, то следует ожидать примерно такой вывод как показано ниже:

root #grub-install /dev/sda
Installation finished. No error reported.

В grub-install есть параметр --target, который позволяет установить архитектуру CPU и платформы. Если он не установлен, grub-install попытается угадать правильное значение; в системах amd64/x86 по умолчанию будет использоваться i386-pc. Также в grub-install есть параметр --boot-directory, сообщающий установщику GRUB, в каком каталоге он должен искать загрузочные файлы. По умолчанию этим каталогом является /boot, но бывает удобно изменить его при перемещении корневого раздела.

Разбитие для BIOS и MBR

Убедитесь, что оставили достаточно место перед первым разделом. Если начать первый раздел с сектора 2048, останется, по крайней мере, 1 MiB дискового пространства для MBR. Рекомендуется (но не обязательно) создать дополнительный раздел для GRUB и назвать его BIOS boot partition. Этот раздел нужно просто создать, но, пока что, не форматировать. Он нужно только в том случае, если система позже будет мигрировать на схему разделов GPT. Если мигрирование не предполагается, для MBR этот раздел не требуется.

Если все делали по установочным инструкциям Gentoo, этот BIOS boot partition раздел уже был создан.

BIOS и GPT

Предупреждение
GPT was not designed for the legacy BIOS, yet with the protective MBR it includes a provision for it. Also, dual-boot with legacy operating systems designed to be booted from MBR, which is the de facto standard on computers with a BIOS, will need to access their partitions through the MBR, which can be accomplished by creating GPT/MBR hybrid partitions. This technique, however, has specific constraints.

On a BIOS system with GPT partitioning, GRUB relies on a partition call "BIOS boot partition". This partition is not formatted with a file system, instead grub-install will copy parts of the boot loader to it. The "BIOS boot partition" is not the same partition as a /boot partition.

Заметка
See also What is the BIOS boot partition? in the x86 handbook.

Если необходим раздел /boot, начните с монтирования раздела /boot:

root #mount /boot

Если все прошло успешно, после выполнения команды grub-install, следует ожидать такой вывод, как показано ниже:

root #grub-install /dev/sda
Installation finished. No error reported.

В grub-install есть параметр --target, который позволяет установить архитектуру CPU и платформы. Если он не установлен, grub-install попытается угадать правильное значение; в системах amd64/x86 по умолчанию будет использоваться i386-pc. Также в grub-install есть параметр --boot-directory, сообщающий установщику GRUB, в каком каталоге он должен искать загрузочные файлы. По умолчанию этим каталогом является /boot, но бывает удобно изменить его при перемещении корневого раздела.

grub-install also accepts a --boot-directory option to tell the GRUB installer which directory to look in for the boot files. This defaults to the current /boot but is useful when trying to move a root partition.

Двойная загрузка с Windows

Заметка
Если в системе подразумевается двойная загрузка с Microsoft Windows, убедитесь, что в этой системе нету UEFI-прошивки. Даже если такая система загружается в режиме 'legacy BIOS', Microsoft Windows может не загрузится. Также, старые версии Microsoft Windows могут не поддерживать GPT. Возможно лучше использовать гибридный подход MBR-GPT; смотрите Hybrid partition table.
Заметка
Traditionally x86-PCs used a BIOS as firmware. After the switch to (U)EFI on PCs (around 2005) there used to be a BIOS emulation called 'Compatibility Support Module' (CSM), PCs were therefore still compatible with existing operating systems. On mainstream PCs the EFI-CSM has been phased out since 2020. Even before 2020 some (U)EFI implementations, such as servers, lacked the CSM completely. 'Legacy BIOS mode' is therefore no longer available on modern UEFI systems. UEFI in its native boot mode demands the GUID Partition Table (GPT), a pre-installed operating system will therefore already be using a GPT partitioning scheme.

An already installed Windows will refuse to boot when the boot mode or the partitioning scheme is changed. Also, older Windows systems don't support GPT (or EFI) at all, demanding that a BIOS or the EFI-CSM along with an MBR must be used. If Windows supports EFI it can be re-installed in the native UEFI mode and the GPT partitioning scheme, as well as Linux; see section UEFI with GPT.

Hybrid partitioning between GPT and MBR creates both a valid GPT partition table and a valid MBR partition table at the same time, but limits the total number of hybrid partitions to four because of the four primary partition limit of the MBR. Since the ESP (the EFI System Partition holding the EFI bootloaders) takes up one partition this leaves only three shared partitions between MBR and GPT. When one partition is used for Windows and one for Linux, there is only one additional hybrid partition possible, like a separate Linux /boot partition or a shared data partition between the two operating systems.

Предупреждение
Normally, a GPT partition table will always also create an MBR partition table which holds only one partition spanning over the whole disk. This will ensure that older software doesn't mistake the disk as 'empty'. The MBR with its protective partition is therefore called a 'protecive MBR' and is part of the GPT specification. By defining hybrid partitions, this protective feature of the GPT is sacrificed! Legacy software will no longer see used space when analyzing the hybrid MBR. Software that is unaware of the GPT and only sees the MBR may mistake undefined disk space as unused and empty space. Data written outside the defined MBR partitions may cause data loss to the underlying GPT partitions!

If there are two physical disks available to the system, a great solution is to have one disk use the GPT and the other the MBR partitioning scheme. Normally, the Windows installation uses only one partition as 'system partition' and 'boot partition', called 'drive C:'. When in BIOS mode the initial partition for booting, the 'system partition', must be an MBR partition. This applies to every Windows version since Windows XP and includes Windows 10. Since Windows Vista (actually Windows XP x64 Edition) the Microsoft operating system supports accessing GPT partitions. The solution is to relocate the 'system partition' part of an installation to the MBR partitioned disk, and convert the 'boot partition' (the one containing \WINDOWS) into a GPT partitioned disk. Windows can thereafter access all the GPT partitions on the one disk, and will continue to use the MBR partitions (or hybrid partitions) on the disk containing the 'system partition'. The Windows installation (containing \WINDOWS) would be a GPT partition, even when booted in BIOS mode. Windows 11 no longer supports BIOS/CSM/MBR mode.

Разбитие для BIOS и GPT

В системе с GPT таблицей должен быть небольшой BIOS boot partition с типом файловой системы EF02 (не путать с EFI System Partition (ESP) у которой тип файловой системы EF00). 1 MiB должно быть достаточно для работы, но 2-4 MiB будет более безопасным вариантом. Этот BIOS boot раздел будет хранить в себе 2 стадию загрузчика. BIOS boot раздел не нужно форматировать в какую-либо файловую систему; команда grub-install перезапишет любую файловую систему на свою собственную.

Важно
BIOS boot раздел это не тот же самый раздел, который обычно монтируется в /boot. /boot и BIOS boot это разные разделы и должны обрабатываться отдельно. BIOS boot раздел не должен быть смонтирован в системе (то есть, не надо определять его в /etc/fstab). Раздел /boot может быть обычно смонтирован без проблем и, следовательно, может присутствовать в файле /etc/fstab.

Чтобы установить раздел как BIOS раздел, используйте утилиту командной строки parted (sys-block/parted) введя (измените 1 на номер необходимого раздела, который нужно сделать BIOS boot разделом!):

(parted)set 1 bios_grub on

Если используется утилита cgdisk из sys-apps/gptfdisk, этого же можно добиться, установив тип раздела в 0xEF02 и присвоив разделу метку gptbios.

EFI системный раздел не нужен на данный момент, но было бы целесообразно убедится, что BIOS boot раздел достаточно большой, если позже материнская плата будет обновлена до UEFI материнской платы.

Ниже приведен пример вывода нажатия клавиши p в gdisk утилите на диске размеченным с помощью GPT с обоими разделами BIOS boot [0xEF02] и EFI [0xEF00]:

root #gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.1
 
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
 
Found valid GPT with protective MBR; using GPT.
 
Command (? for help): p
Disk /dev/sdc: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): AA369F4D-37A4-4C0D-A357-DC24B99A6337
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
 
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       828377087   395.0 GiB   8E00  Linux LVM
   2       828377088       891291647   30.0 GiB    0700  Microsoft basic data
   3       891291648       975177727   40.0 GiB    0700  Microsoft basic data
   4       975177728       976754687   770.0 MiB   8300  Linux filesystem
   5       976754688       976756735   1024.0 KiB  EF02  BIOS boot partition
   6       976756736       976773134   8.0 MiB     EF00  EFI System
 
Command (? for help): 
Заметка
Не нужно вводить шестнадцатеричный префикс 0x для GPT, если используется fdisk.

При тех же настройках утилита parted дает вывод с немного другим синтаксисом:

root #parted /dev/sdc
GNU Parted 3.0
Using /dev/sdc
(parted) print
...
Sector size (logical/physical): 512B/512B
Partition Table: gpt
  
Number  Start   End    Size    File system  Name                  Flags
 1      1049kB  424GB  424GB                Linux LVM             lvm
 2      424GB   456GB  32.2GB               Microsoft basic data
 3      456GB   499GB  42.9GB               Microsoft basic data
 4      499GB   500GB  807MB   ext2         Linux filesystem
 5      500GB   500GB  1049kB               BIOS boot partition   bios_grub
 6      500GB   500GB  8396kB               EFI System            boot
  
(parted)

Для пользователей знакомых с fdisk создание разделов в gdisk покажется весьма простым делом. После запуска gdisk, в основном меню нажмите n (для нового раздела), укажите первый и последний секторы (если необходимо) и установите тип раздела в EF00 для системного раздела EFI.

Пользователи, следовавшие установочным инструкциям Gentoo, уже обладают правильной схемой разбиения.

UEFI и GPT

Заметка
If the UEFI-CSM is used, refer to BIOS with MBR or BIOS with GPT instead. CSM stands for 'Compatibility Support Module' and is a BIOS emulation, making the UEFI behave like a BIOS. In the firmware setup it is often called 'Legacy Mode' oder 'Compatibility Mode'. UEFI-CSM has always been optional and was phased out on mainstream systems (such as PCs) in 2020.

Удостоверьтесь, что /boot существует - если для нее используется отдельный раздел, убедитесь, что он смонтирован:

root #mount /boot

Запустите команду grub-install для копирования необходимых файлов в /boot/grub. Она должна установить GRUB в /boot/grub, скопировать основной образ в /boot/efi/EFI/gentoo/grubx64.efi и вызвать efibootmgr для добавления загрузочной записи.

root #grub-install --efi-directory=/boot/efi
Installation finished. No error reported.
Важно
Приведённая выше команда подразумевает, что форматированный в FAT системный раздел EFI (EFI System Partition, ESP) смонтирован в /boot/efi. Если ESP смонтирован непосредственно в /boot, вместо неё используйте --efi-directory=/boot.

В grub-install есть параметр --target, который позволяет установить архитектуру CPU и платформы. Если он не установлен, grub-install попытается угадать правильное значение; в системах AMD64, загруженных с помощью UEFI, по умолчанию будет использоваться x86_64-efi. Также в grub-install есть параметр --boot-directory, сообщающий установщику GRUB, в каком каталоге он должен искать загрузочные файлы. По умолчанию этим каталогом является /boot, но бывает удобно изменить его при перемещении корневого раздела.

Разбитие для UEFI и GPT

Для загрузки UEFI GPT в системе должен быть отдельный раздел ESP, содержащий файловую систему FAT.

Раздел EFI может заменить существующий раздел /boot на /dev/sda1 с существующим разделом /boot/efi на /dev/sda1. Это подразумевает, что сценарий загрузки UEFI при помощи GRUB может работать с двумя разделами (тремя, если нужен раздел подкачки): раздел root и раздел EFI. Используя такую конфигурацию, каталог /boot будет расположен в разделе //boot) и раздел EFI будет смонтирован в загрузочном каталоге/boot/efi). Для уточнения, смотрите пример файла /etc/fstab ниже.

ФАЙЛ /etc/fstabПример файла /etc/fstab с разделом подкачки, способного работать с UEFI:
/dev/sda1       /boot/efi       vfat    noauto,noatime  1 2
/dev/sda2       none            swap    sw              0 0
/dev/sda3       /               ext4    noatime         0 1

Создание 100 МБ раздела для /boot/efi должно предоставить достаточно места для хранения нескольких файлов

  • .efi (множество записей не требуется; большинство систем используют только одну).

Создайте раздел с помощью выбранной утилиты. Утилиты gdisk (sys-apps/gptfdisk) и parted (sys-block/parted) хорошо походят для этой цели. Если используется утилита gdisk utility, убедитесь, что используете тип EF00.

Далее, используя mkfs.fat, создайте файловую систему FAT в системном разделе EFI и добавьте его в /etc/fstab как в примере ниже:

root #mkfs.fat -F 32 -n efi-boot /dev/sda1
root #mkdir /boot/efi
ФАЙЛ /etc/fstabДобавление записи для точки монтирования /boot/efi
/dev/sda1       /boot/efi       vfat    noauto,noatime  1 2
root #mount /boot/efi
Заметка
Будет полезно установить переменную GRUB_PLATFORMS в /etc/portage/make.conf. Это поможет GRUB определить, какие варианты использовать при определении подходящей цели EFI. Для 32-битных систем UEFI следует использовать efi-32, для 64-битных — efi-64.
Предупреждение
Even though 64-bit x86 processors "x86-64" or "x64" do support running legacy 32-bit software, it is not possible for an EFI implementation to do the same. A 64-bit EFI will not be able to run 32-bit .efi loaders!
Важно
Для того, чтобы правильно установить GRUB, необходимо, чтобы до выполнения команды grub-install были смонтирован каталог EFI и загружен модуль ядра efivars.

Альтернативный вариант: использование обычного расположения прошивки UEFI

Если системной прошивки UEFI не удается найти загрузочный файл EFI в GRUB, использование обычного расположения загрузчика должно работать. Это позволит обойти загрузочное меню efibootmgr и, таким образом, предлагает уменьшенную функциональность, а также меньше подвержено ошибкам. Чтобы это сделать, проверьте, что раздел EFI смонтирован в /boot/efi, затем скопируйте файл grubx64.efi, расположенный /boot/efi/EFI/gentoo/grubx64.efi, в /boot/efi/EFI/BOOT/BOOTX64.EFI. Этот пример подразумевает что система 64-битная UEFI; настройте соответствующим образом для 32-битной UEFI системы.

Open Firmware (IEEE 1275) on PowerPC

See here.

Расширенные возможности

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

  • Загрузку с платформ UEFI.
  • Загрузку с дисков с таблицей разделов GPT без необходимости использования гибридного MBR (при необходимости, гибридный MBR можно включить для совместимости или переносимости).
  • Загрузку с раздела /boot с файловой системой btrfs.
  • Загрузка с ZFS pool.
  • Непосредственную загрузку с raid set btrfs без необходимости использования initramfs для настройки раннего монтирования.
  • Непосредственную загрузку с системы управления логическими томами (например, LVM2).
  • Загрузку с поддержкой DM-RAID (RAID 0, 1, 4, 5, 6, 9 и 10).
  • Загрузку с зашифрованных устройств (LUKS).

Некоторые возможности будут рассмотрены более детально дальше.

Последовательная загрузка (Chainloading)

В GRUB 2 была улучшена поддержка режима последовательной загрузки (chainload) по сравнению с GRUB Legacy. Для последовательной загрузки другого загрузчика следует использовать параметр chainloader.

ФАЙЛ /etc/grub.d/40_customПоследовательная загрузка другого загрузчика
menuentry "Custom Super-bootloader example" {
     insmod part_msdos
     insmod chain
     chainloader (hd1,1)+1
}

Более подробная информация о последовательной загрузке доступна на подстранице Chainloading.

Защита меню GRUB с помощью пароля

To secure GRUB so it is not possible for anyone to change boot parameters or use the command line, add a user/password combination to GRUB's configuration files. The program grub-mkpasswd-pbkdf2 generates password hashes for GRUBː

user $grub-mkpasswd-pbkdf2
Password:
Reenter password:

PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...

Then, add the following toː

ФАЙЛ /etc/grub.d/35_auth:
# Пользователь Grub
echo 'set superusers="username"'
# Пароль Grub
echo 'password_pbkdf2 <username> <password>'

Использование кадрового буфера

Чтобы GRUB использовал кадроый буфер, переустановите GRUB с включенным USE-флагом truetype. Это установит шрифт True Type по умолчанию, а также утилиту для преобразования шрифтов.

root #emerge --ask --newuse sys-boot/grub:2

Далее измените конфигурационный файл по умолчанию GRUB, который расположен в /etc/default/grub. Например:

ФАЙЛ /etc/default/grubНастройки, связанные с кадровым буфером
# Настройка разрешения и глубины цвета
GRUB_GFXMODE=1366x768x32
 
# Сохранение разрешения после загрузки ядра
GRUB_GFXPAYLOAD_LINUX=keep
 
# Настройка фонового изображения
GRUB_BACKGROUND="/boot/grub/bg.png"
 
# Применение пользовательского шрифта, конвертированного с помощью утилиты grub-mkfont
GRUB_FONT="/boot/grub/fonts/roboto.pf2"

# Настройка цветов меню
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

HiDPI displays

On modern displays with high DPI ("HiDPI"), e.g. UHD (3840x2160), the standard font will look very small. If you like to have the same font as the kernel, Terminus can be used, which resembles a BIOS built-in textmode font...

ЯДРО Terminus 16x32 font
CONFIG_FONT_TER16x32:

Terminus Font is a clean, fixed width bitmap font, designed
for long (8 and more hours per day) work with computers.
This is the high resolution, large version for use with HiDPI screens.
If the standard font is unreadable for you, say Y, otherwise say N.

To select this font in-kernel, CONFIG_FONT_TER16x32 has to be enabled.

ЯДРО Kernel compiled-in fonts
Library routines  --->
      [*] Select compiled-in fonts
      [*] Terminus 16x32 font (not supported by all drivers)

The same font is available as media-fonts/terminus-font, which can then be used for GRUB as well.

root #emerge --ask media-fonts/terminus-font
root #grub-mkfont -s 32 -o /boot/grub/fonts/terminus32b.pf2 /usr/share/fonts/terminus/ter-u32b.otb

In the above example the filename chosen for grub-mkfont output is terminus32b.pf2. The font's path has to be accessible to GRUB during boot, so it should reside in the same mount point as GRUB does; this example uses /boot/grub/fonts. The font then has to be set as GRUB_FONT in /etc/default/grub in order to be used.

ФАЙЛ /etc/default/grubFramebuffer related settings
# Use a custom font, converted using grub-mkfont utility
GRUB_FONT="/boot/grub/fonts/terminus32b.pf2"

Updating the GRUB configuration file grub.cfg will then activate the configuration with the new font.

root #grub-mkconfig -o /boot/grub/grub.cfg

Устранение проблем

Заметка
Дополнительная информация по устранению проблем доступна на подстранице Troubleshooting.

Большую часть проблем можно устранить, проверив правильность таблицы разделов. Убедитесь, что перед первым разделом диска достаточно свободного места или убедитесь, что загрузочный раздел BIOS доступен. Также убедитесь в том, что файл /boot/grub/grub.cfg был правильно сгенерирован командой grub-mkconfig, или сгенерируйте его с индивидуальным пунктом меню.

os-prober на запускается

When running the grub-mkconfig command, os-prober is not running as expected, even though it is installed:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.14-gentoo-x86_64
Found initrd image: /boot/amd-uc.img /boot/initramfs-5.11.14-gentoo-x86_64.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

This can be corrected by setting the GRUB_DISABLE_OS_PROBER variable to false in /etc/default/grub file.

ФАЙЛ /etc/default/grub
GRUB_DISABLE_OS_PROBER=false

Upon the next run, grub-mkconfig should find additional bootable partitions:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.14-gentoo-x86_64
Found initrd image: /boot/amd-uc.img /boot/initramfs-5.11.14-gentoo-x86_64.img
Warning: os-prober will be executed to detect other bootable partitions.
It's output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvme0n1p2@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

Прошивка материнской платы не находит файл .EFI

Некоторые производители материнских плат поддерживают только одно расположение файла .EFI, в системном разделе EFI (ESP). Если это ваш случай, просто переместите файл GRUB по умолчанию в /efi/boot/. Сначала убедитесь, что ESP примонтирован. Предполагая, что ESP примонтирован в /boot/efi (как предлагается в Handbook), запустите:

root #mkdir -p /boot/efi/efi/boot
root #cp /boot/efi/efi/gentoo/grubx64.efi /boot/efi/efi/boot/bootx64.efi

On a 32-bit EFI implementation use bootia32.efi instead:

root #cp /boot/efi/efi/gentoo/grubia32.efi /boot/efi/efi/boot/bootia32.efi

The removable parameter can be used with grub-install command to generate this file automatically:

root #grub-install --efi-directory=/boot/efi --removable
Installation finished. No error reported.

Это должно помочь прошивке материнской платы загрузить исполняемые файлы GRUB. Перезагрузите систему чтобы убедиться, что прошивка запускает GRUB корректно.

os-prober и UEFI в chroot

Утилита sys-boot/os-prober используется для поисках других установленных ОС, таких как Microsoft Windows. Чтобы она работала правильно, ей необходим доступ к информации из реального окружения udev, чтобы протестировать наличие системного раздела EFI (EFI System Partition).

Запустите эти команды в окружении реального хоста, чтобы предоставить необходимые файлы (пример подразумевает, что Gentoo смонтирована в /mnt/gentoo как это было в Handbook):

root #mkdir -p /mnt/gentoo/run/udev
root #mount -o bind /run/udev /mnt/gentoo/run/udev
root #mount --make-rslave /mnt/gentoo/run/udev

Установка нового ядра

Каждый раз после установки нового ядра необходимо переконфигурировать GRUB, чтобы он увидел его. Это можно сделать с помощью команды grub-mkconfig, как это было показано выше, или это можно сделать вручную.

Заметка
Перед выполнением следующей команды убедитесь, что раздел /boot смонтирован.
root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.3.8-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done

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

Смотрите также

  • В статье «Последовательная загрузка» описано, как можно использовать GRUB для загрузки других загрузчиков. Эта статья важна для тех, кто использует системы с двойной загрузкой или хочет настроить GRUB2 для загрузки с файлов ISO.
  • В статье «Продвинутая настройка хранилища» описаны действия, необходимые для того, чтобы установить и использовать GRUB с более сложными системами устройств, например программный RAID, логические тома и зашифрованные файловые системы.
  • Статья «Конфигурационные переменные» содержит исчерпывающий список конфигурационных переменных GRUB, используемых файлом /etc/default/grub.
  • В статье «Troubleshooting» содержится перечень типичных ошибок GRUB, а также способы их исправления.
  • В статье «Гибридная таблица разделов» описано использование комбинированной конфигурации MBR/GPT, а также использование такой гибридной таблицы разделов с GRUB.

Внешние ресурсы

Для большей информации смотрите: