rEFInd (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи rEFInd. Дата последней синхронизации: 22 августа 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

rEFInd - UEFI-загрузчик, способный запускать ядра EFISTUB. Это форк более не поддерживаемого rEFIt, и в нем исправлены многие проблемы, касающиеся загрузки UEFI вне Mac-устройств. Он построен вокруг идеи кроссплатформенности и упрощения загрузки нескольких операционных систем.

Примечание: Во всей статье esp обозначает точку монтирования системного раздела EFI.

Установка

Установите пакет refind.

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

rEFInd поставляется с драйверами UEFI, которые реализуют поддержку в режиме "только чтение" ReiserFS (устарел), Ext2, Ext4, Btrfs, ISO-9660 и HFS+. Вдобавок rEFInd имеет доступ к любой файловой системе, к которой имеет доступ сам UEFI, включая FAT (как указано в спецификации UEFI), HFS+ на Mac и ISO-9660 на некоторых системах.

См. The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers для поиска дополнительных драйверов.

Чтобы использовать rEFInd, Вам нужно установить его в системный раздел EFI или используя скрипт refind-install или копированием файлов и выставлением загрузочной записи вручную.

Важно: Ваше ядро и initramfs должны находиться в файловой системе, которую способен прочесть rEFInd.

Установка при помощи refind-install

Пакет rEFInd включает скрипт refind-install для упрощения процесса выставления rEFInd загрузочной записью EFI по умолчанию. Скрипт имеет несколько опций для работы с различными реализациями UEFI. См. refind-install(8) или комментарии в скрипте для объяснений различных опций установки.

Для большинства систем будет достаточно запустить:

# refind-install

Этот скрипт постарается найти и примонтировать Ваш ESP, скопировать файлы rEFInd в esp/EFI/refind/, и применить efibootmgr, чтобы сделать rEFInd загрузчиком EFI по умолчанию.

Вы также можете установить rEFInd в стандартный/запасной путь загрузки esp/EFI/BOOT/bootx64.efi. Это полезно для загрузочных USB-устройств или в системах с проблемами, связанными с изменениями в NVRAM, произведенными efibootmgr:

# refind-install --usedefault /dev/sdXY

Где /dev/sdXY - ваш системный раздел EFI (устройство, а не точка его монтирования).

Совет: По умолчанию refind-install устанавливает лишь драйвер для той файловой системы, где находится ядро. Драйверы дополнительных файловых систем нужно устанавливать вручную копированием из /usr/share/refind/drivers_x64/ в esp/EFI/refind/drivers_x64/, или Вы можете установить все драйвера с опцией --alldrivers. Это полезно для загрузочных USB-устройств.

После установки файлов rEFInd в ESP убедитесь, что rEFInd создал файл refind_linux.conf, содержащий параметры ядра в том же каталоге, где и Ваше ядро. Этот конфигурационный файл не будет создан, если Вы использовали опцию --usedefault - запустите mkrlconf с правами root, чтобы создать его.

Важно: Когда refind-install запускается в chroot (например, при установке Arch Linux), /boot/refind_linux.conf наполняется параметрами ядра из изначальной системы, а не той, куда устанавливается rEFInd. Отредактируйте /boot/refind_linux.conf и убедитесь, что параметры ядра в нём верны для Вашей системы, иначе Вы получите kernel panic при следующей загрузке. Смотрите пример файла в разделе #refind_linux.conf.

По умолчанию, rEFInd просканирует все Ваши устройства (для которых у него есть драйвера) и добавит загрузочные записи для всех EFI загрузчиков, что сможет найти, что должно включать Ваше ядро (т. к. в Arch EFISTUB включен по умолчанию). Таким образом, у Вас уже должна быть система, способная к загрузке.

Безопасная загрузка (Secure Boot)

См. Managing Secure Boot для поддержки безопасной загрузки в rEFInd.

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

См. Secure Boot#Set up PreLoader для получения подписанных бинарных файлов PreLoader.efi и HashTool.efi.

Выполните refind-install с опцией --preloader /путь/к/прелоадеру

# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi

В следующий раз, когда Вы будете загружаться с включенной безопасной загрузкой, HashTool запустится, и Вам нужно будет зарегистрировать хэши rEFInd (loader.efi), драйверов rEFInd (напр. ext4_x64.efi) и ядра (напр. vmlinuz-linux).

См. refind-install(8) для дополнительной информации.

Совет: Подписанный HashTool способен получить доступ лишь к тому разделу диска, из которого он был запущен. Это значит, что если Ваше ядро не на ESP, Вы не сможете зарегистрировать его хэш из HashTool. Вы можете обойти это ограничение, используя #KeyTool, т. к. он способен зарегистрировать хэш в MokList и не ограничен одним разделом. Не забудьте зарегистрировать хэш KeyTool прежде, чем использовать его.
Использование shim

Установите shim-signedAUR. См. Secure Boot#shim (пропустите этап копирования файлов).

Использование хэшей

Чтобы использовать лишь хэши при помощи shim, запустите refind-install с опцией --shim /путь/к/shim.

# refind-install --shim /usr/share/shim-signed/shimx64.efi

В следующий раз, когда Вы будете загружаться с включенной безопасной загрузкой, MokManager запустится, и Вам нужно будет зарегистрировать хэши rEFInd (loader.efi), драйверов rEFInd (напр. ext4_x64.efi) и ядра (напр. vmlinuz-linux).

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

Чтобы подписать rEFInd при помощи Machine Owner Key (MOK), установите sbsigntools.

Совет: Если Вы уже создали MOK, поместите файлы в каталог /etc/refind.d/keys с именами refind_local.key (приватный ключ в формате PEM), refind_local.crt (сертификат в формате PEM) и refind_local.cer (сертификат в формате DER).

Выполните refind-install с опциями --shim /путь/к/shim и --localkeys:

# refind-install --shim /usr/share/shim-signed/shimx64.efi --localkeys

refind-install создаст ключи за Вас и подпишет сам себя и свои драйвера. Вам нужно будет подписать ядро тем же ключом, например:

# sbsign --key /etc/refind.d/keys/refind_local.key --cert /etc/refind.d/keys/refind_local.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux
Совет: Подписывание ядра может быть автоматизировано постхуком mkinitcpio, см. Secure Boot#Signing the kernel with a mkinitcpio post hook.

В MokManager добавьте refind_local.cer в MoKList. refind_local.cer может быть найден внутри каталога, называющегося keys в каталоге установки rEFInd, напр. esp/EFI/refind/keys/refind_local.cer.

См. refind-install(8) для дополнительной информации.

Использование собственных ключей

Следуйте Secure Boot#Using your own keys, чтобы создать ключи.

Создайте каталог /etc/refind.d/keys и поместите ключ подписи базы данных (db) и сертификаты в него. Назовите файлы: refind_local.key (приватный ключ в формате PEM), refind_local.crt (сертификат в формате PEM) и refind_local.cer (сертификат в формате DER).

При запуске скрипта установки укажите опцию --localkeys, т.е.:

# refind-install --localkeys

Бинарные файлы EFI rEFInd будут подписаны предоставленным ключом и сертификатом.

Ручная установка

Совет: rEFInd способен загружать Linux несколькими способами. См. The rEFInd Boot Manager: Methods of Booting Linux для информации о различных подходах к загрузке.

Если скрипт refind-install для Вас не работает, rEFInd можно установить вручную.

Прежде всего, скопируйте бинарный файл в ESP:

# mkdir -p esp/EFI/refind
# cp /usr/share/refind/refind_x64.efi esp/EFI/refind/

Если Вы хотите установить rEFInd в стандартный/запасной путь загрузки, замените esp/EFI/refind/ на esp/EFI/BOOT/ и скопируйте бинарный файл EFI rEFInd в esp/EFI/BOOT/bootx64.efi:

# mkdir -p esp/EFI/BOOT
# cp /usr/share/refind/refind_x64.efi esp/EFI/BOOT/bootx64.efi

Затем используйте efibootmgr, чтобы создать загрузочную запись в NVRAM UEFI, где /dev/sdX и Y - устройство и номер раздела для вашего системного раздела EFI. Если Вы устанавливаете rEFInd в стандартный/запасной загрузочный путь esp/EFI/BOOT/bootx64.efi, Вы также можете пропустить этот шаг.

# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager" --unicode

На данном этапе Вы должны быть способны загрузиться в rEFInd, но он не загрузит ваше ядро. Если ядро не находится в вашем ESP, rEFInd может примонтировать разделы, чтобы найти его - учитывая, что у него есть необходимые драйверы.

rEFInd автоматически загружает все драйвера из подкаталогов drivers и drivers_arch (например, drivers_x64) в своем установочном каталоге.

# mkdir esp/EFI/refind/drivers_x64
# cp /usr/share/refind/drivers_x64/drivername_x64.efi esp/EFI/refind/drivers_x64/

Теперь rEFInd должен иметь загрузочную запись для Вашего ядра, но он не передаст необходимые параметры ядра. См. #Передача параметров ядра. Теперь Вы должны иметь возможность загрузить Ваше ядро при помощи rEFInd. Если Вы все еще не можете загрузить ядро или Вам нужно отредактировать настройки rEFInd, многие параметры могут быть изменены при помощи конфигурационного файла:

# cp /usr/share/refind/refind.conf-sample esp/EFI/refind/refind.conf

Пример конфигурационного файла хорошо закомментирован и не требует дополнительных разъяснений.

Если Вы не выставили параметр textonly в конфигурационном файле, Вам стоит скопировать иконки rEFInd, чтобы избавиться от уродливых стандартных плейсхолдеров:

# cp -r /usr/share/refind/icons esp/EFI/refind/

Вы можете попробовать различные шрифты, копируя их и изменяя параметр font в refind.conf:

# cp -r /usr/share/refind/fonts esp/EFI/refind/
Совет: Нажмите F10 в rEFInd, чтобы сохранить скриншот в самый верхний каталог ESP.

Обновление

Pacman обновляет файлы rEFInd в /usr/share/refind/, но копировать новые файлы в ESP не будет. Если refind-install для Вашей изначальной установки rEFInd сработал, Вы можете запустить его заново, чтобы скопировать новые файлы. Новый конфигурационный файл будет скопирован как refind.conf-sample, так что Вы сможете внести изменения в существующий файл при помощи утилиты diff. Если Вашему rEFInd требуется #Ручная установка, Вам потребуется самим выяснить, какие файлы нужно скопировать.

Хук Pacman

Вы можете автоматизировать процесс хуком pacman:

/etc/pacman.d/hooks/refind.hook
[Trigger]
Operation=Upgrade
Type=Package
Target=refind

[Action]
Description = Updating rEFInd on ESP
When=PostTransaction
Exec=/usr/bin/refind-install

Где Exec=, возможно, потребуется изменить на корректную команду обновления для Вашей системы. Если была выполнена #Ручная установка, Вы можете создать собственный скрипт обновления, чтобы она вызывалась вместе с хуком.

Совет: Если при настройке rEFInd использовалась #Безопасная загрузка (Secure Boot), вдобавок к --localkeys Вам потребуется добавить --yes к команде refind-install. Это предотвратит провал скрипта, если он запускается с выключенным Secure Boot. См. refind-install(8) для дополнительной информации.
Примечание: Если ESP не примонтирован к /boot, и Вы полагаетесь на автоматическое монтирование, убедитесь, что Вы предзагрузили модуль vfat, как указано в разделе Системный раздел EFI#Альтернативные точки монтирования. Иначе, если refind обновится вместе с ядром, раздел ESP будет недоступен.

Настройка

Конфигурация rEFInd refind.conf находится в том же разделе, что и EFI-приложение rEFInd (обычно esp/EFI/refind или esp/EFI/BOOT). Стандартный конфигурационный файл содержит обширные комментарии, объясняющие все его параметры, см. Configuring the Boot Manager для дополнительных объяснений.

Передача параметров ядра

Есть два метода задания параметров ядра, которые rEFInd передаст в ядро.

Для ядер, автоматически найденных rEFInd

Для автоматически найденных ядер Вы можете или указать параметры ядра напрямую в /boot/refind_linux.conf, или полагаться на способность rEFInd определять корневой раздел и параметры ядра. См. Methods of Booting Linux: For Those With Foresight or Luck: The Easiest Method для дополнительной информации.

Совет:
  • rEFInd автоматически выберет иконку Arch Linux (os_arch.png) для загрузочной опции, когда /etc/os-release находится в том же разделе, что и ядро. Если Ваш /boot находится в отдельном разделе, см. Configuring the Boot Manager: Setting OS Icons.
  • rEFInd не поддерживает унифицированные образы ядер. Чтобы у Вас была иконка для унифицированного образа ядра, скопируйте /usr/share/refind/icons/os_arch.png в esp/EFI/Linux/ и убедитесь, что имена файлов совпадают. Т. е., если у Вас есть esp/EFI/Linux/arch-linux.efi, то назовите иконку esp/EFI/Linux/arch-linux.png.

Чтобы rEFInd поддерживал формат имен ядер Arch Linux и мог сопоставить их с их образами initramfs, раскомментируйте и отредактируйте параметр extra_kernel_version_strings в refind.conf, например:

esp/EFI/refind/refind.conf
...
extra_kernel_version_strings linux-hardened,linux-rt-lts,linux-zen,linux-lts,linux-rt,linux
...
Примечание:
  • rEFInd поддерживает лишь обнаружение одного образа initramfs на ядро, а значит, он не будет обнаруживать запасные initramfs или образы микрокода. Они должны быть обозначены вручную.
  • Без строчки extra_kernel_version_strings, переменная %v в refind_linux.conf не будет работать для ядер Arch Linux.
refind_linux.conf

Если rEFInd автоматически находит Ваше ядро, Вы можете поместить файл refind_linux.conf, содержащий параметры ядра, в тот же каталог, где и Ваше ядро. Вы можете использовать /usr/share/refind/refind_linux.conf-sample в качестве отправной точки. Первая раскомментированная строчка refind_linux.conf и будет параметрами ядра по умолчанию. Последующие строчки будут определять пункты в подменю, доступные при помощи +, F2, или Insert.

Иначе, попробуйте запустить mkrlconf с root-правами. Он попытается найти Ваше ядро в /boot и автоматически сгенерировать refind_linux.conf. Скрипт назначит лишь самые базовые параметры ядра, так что убедитесь в корректности файла.

Если Вы не укажете параметр initrd=, rEFInd автоматически добавит его при помощи поиска общих имен файлов RAM-диска в том же каталоге, где и ядро. Если Вам требуется несколько параметров initrd=, указать их нужно вручную в refind_linux.conf. Например, микрокод, передающийся перед initramfs:

/boot/refind_linux.conf
"Boot using default options"     "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v.img"
"Boot using fallback initramfs"  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v-fallback.img"
"Boot to terminal"               "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v.img systemd.unit=multi-user.target"
Важно:
  • Путь initrd относителен к корню файловой системы, в которой лежит ядро. Это может быть initrd=\boot\initramfs-%v.img, или же, если /boot - отдельный раздел (т. е. ESP), initrd=initramfs-%v.img .
  • Используйте обратные слэши (\) в качестве разделителей пути в параметре initrd, иначе ядро не сможет найти образ(ы) initramfs: EFI stub: ERROR: Failed to open file: /boot/intel-ucode.img.
  • При использовании образов initramfs, сгенерированных Booster, замените initramfs на booster в имени файлов initramfs. Т. е. initrd=\boot\booster-%v.img.
Примечание:
  • Кавычки экранируются повторением (т. е. "" - экранированная версия "). Например, чтобы передать параметр acpi_osi="Windows 2015" в первую загрузочную запись вышеуказанного refind_linux.conf:
    "Boot using default options"     "... initrd=boot\initramfs-%v.img acpi_osi=""Windows 2015"" "
  • rEFInd заменяет %v в refind_linux.conf версией ядра (извлекая ее из имени файла). Чтобы rEFInd поддерживал ядра Arch Linux, параметр extra_kernel_version_strings должен быть отредактирован как описано в разделе #Для ядер, автоматически найденных rEFInd.
Без конфигурации

Если Вы просто установите rEFInd в ESP и запустите без каких-либо дополнительных телодвижений (скажем, при помощи консоли UEFI или KeyTool, или напрямую из встроенного ПО), Вы все еще получите меню загрузки, созданное при помощи автообнаружения, без какой-либо требуемой конфигурации.

Это работает, поскольку у rEFInd есть запасной механизм, который может:

Примечание: rEFInd не поддерживает коды экранирования (например, для пробелов в /etc/fstab.

Для строф загрузки, заданных вручную

Если Ваше ядро не обнаружено автоматически, или же Вы просто хотите больше контроля над опциями в пунктах меню, Вы можете вручную создавать пункты меню используя строфы в refind.conf. Убедитесь, что scanfor включает manual, иначе эти пункты не появятся в меню rEFInd. Параметры ядра задаются при помощи ключевого слова options. rEFInd добавит параметр initrd=, используя файл, указанный ключевым словом initrd в строфе. Если Вам нужны дополнительные initrd (например, для микрокода), Вы можете указать их в options (и тот, что указан ключевым словом initrd, будет добавлен в конец).

Строфы, заданные вручную, объясняются в Creating Manual Boot Stanzas.

esp/EFI/refind/refind.conf
...

menuentry "Arch Linux" {
	icon     /EFI/refind/icons/os_arch.png
	volume   "Arch Linux"
	loader   /boot/vmlinuz-linux
	initrd   /boot/initramfs-linux.img
	options  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img"
	submenuentry "Boot using fallback initramfs" {
		initrd /boot/initramfs-linux-fallback.img
	}
	submenuentry "Boot to terminal" {
		add_options "systemd.unit=multi-user.target"
	}
}

Скорее всего, Вам потребуется изменить volume, чтобы этот параметр соответствовал LABEL файловой системы, или PARTLABEL/PARTUUID того раздела, где находится образ ядра. PARTUUID должен быть в верхнем регистре. Смотрите раздел Постоянные имена для блочных устройств#by-label для примеров присваивания метки тома. Если volume не указан, он по умолчанию равняется тому, из которого запускается rEFInd (обычно системный раздел EFI).

Важно:
  • Пути loader и initrd относительны к корню volume. Если /boot - отдельный раздел (напр. ESP), пути loader и initrd должны быть /vmlinuz-linux и /initramfs-linux.img, соответственно.
  • Используйте обратные слэши (\) в качестве разделителей пути в параметре initrd, иначе ядро не сможет найти образ(ы) initramfs: EFI stub: ERROR: Failed to open file: /boot/intel-ucode.img.
  • При использовании образов initramfs, сгенерированных Booster, замените initramfs на booster в имени файлов initramfs. Т. е. initrd /boot/booster-linux.img.
Примечание:
  • Кавычки экранируются повторением (т. е. "" - экранированная версия "). Например, чтобы передать параметр acpi_osi="Windows 2015" в загрузочную запись "Arch Linux":
    options  "... initrd=boot\amd-ucode.img acpi_osi=""Windows 2015"" "

Установка параллельно уже существующему UEFI Windows

Примечание: Обычные подводные камни двойной загрузки с Windows здесь применимы.

rEFInd совместим с системным разделом EFI, созданным установкой UEFI Windows, так что нет нужды создавать или форматировать еще один раздел FAT32, когда Вы устанавливаете Arch Linux вместе с Windows. Просто примонтируйте уже существующий ESP и установите rEFInd, как обычно. По умолчанию, функция автообнаружения rEFInd должна опознать любые существующие загрузчики Windows.

Примечание: В некоторых случаях Windows ведет себя иначе (экран загрузки в низком разрешении, логотип производителя заменен логотипом Windows, черный экран после экрана загрузки, артефакты). Если Вы встречаетесь с такими проблемами, попробуйте выставить use_graphics_for +,windows в esp/EFI/refind/refind.conf, или добавьте graphics on в загрузочную строфу Windows.

Инструменты

rEFInd поддерживает запуск различных инструментов. Они должны быть установлены отдельно. Отредактируйте showtools в refind.conf, чтобы выбрать, какие инструменты должны показываться.

esp/EFI/refind/refind.conf
...
showtools shell, memtest, mok_tool, gdisk, fwupdate ...
...

Консоль UEFI

Смотрите Unified Extensible Firmware Interface (Русский)#UEFI Shell.

Скопируйте shellx64.efi в корень системного раздела EFI.

Memtest86+

Установите пакет memtest86+-efi и скопируйте его в esp/EFI/tools/.

# cp /boot/memtest86+/memtest.efi esp/EFI/tools/memtest86.efi

Средства управления ключами

rEFInd может обнаружить средства управления ключами безопасной загрузки, если они помещены в каталог rEFInd в ESP, esp/ или esp/EFI/tools/.

HashTool

Следуйте #Использование прелоадера и HashTool.efi будет помещен в каталог rEFInd.

MokManager

Следуйте #Использование shim и MokManager будет помещен в каталог rEFInd.

KeyTool

Установите efitools.

Поместите бинарный файл EFI KeyTool в esp/ или esp/EFI/tools/ с именем KeyTool.efi или KeyTool-signed.efi.

См. Secure Boot#Using KeyTool для инструкций по подписыванию KeyTool.efi.

GPT fdisk (gdisk)

Загрузите GPT fdisk (Русский)#EFI-приложение gdisk и скопируйте gdisk_x64.efi в esp/EFI/tools/.

fwupd

Установите fwupd-efi и настройте fwupd.

Скопируйте fwupdx64.efi и файлы firmware в esp/EFI/tools/:

# cp /usr/lib/fwupd/efi/fwupdx64.efi esp/EFI/tools/

Выключение или перезагрузка

rEFInd имеет встроенные пункты меню выключения и перезагрузки. Так как список инструментов, находящийся здесь, самый обширный в своем роде на всей вики, пользователи консоли UEFI или иных менеджеров загрузки UEFI, например, systemd-boot, могут быть заинтересованы в powerofforreboot.efiAUR.

Советы и рекомендации

Использование драйверов в консоли UEFI

Чтобы использовать драйверы rEFInd в консоли UEFI, загрузите их командой load и обновите диски при помощи map -r.

Shell> load FS0:\EFI\refind\drivers\ext4_x64.efi
Shell> map -r

Теперь Вы можете получить доступ к своей файловой системе из консоли UEFI.

Указание разрешения efifb

Если разрешение в refind.conf выставлено на неверное значение, на всех системах, кроме Mac, rEFInd будет отображать список поддерживаемых разрешений. На Mac он просто будет втихую использовать разрешение по умолчанию.

Чтобы определить разрешения фреймбуфера, поддерживаемые efifb, скопируйте /usr/share/gnu-efi/apps/x86_64/modelist.efi из gnu-efi в корень ESP. Зайдите в консоль UEFI и запустите modelist.efi.

Shell> FS0:\modelist.efi
GOP reports MaxMode 3
 0: 640x480 BGRR pitch 640
*1: 800x600 BGRR pitch 800
 2: 1024x768 BGRR pitch 1024

Выберите одно в refind.conf. Перезагрузитесь и убедитесь, что настройки были применены, запустив dmesg | grep efifb с правами root.

Поддержка подтомов Btrfs

Совет: Убедитесь, что драйвер btrfs_x64.efi установлен, его можно установить вручную копированием из /usr/share/refind/drivers_x64/btrfs_x64.efi в esp/EFI/refind/drivers_x64/btrfs_x64.efi, или можно установить все драйверы при помощи опции refind-install /dev/sdx --alldrivers.
Важно: btrfs_x64.efi не поддерживает raid1c3/4.

Автообнаружение

Чтобы разрешить автоопределение ядер на подтоме Btrfs, раскомментируйте и отредактируйте also_scan_dirs в refind.conf.

esp/EFI/refind/refind.conf
...
also_scan_dirs +,subvolume/boot
...

Далее, добавьте subvol=subvolume к rootflags в refind_linux.conf и затем присоедините subvolume к пути initrd.

/boot/refind_linux.conf
"Boot using standard options"  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=subvolume initrd=subvolume\boot\initramfs-%v.img"

Загрузочная строфа, заданная вручную

Если Вы загружаете подтом btrfs как корень, присоедините путь до подтома к путям loader и initrd, и дополните строку options rootflags=subvol=root_subvolume. В примере ниже в качестве корня монтируется подтом btrfs, названный 'ROOT' (например, mount -o subvol=ROOT /dev/sdxY /mnt):

esp/EFI/refind/refind.conf
...
menuentry "Arch Linux" {
        icon     /EFI/refind/icons/os_arch.png
        volume   "[bootdevice]"
        loader   /ROOT/boot/vmlinuz-linux
        initrd   /ROOT/boot/initramfs-linux.img
        options  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=ROOT"
...
}

Если этого не сделать, Вы получите следующее сообщение об ошибке: ERROR: Root device mounted successfully, but /sbin/init does not exist.

LoaderDevicePartUUID

С версии 0.13.1, rEFInd поддерживает задание переменной UEFI LoaderDevicePartUUID. Это позволяет systemd-gpt-auto-generator(8) примонтировать ESP без необходимости указывать его в /etc/fstab. Смотрите раздел systemd (Русский)#Автомонтирование GPT-раздела.

Чтобы указать LoaderDevicePartUUID в случае rEFInd, отредактируйте refind.conf и раскомментируйте write_systemd_vars true:

esp/EFI/refind/refind.conf
...
write_systemd_vars true
...

Вы можете убедиться, что она задана, проверив ее значение при помощи cat /sys/firmware/efi/efivars/LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f, или посмотрев на состояние "Boot loader sets ESP information" в выводе bootctl.

Решение проблем

Apple Mac

mactel-bootAUR[ссылка недействительна: package not found] - экспериментальная утилита bless для Linux. Если это не сработает, используйте bless из OSX, чтобы установить rEFInd, как загрузочную запись по умолчанию:

# bless --setBoot --folder esp/EFI/refind --file esp/EFI/refind/refind_x64.efi

Пустой экран меню rEFInd

Если Ваша папка drivers_x64 содержит несколько драйверов файловых систем (см. #Установка загрузчика rEFInd для разъяснений), это может привести к неправильному функционированию rEFInd из-за бага драйвера файловой системы, где отображается только пустой экран с логотипом rEFInd (для кастомных тем это будет фоновое изображение). Чтобы исправить это, уберите все драйвера, кроме того, что отвечает за файловую систему с ядром.

Другой потенциальный пустой экран случается при двойной загрузке с Windows, когда rEFInd не может просканировать ESP на других дисках. Чтобы исправить это, используйте blkid, чтобы определить разделы Windows, и добавьте PARTUUID каждого раздела Windows, как отделенную запятой запись в переменную dont_scan_volumes в refind.conf. Например:

# blkid
/dev/nvme0n1p1: LABEL="SYSTEM" UUID="4CE7-C215" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="13aa9955-1234-5678-9098-006c334b5088"
/dev/nvme0n1p5: LABEL="Windows RE Tools" BLOCK_SIZE="512" UUID="08C4E6C5C4E6B45A" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="4eced110-0987-6543-2123-b0ab8576869b"
esp/EFI/refind/refind.conf
...
dont_scan_volumes 13aa9955-1234-5678-9098-006c334b5088,4eced110-0987-6543-2123-b0ab8576869b
...

Не используется логотип дистрибутива

Если Вы видите Такса вместо логотипа Arch, возможно, Вас затронула эта проблема (тип вашего корневого раздела - Linux x86-64 root (/) вместо Linux filesystem).

Вы можете исправить это, изменив тип раздела.

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