Вопрос или проблема
Привет, у меня большая проблема, потому что, как вы видите, когда я использую efibootmgr
для создания загрузочной записи, он просто создает неработоспособный японский символ в меню загрузки EFI, и это очень плохо.
С другой стороны, когда я использую bcfg в оболочке EFI, это работает отлично. Команда efibootmgr, которую я использую: efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"
, тогда как команда bcfg: bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
Когда я выполняю bcfg boot dump -v
, разница между записями efibootmgr и bcfg следующая:
DevPath
для записи, созданной с помощью bcfg, это PciRoot(0x0)/Pci.....\EFI\refind\refind_x64.efi
, тогда как запись, созданная с помощью efibootmgr, просто указывает VenHw(99E275E7-75AO-4B37)
У вас есть идея, как заставить efibootmgr работать? Или, альтернативно, какую опцию в команде мне нужно использовать, чтобы указать параметры ядра с помощью bcfg?
Если efibootmgr
создает запись, как вы описали (VenHw(99E275E7-75AO-4B37)
), то это похоже на ошибку как в efibootmgr
, так и в прошивке. Однако рассмотрим команду efibootmgr
, которую вы указали:
efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"
Есть две вещи, которые необычны в этом:
- Дисковое устройство — Большинство дисковых устройств в Linux имеют имена в формате
/dev/sd?
, где?
— это буква отa
и далее. Некоторые устройства, такие как карты SSD, имеют имена файлов другого формата, например/dev/mmcblk0
(это из памяти и может быть не совсем правильно). Я не припомню, чтобы видел имя устройства вроде/dev/nvme0n1
. Это не значит, что это неправильно, но по крайней мере это необычно, и вы должны перепроверить это. Я бы особенно старался не включать номер раздела — для этого предназначена опция-p
вefibootmgr
. - Указание файла — Более старые версии
efibootmgr
требуют, чтобы файлы указывались с использованием синтаксиса EFI — то есть, с косыми чертами (\
), а не прямыми (/
) для разделения записей директорий. Поскольку оболочки Linux обычно обрабатывают обратные слеши по-другому, это также требует либо заключения всего пути в кавычки, либо удвоения обратных слешей, поэтому вы могли бы указать-l \\EFI\\refind\\refind_x64.efi
или-l "\EFI\refind\refind_x64.efi"
. Я слышал, что самые последние версииefibootmgr
принимают более традиционную форму Unix/Linux и “переводят” её внутри, но я не знаю точно, когда эта функция была добавлена, и вы не сказали, какую версию Ubuntu вы используете. Таким образом, я рекомендую использовать удвоенные или заключенные в кавычки обратные слеши вместо прямых.
На практике, конечно, если у вас есть рабочая запись с помощью bcfg
, не должно быть необходимости делать что-либо еще с efibootmgr
. Я предполагаю, что вы спрашиваете, потому что это должно работать и потому что вы хотите иметь возможность выполнять такого рода обслуживание из Ubuntu.
У меня была точно такая же проблема. Я пытался создать загрузочную запись с помощью efibootmgr, используя диск nvme. Он не загрузился, и меню загрузки в BIOS показывало только японские (или китайские?) символы для этой записи. Проверка загрузочных записей из другой ОС показала, что новосозданная запись была типа VenHw.
Однако проблема заключалась в том, что номер раздела был неверным. У меня был корневой раздел и несколько других в зашифрованных LVM-томах. Поэтому я указал этот зашифрованный раздел для efibootmgr вместо /boot раздела, который следовал указать. Это, вероятно, не ваш случай, но я все равно пишу это на случай, если кто-то еще столкнется с этой проблемой по той же причине. Перепроверьте номер раздела и другие параметры для efibootmgr.
Вам нужно отредактировать файл refind.conf и изменить путь обратно на PciRoot. Запишите полное описание устройства, чтобы вы могли ввести его в конфигурационный файл. Просто убедитесь, что вы выбрали правильный PciRoot 😉
Ответ или решение
Решение проблемы с созданием загрузочной записи с помощью efibootmgr
Ваша проблема с созданием загрузочной записи с помощью efibootmgr
, которая отображается как японский символ в меню загрузки EFI, может быть связана с несколькими аспектами. Давайте разберем ситуацию внимательно.
Анализ команды efibootmgr
Вы указали следующую команду для создания загрузочной записи:
efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"
Потенциальные проблемы:
-
Указание устройства:
- Вы используете
-d /dev/nvme0n1
, что, хотя и корректно для NVMe-дисков, может быть неочевидным. Проверьте, что это действительно правильное устройство и что у него нет дополнительных разделов, которые могут вызвать путаницу. Убедитесь, что вы используете правильный номер раздела с помощью параметра-p
.
- Вы используете
-
Формат пути:
- В более старых версиях
efibootmgr
требовалось указывать пути к файлам в формате EFI с использованием обратных слэшей (\
). Это может выглядеть так:efibootmgr -c -d /dev/nvme0n1 -p 1 -l \\EFI\\refind\\refind_x64.efi -L "rEFInd"
- Убедитесь, что вы используете актуальную версию
efibootmgr
, так как в новых версиях может быть поддержка использования обычных слэшей.
- В более старых версиях
Сравнение с bcfg
Сравнение ваших записей, созданных с помощью efibootmgr
и bcfg
, показывает, что bcfg
работает корректно, и вы получаете правильный DevPath
в виде PciRoot(0x0)/Pci.....\EFI\refind\refind_x64.efi
.
Это говорит о том, что путь к EFI-файлу, созданный efibootmgr
, некорректен, и система не может его интерпретировать, в результате чего вместо ожидаемого результата вы получаете неразборчивые символы.
Решения и рекомендации
-
Проверка параметров:
- Дважды проверьте номер раздела с помощью
lsblk
илиfdisk -l
и убедитесь, что у вас правильный-p
. Если-p 1
указывает на неправильный раздел (например, на шифрованный или недоступный), это может быть причиной проблемы.
- Дважды проверьте номер раздела с помощью
-
Использование конфигурационного файла:
- Если указанные выше решения не работают, попробуйте редактировать файл
refind.conf
, чтобы указать правильнуюDevPath
. Убедитесь, что вы корректно выбралиPciRoot
, который соответствует вашему оборудованию.
- Если указанные выше решения не работают, попробуйте редактировать файл
-
Обновление системы:
- Убедитесь, что ваша система и утилита
efibootmgr
обновлены до последней версии. Иногда проблемы исправляются в более поздних релизах утилит.
- Убедитесь, что ваша система и утилита
Альтернативные методы
Если использование efibootmgr
продолжает вызывать проблемы, и вы предпочитаете bcfg
, вы можете установить параметры ядра, редактируя refind.conf
. Запишите полное описание вашего устройства и используйте его в конфигурационном файле, чтобы при необходимости настроить параметры загрузки.
Заключение
Проблема с efibootmgr
может быть вызвана рядом факторов, таких как неправильное указание раздела или форматирования пути. Если предложенные решения не сработают, рассмотрите возможность использования bcfg
как надежного альтернативного метода для управления загрузочными записями.