Efibootmgr

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

efibootmgr — это приложение для управления загрузочными записями UEFI.

Это не загрузчик. Это утилита, которая взаимодействует с прошивкой EFI в системе, которая работает в качестве менеджера загрузок. С помощью efibootmgr можно создавать, менять местами и удалять загрузочные записи.

Установка

Ядро

CONFIG_EFIVAR_FS support needs to be enabled.

Заметка
Использование efivarfs невозможно без сервисов EFI, которые также могут быть включены с помощью параметров командной строки ядра efi=runtime (в случае, если они отключены по умолчанию, например CONFIG_EFI_DISABLE_RUNTIME=y).

Emerge

У пакета sys-boot/efibootmgr нет каких-либо USE-флагов. Все что нужно сделать - это установить его:

root #emerge --ask sys-boot/efibootmgr

Настройка

EFI vars

Для того, чтобы успешно использовать efibootmgr, должна быть доступна файловая система переменных EFI. Следовательно система должна быть уже загружена в режиме EFI (а не через BIOS в режиме MBR), так как иначе переменные EFI сами по себе не будут доступны. Если система загружена в режиме MBR, перезагрузитесь и настройте все необходимое для загрузки EFI режиме. Обычно, для этого нужно, либо настроить встроенное ПО (BIOS), либо выбор в меню загрузки запись содержащую EFI.

Когда система загружена в режиме EFI, запустите следующую команду, чтобы проверить доступность смонтированной efivarfs:

root #mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (ro,relatime)

Данная файловая система смонтирована в режиме "только чтение" (ro) через скрипт инициализации sysfs, поэтому необходимо смонтировать её вручную в режиме "чтение и запись" (rw) следующей командой:

root #mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars

Предварительные условия =

Если системный раздел EFI (ESP) не существует, он должен быть создан, см. EFI System Partition.

Использование

Получение списка загрузочных записей

При использовании старой версии efibootmgr необходим параметр --verbose или -v:

root #efibootmgr
BootCurrent: 0002
Timeout: 3 seconds
BootOrder: 0003,0003,0002,0000,0004
Boot0000* CD/DVD Drive  BIOS(3,0,00)
Boot0001* Hard Drive    BIOS(2,0,00)
Boot0002* Gentoo        HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\boot\bootx64.efi)
Boot0003* Hard Drive    BIOS(2,0,00)P0: ST1500DM003-9YN16G

Создание загрузочной записи

Чтобы создать загрузочную запись EFI, нужно передать несколько аргументов программе efibootmgr:

  • --create или -c, чтобы создать новую запись;
  • --part или -p, за которой следует номер раздела, на котором находится EFI System Partition;
  • --disk или -d, за которой следует диск, на котором находится системный раздел EFI;
  • --label или -L, за которой следует метка, которую необходимо использовать для загрузочной записи;
  • --loader или -l, за которой следует путь к образу EFI для загрузки
Важно
Путь к образу EFI для загрузки должен в качестве разделителя в путях содержать \ (обратный слеш) вместо / (передний слеш).
Важно
Вдобавок, если ESP уже был создан другой ОС, каталог может называться иначе, чем /efi/EFI. Если ESP был создан другой ОС, начните загрузочную запись EFI с названия этого каталога, сразу после /efi.

Если структура каталога такая:

root #tree /efi/ -L 3
/efi/
└── EFI
    ├── Grub
    │   └── grubx64.efi
    └── Gentoo
        └── bzImage.efi

...тогда путь загрузчика будет таким:

root #efibootmgr -c -L "Grub" -l '\EFI\Grub\grubx64.efi'
root #efibootmgr -c -L "Gentoo" -l '\EFI\Gentoo\bzImage.efi'

Например:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi'

Также можно добавить параметры — возможно, не поддерживаемые всеми реализациями UEFI[1] — в командную строку ядра:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi' -u 'root=/dev/sda3 initrd=\efi\boot\initramfs.img quiet'

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

Удаление загрузочной записи

Перед удалением записи, сначала определите, какой ID был у записи.

Чтобы удалить запись Gentoo, которая была показана выше (и имеет идентификатор Boot0002), попросите efibootmgr удалить запись с идентификатором 2, передав в качестве аргументов следующие значения: --bootnum или -b с идентификатором, и --delete-bootnum или -B, означающая, что нужно удалить запись:

root #efibootmgr -b 2 -B

Removable media

EFI bootloaders on removable media are not configured as boot entries, so tools like efibootmgr are not required. Instead the computer firmware identifies removable boot options by looking for a predefined file name unique to the system architecture in use, in a predefined path.[2]

Some (U)EFI implementations support the use of the removable media boot path as a fallback on internal drives.[3] This is against specification and should be avoided, but may help on a system with a buggy (U)EFI. Only one such fallback bootloader is possible on a specific system (i.e. architecture), due to the standardized boot path and file names.

Архитектура Аббревиатура Имя файла Машинный тип исполняемого файла PE
x86 32-bit IA-32 \efi\boot\bootia32.efi 0x14c
x86-64 x64 \efi\boot\bootx64.efi 0x8664
Itanium IA-64 \efi\boot\bootia64.efi 0x200
ARM 32-bit AArch32 \efi\boot\bootarm.efi 0x01c2
ARM 64-bit AArch64 \efi\boot\bootaa64.efi 0xAA64
RISC-V 32-bit \efi\boot\bootriscv32.efi 0x5032
RISC-V 64-bit \efi\boot\bootriscv64.efi 0x5064
RISC-V 128-bit \efi\boot\bootriscv128.efi 0x5128
Loongson 32-bit LoongArch32 \efi\boot\bootloongarch32.efi 0x6232
Loongson 64-bit LoongArch64 \efi\boot\bootloongarch64.efi 0x6264
Заметка
To boot from removable media, the firmware has to look for compatible bootloaders on supported devices, which can be configured in the firmware setup. Like most firmwares, (U)EFI provides a hotkey to show a boot selection (formally known as "BIOS Boot Selection" or BBS), otherwise (U)EFI will use the configured default boot entry. However, a buggy (U)EFI may default to the removable media boot path even on internal drives.

To use the removable media boot path it is sufficient to copy the EFI bootloader to the required path and file name. Should the firmware make use of this fallback, this may also remove the ability to select between configured boot entries, meaning that boot options (as listed with efibootmgr) through (U)EFI will not work. Even though every EFI bootloader can be used as fallback, it may be advisable to use a boot manager that itself has the ability to select between boot options, such as GRUB. From the above example for x64 (amd64):

root #cp /efi/EFI/Grub/grubx64.efi /efi/EFI/boot/bootx64.efi
Заметка
The FAT file system of the EFI System Partition is not case-sensitive, but case-preserving (VFAT), while Unix and Linux is strictly case-sensitive at all times. Because of this, the path /efi/EFI/boot/bootx64.efi may not work on all systems, as it could be using capital letters, e.g. /efi/EFI/BOOT or /efi/EFI/Boot; the same goes for bootx64.efi. Running tree -L 3 /efi, when the ESP is mounted under /efi, will show the names in use on the individual system, to which the above command has to be changed accordingly.
Важно
The fallback bootloader is not automatically updated! Every time e.g. GRUB is re-installed (like after a version update, which may contain security fixes), it has to be copied to the fallback boot path again, overwriting (updating) the previous version!

The boot manager included in systemd, systemd-boot (formally Gummiboot), will automatically install to the removable media boot path. When sys-apps/systemd with the boot USE flag is updated, it is necessary to run bootctl again in order to update both bootloader files.

root #bootctl update

Удаление

Unmerge

root #emerge --ask --depclean --verbose sys-boot/efibootmgr

См. также

Примечания

  1. По крайней мере, для прошивок Dell EFI, обходной путь был реализован в ядре 5.10: https://lkml.org/lkml/2020/9/18/228
  2. UEFI 2.10 Specification, 3.5.1.1 Removable Media Boot Behavior
  3. Debian Wiki – UEFI: Force grub-efi installation to the removable media path