GRUB
GRUB 2 — мультизагрузочный загрузчик , способный загружать ядра с различных файловых систем на большинстве системных архитектур. GRUB поддерживает PC BIOS, PC EFI, IEEE 1275 (Open Firmware), SPARC и MIPS Lemote Yeeloong.
GRUB (или, если точнее, GRUB 2 ) заменил оригинальный загрузчик «GRUB Legacy» (или «GRUB 1») совершенно новой кодовой базой, включающей в себя синтаксис командной строки для продвинутых возможностей написания сценариев.
Since GRUB 2 superseded GRUB legacy long ago, today it is commonly called simply "GRUB".
Для быстрой установки посмотрите статью Быстрый старт GRUB2 .
Установка
Предварительные требования
Переменная GRUB_PLATFORMS в файле make.conf определяет, какую именно цель будет устанавливать GRUB при вызове grub-install . Архитектура amd64 включает в себя профиль по умолчанию, который подходит для большинства систем.
/etc/portage/make.conf
Пример настройки
GRUB_PLATFORMS
для платформ EMU, EFI и PC
GRUB_PLATFORMS="emu efi-32 efi-64 pc"
Следующие платформы поддерживаются, в зависимости от целевого CPU:
| Платформа | Цель | ||||||
|---|---|---|---|---|---|---|---|
| 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 devmapper. Required for LUKS or LVM volume detection. |
+fonts
|
Build and install fonts for the gfxterm module |
+themes
|
Build and install GRUB themes (starfield) |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
efiemu
|
Build and install the efiemu runtimes |
libzfs
|
Enable support for sys-fs/zfs |
mount
|
Build and install the grub-mount utility |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
sdl
|
Add support for Simple Direct Layer (media library) |
secureboot
|
Automatically sign efi executables using user specified key |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
truetype
|
Build and install grub-mkfont conversion utility |
verify-sig
|
Verify upstream signatures on distfiles |
Установка
Установка GRUB (и необязательного sys-boot/os-prober ) сама по себе не включает работу загрузчика. Она лишь устанавливает программы загрузчика в систему. Для установки загрузчика в систему (чтобы он использовался для загрузки системы), необходимо выполнить дополнительные действия, о которых написано в разделе конфигурация .
Чтобы установить GRUB, используйте следующий синтаксис emerge :
root
#
emerge --ask --newuse --deep sys-boot/grub
On Gentoo, os-prober is neither installed nor enabled when installing GRUB, because of security concerns. If this is needed, see the additional software section for more information.
Дополнительное программное обеспечение
os-prober to automatically detect available operating systems
Можно установить необязательную утилиту os-prober (она находится в пакете sys-boot/os-prober ), чтобы при запуске grub-mkconfig GRUB мог находить загрузочные записи других операционных систем. В большинстве случаев это даст GRUB возможность автоматически обнаруживать другие операционные системы, включая Windows 7, 8.1, 10, другие дистрибутивы Linux, и так далее.
root
#
emerge --ask --newuse sys-boot/os-prober
Due to security concerns, os-prober is disabled by default. Set GRUB_DISABLE_OS_PROBER=false in /etc/default/grub to enable it. See corresponding troubleshooting section .
libisoburn for rescue image creation with grub-mkrescue
dev-libs/libisoburn may be installed to allow creation of rescue images with the grub-mkrescue utility:
root
#
emerge --ask dev-libs/libisoburn
Boot from ISOs from your main storage - without USB
https://wiki.grml.org/doku.php?id=rescueboot
From Guru:
root
#
emerge --ask sys-boot/grml-rescueboot
Or manually launch discs with GRUB's loopback device:
/etc/grub.d/40_custom
menuentry "systemrescue-11.02-amd64.iso" {
iso_path="/systemrescue-11.02-amd64.iso"
export iso_path
search --set=root --file $iso_path
# support booting recent GRUB versions on UEFI systems
rmmod tpm
loopback loop $iso_path
set root=(loop)
# the path below is on the SystemRescue ISO, not the hard drive
configfile /boot/grub/loopback.cfg
}
After saving the entry, to update GRUB:
root
#
grub-mkconfig -o /boot/grub/grub.cfg
sys-fs/mdadm for RAID device detection
sys-fs/mdadm may be installed to enable RAID device detection:
root
#
emerge --ask sys-fs/mdadm
Установка загрузчика GRUB
Установка GRUB в качестве системного загрузчика зависит от того, как система будет загружаться (через какой тип прошивки, например на PC — через BIOS или его наследника UEFI ) и как диск, на котором должен быть установлен загрузчик, был разбит до этого (например, на PC это может быть схема разбиения разделов MBR или GPT ).
Эта статья описывает следующие ситуации:
- BIOS и MBR или (U)EFI с использованием CSM (часто называемым «BIOS mode» или «legacy/compatibility mode»)
- BIOS и GPT
- UEFI и GPT , «родной» режим загрузки (U)EFI
- Open Firmware (IEEE 1275) на PowerPC
Выберите одну из инструкций подходящую для используемой системы.
UEFI и GPT
Even though 64-bit processors of Intel/AMD architecture ("x86_64", for which Gentoo uses the amd64 notation) support running 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! It should be noted that some early 64-bit-capable systems, used a 32-bit implementation of EFI, like some early MacBooks (Intel Core 2) and some pre-2010 Windows computers. In such cases, even though the processor is 64-bit, (U)EFI is implemented as 32-bit software, so
efi-32
would be the correct GRUB platform.
If the 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 user interface it is often called "Legacy Mode" or "Compatibility Mode". CSM has always been optional and was phased out on mainstream systems (such as PCs) in 2020.
Разбитие для UEFI и GPT
UEFI systems boot from executable files ( .efi files) in a variant of Microsoft's Portable Executable format —PE32+, specifically—, on their EFI System Partition (ESP). The EFI System Partition can be just about any size, with implementation considerations in mind .
Для загрузки UEFI GPT в системе должен быть отдельный раздел ESP, содержащий файловую систему FAT .
Only the bootloader's .efi file is required to be in EFI System Partition. Typically, /boot contains the kernels, initramfs if needed, and GRUB's configuration file and support files.
The EFI System Partition is usually mounted at /boot , /boot/efi or /efi . Using /efi allows files like the kernel, initramfs and bootloader support files to be stored on a separate partition and filesystem, or on the root filesystem itself; the later requires that GRUB can access the root filesystem and read the required files, which may not always be possible or very hard to set up (like with root filesystem encryption).
A size of 128MB for the EFI System Partition is reasonable, this allows multiple PE32+ .efi files to be stored. There is little harm in keeping backups of working PE32+ files, which could still be booted if a new one is installed.
Создайте раздел с помощью выбранной утилиты .
Partitioning with fdisk
In the example contained in Preparing the disks , an EFI System Partition with a FAT32 filesystem mounted at /efi is shown. Depending on the preferred system configuration, a separate partition for /boot may be desirable, e.g. in the case of filesystem encryption.
If using fdisk to do the partitioning, start by opening the disk for modification, /dev/sda in this example:
root
#
fdisk /dev/sda
Welcome to fdisk (util-linux 2.38.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
A new partition table can be created using g :
Command (m for help):
g
Created a new GPT disklabel (GUID: 4AB36B49-BAAD-D544-AC45-E3154565018D).
A new partition can be created using n :
Command (m for help):
n
Partition number (1-128, default 1): 1
First sector (2048-121012190, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-121012190, default 121010175): +128M
Created a new partition 1 of type 'Linux filesystem' and of size 128 MiB.
Для только что созданного раздела значение Partition Type GUID необходимо установить как «EFI System Partition»; для этого необходимо набрать команду t (чтобы сменить тип раздела ) и выбрать 1 , что соответствует типу «EFI System Partition»:
Command (m for help):
t
Selected partition 1 Partition type or alias (type L to list all): 1 Changed type of partition 'Linux filesystem' to 'EFI System'.
Наконец, изменения сохраняются с помощью команды w :
Command (m for help):
w
The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
Теперь раздел можно отформатировать в файловую систему FAT32 следующей командой:
root
#
mkfs.fat -F 32 -n efi-boot /dev/sda1
root
#
mount /dev/sda1 /efi
root
#
mkdir -p /efi/EFI
Partition UUID (PARTUUID) нового раздела определяется следующей командой:
user
$
lsblk -o name,partuuid
NAME PARTUUID sda └─sda1 20f3d6cc-9781-3640-9232-0f5a8c662a60
Создайте запись в fstab для этого раздела:
/etc/fstab
Добавление точки монтирования ESP
PARTUUID=20f3d6cc-9781-3640-9232-0f5a8c662a60 /efi vfat noauto,noatime 1 2
Установка GRUB для EFI
Будет полезно установить переменную GRUB_PLATFORMS в /etc/portage/make.conf . Это поможет GRUB определить, какие варианты использовать при определении подходящей цели EFI. Для 32-битных систем UEFI следует использовать
efi-32
, для 64-битных —
efi-64
.
EFI System Partition должен быть смонтирован перед установкой GRUB. Если в fstab существует для него запись, его можно смонтировать с помощью соответствующей точки монтирования. Предполагая, что точкой монтирования является /efi (как это указано в Руководстве), команда будет следующей:
root
#
mount /efi
Команда grub-install копирует GRUB и необходимые файлы в /boot/grub . Она должна установить GRUB в /boot/grub , скопировать основной образ загрузчика в /boot/efi/EFI/gentoo/grubx64.efi и вызвать efibootmgr для добавления загрузочной записи.
Для того, чтобы правильно установить GRUB, необходимо , чтобы до выполнения команды grub-install были смонтирован каталог EFI и загружен модуль ядра
efivars
.
If the ESP is mounted at /boot/efi :
root
#
grub-install
Installation finished. No error reported.
Если ESP смонтирован в другом месте, следует использовать параметр
--efi-directory
для указания пути точки монтирования. Если ESP смонтирован по пути
/efi
(как это указано в Руководстве), команда будет следующей:
root
#
grub-install --efi-directory=/efi
Installation finished. No error reported.
By default, GRUB installs targeting the platform of system which the command is executed on. If another system platform is used (e. g. if the computer was booted in CSM mode, making the platform BIOS with GPT), the
--target=x86_64-efi
option (or
--target=i386-efi
for a 32-bit UEFI target) can be used to target an EFI platform.
The
--removable
option can be used to install GRUB's PE32+ executable to the
\EFI\BOOT
directory of the ESP with name
BOOTX64.efi
(making its full pathname
/efi/EFI/BOOT/BOOTX64.efi
if the ESP is mounted at
/efi
). This is only recommended when installing to a removable medium, or when installing on a computer with limited UEFI firmware that does not support boot entries with arbitrary pathnames very well. See also
EFI System Partition #Removable media
.
BIOS и MBR
В случае двойной загрузки с другой (уже установленной) операционной системой (например, Microsoft Windows), убедитесь, что загрузчик Linux может сосуществовать с другой системой или загружать их обе. На PC рекомендуется использовать тот же самый метод загрузки, что используется уже установленной системой. Например, если Windows использует устаревшую разметку дисков MBR, то загружаться она будет в режиме «legacy BIOS» (в UEFI этот режим называется CSM — Compatibility Support Module, по сути — эмуляция BIOS). Если режим будет изменён например, с EFI-CSM (режим BIOS) на (U)EFI, ранее установленная система, скорее всего, больше не сможет загружаться.
Удостоверьтесь, что /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 уже был создан.
BIOS и GPT
Although GPT was not designed for legacy BIOS systems, it defines a protective MBR to maintain compatibility and prevent MBR-based utilities from misinterpreting GPT disks. In dual-boot setups with legacy OSes that rely on MBR (common in BIOS-based systems), partitions must be accessed via the MBR. This is achievable using hybrid GPT/MBR partitions, which combine a standard GPT layout with a modified MBR to bridge compatibility. However, this approach comes with some limitations.
On a BIOS system with GPT partitioning, GRUB relies on a partition called "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.
Если необходим раздел /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
в режиме BIOS по умолчанию будет использоваться
i386-pc
, и в сочетании с таблицей разделов GUID (GPT) автоматически будет использоваться «BIOS boot partition» (если он существует).
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, которая была установлена в режиме BIOS, полноценное окружение с разделами GPT невозможно. В режиме BIOS Windows позволяет загружаться только с раздела MBR, что влечёт за собой использование режима эмуляции BIOS (U)EFI под названием «CSM». Для Linux, однако, всё ещё возможно использовать схему разбивки с GPT даже в режиме BIOS (или EFI-CSM), но двойная загрузка с Windows при этом потребует гибридной таблицы разделов: и в GPT, и в MBR можно одновременно определить до четырёх разделов.
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 , уже обладают правильной схемой разбиения.
Open Firmware (IEEE 1275) на PowerPC
См. статью GRUB on Open Firmware (PowerPC) .
Установка на зашифрованном разделе
If the whole disk is encrypted, including /boot , extra steps need to be taken, to allow GRUB to decrypt and mount the device.
The device-mapper USE flag needs to be set when emerging the GRUB package. Then the sys-fs/cryptsetup package needs to be installed. The partition needs to be encrypted as luks1 partition type.
After installing GRUB on the device, depending on the way the kernel is setup, initramfs might need to be modified in order for the system to boot completely. If a distribution kernel is installed, Dracut will be installed on the system as well and can be used to finish the configuration.
Настройка
Как только 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 | Сценарий оболочки GRUB | Нет | Файл, создаваемый grub-mkconfig . Этот файл обрабатывается встроенным интерпретатором сценариев GRUB и не обязательно поддерживает все команды POSIX и его синтаксис. См. справочник по сценариям в руководстве GRUB для поддерживаемых возможностей. Помните, что изменения в этом файле будут потеряны при следующем запуске grub-mkconfig . |
| /etc/grub.d/* | Сценарии оболочки POSIX | Возможно |
Все сценарии в каталоге
/etc/grub.d/*
с установленным битом выполнения последовательно выполняются, их выводы объединяются для создания файла
/boot/grub/grub.cfg
(или файла, указанного в качестве параметра
-o
команды
grub-mkconfig
). Эти сценарии используют текущую системную оболочку и, следовательно, могут использовать любой поддерживаемый ею синтаксис. В идеале эти сценарии должны быть POSIX-совместимыми, а вывод сценария должен быть совместим с интерпретатором GRUB. Возможно, возникнет необходимость выключить или добавить некоторые сценарии, например, для того, чтобы добавить пункты меню, которые невозможно создать автоматически.
|
| /boot/grub/custom.cfg | Сценарий оболочки GRUB | Возможно | Сценарий /etc/grub.d/41_custom использует этот файл для чтения во время загрузки (если он существует). В этот файл можно добавить дополнительные пункты меню или команды. Этот файл не требует повторной генерации основного файла конфигурации grub.cfg. |
| /etc/default/grub | Сценарий оболочки POSIX | Да | В большинстве случаев, это единственный файл, который следует редактировать. В основном, он используется для присвоения переменных, используемых сценариями в каталоге /etc/grub.d для генерации рабочего конфигурационного файла. Для того, чтобы узнать, какие переменные поддерживаются, смотрите статью GRUB configuration variables или официальный справочник . |
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 | Параметры, передаваемые командной строке ядра Linux для всех записей, не предназначенных для восстановления (recovery) системы. | |
| 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
Расширенные возможности
В GRUB есть много возможностей, которые делают его очень мощным загрузчиком. Он поддерживает:
- Загрузку с платформ UEFI.
- Загрузку с дисков с таблицей разделов GPT без необходимости использования гибридного MBR (при необходимости, гибридный MBR можно включить для совместимости или переносимости).
- Загрузку с раздела /boot с файловой системой btrfs .
- Загрузка с пула ZFS .
- Непосредственную загрузку с RAID-массива 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: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> 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-hash>'
The above may lock all Grub menu entries, even the default entry. In that case, to allow users to boot some menu entries without a password, see Securing the grub boot loader .
The permissions for the file need to be properly set before doing grub-mkconfig:
root
#
chmod 755 /etc/grub.d/35_auth
Использование кадрового буфера
Чтобы 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
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.
To select this font in-kernel,
CONFIG_FONT_TER16x32
has to be enabled.
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/grub
Framebuffer 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
Установка нового ядра
Каждый раз после установки нового ядра необходимо переконфигурировать 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
If the package sys-kernel/installkernel is installed and the USE flag grub is set, then on every installation of a kernel, grub-mkconfig will run automatically.
After updating sys-boot/grub
After sys-boot/grub is updated (either explicitly or via a world update ), the core boot files and modules should be reinstalled. This is mentioned in the following post-install message:
* Re-run grub-install to update installed boot code!
* Re-run grub-mkconfig to update grub.cfg!
To re-install these files, follow the steps in the relevant sections:
Устранение проблем
Дополнительная информация по устранению проблем доступна на подстранице Устранение проблем .
Большую часть проблем можно устранить, проверив правильность таблицы разделов. Убедитесь, что перед первым разделом диска достаточно свободного места или убедитесь, что загрузочный раздел 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
Некоторые старые материнские карты (произведённые до 2020 года) определённых производителей поддерживают только одно расположение файла .EFI в системном разделе EFI (ESP): резервное расположение или отсоединяемое устройство. Если это ваш случай, просто переместите файл GRUB по умолчанию в /efi/boot/ . Сначала убедитесь, что ESP примонтирован. Предполагая, что ESP примонтирован в /boot/efi (как предлагается Руководством пользователя), запустите:
root
#
mkdir -p /efi/EFI/BOOT
root
#
cp /efi/EFI/gentoo/grubx64.efi /efi/EFI/BOOT/BOOTX64.efi
On a 32-bit EFI implementation use name
BOOTIA32.efi
instead:
root
#
cp /efi/EFI/gentoo/grubia32.efi /efi/EFI/BOOT/BOOTIA32.efi
Alternatively, the
--removable
option of
grub-install
can be used to generate this file automatically:
root
#
grub-install --efi-directory=/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 как это было Руководстве по установке):
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 для загрузки других загрузчиков. Эта статья важна для тех, кто использует системы с двойной загрузкой или хочет настроить GRUB2 для загрузки с файлов ISO.
- В статье « Продвинутая настройка хранилища » описаны действия, необходимые для того, чтобы установить и использовать GRUB с более сложными системами устройств, например программный RAID, логические тома и зашифрованные файловые системы.
- Статья « Конфигурационные переменные » содержит исчерпывающий список конфигурационных переменных GRUB, используемых файлом /etc/default/grub .
- В статье « Решение проблем » содержится перечень типичных ошибок GRUB, а также способы их исправления.
- В статье « Гибридная таблица разделов » описано использование комбинированной конфигурации MBR/GPT, а также использование такой гибридной таблицы разделов с GRUB.
Внешние ресурсы
Для большей информации смотрите:
- Руководство пользователя GNU GRUB 2
- Статья о проблемах Legacy BIOS с GPT
- Статья о GPT и гибридном MBR
- Страница утилиты GPT fdisk
- Статья GRUB 2 на Arch Linux wiki
- Статья GRUB2 на Fedora wiki: Encountering the dreaded GRUB2 boot prompt
- ubuntu UEFI booting help
- http://unix.stackexchange.com/questions/109272/dualboot-freebsd-gentoo-with-grub2-mbr
- Сообщение блога о том, как можно закрыть паролем определенные пункты загрузочного меню GRUB