efibootmgr создает запись, в которой DevPath установлен на Venhw вместо PciRoot.

Вопрос или проблема

Привет, у меня большая проблема, потому что, как вы видите, когда я использую 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"

Потенциальные проблемы:

  1. Указание устройства:

    • Вы используете -d /dev/nvme0n1, что, хотя и корректно для NVMe-дисков, может быть неочевидным. Проверьте, что это действительно правильное устройство и что у него нет дополнительных разделов, которые могут вызвать путаницу. Убедитесь, что вы используете правильный номер раздела с помощью параметра -p.
  2. Формат пути:

    • В более старых версиях 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, некорректен, и система не может его интерпретировать, в результате чего вместо ожидаемого результата вы получаете неразборчивые символы.

Решения и рекомендации

  1. Проверка параметров:

    • Дважды проверьте номер раздела с помощью lsblk или fdisk -l и убедитесь, что у вас правильный -p. Если -p 1 указывает на неправильный раздел (например, на шифрованный или недоступный), это может быть причиной проблемы.
  2. Использование конфигурационного файла:

    • Если указанные выше решения не работают, попробуйте редактировать файл refind.conf, чтобы указать правильную DevPath. Убедитесь, что вы корректно выбрали PciRoot, который соответствует вашему оборудованию.
  3. Обновление системы:

    • Убедитесь, что ваша система и утилита efibootmgr обновлены до последней версии. Иногда проблемы исправляются в более поздних релизах утилит.

Альтернативные методы

Если использование efibootmgr продолжает вызывать проблемы, и вы предпочитаете bcfg, вы можете установить параметры ядра, редактируя refind.conf. Запишите полное описание вашего устройства и используйте его в конфигурационном файле, чтобы при необходимости настроить параметры загрузки.

Заключение

Проблема с efibootmgr может быть вызвана рядом факторов, таких как неправильное указание раздела или форматирования пути. Если предложенные решения не сработают, рассмотрите возможность использования bcfg как надежного альтернативного метода для управления загрузочными записями.

Оцените материал
Добавить комментарий

Капча загружается...