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

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 выглядит следующим образом:

Для DevPathbcfg сделанная запись есть, PciRoot(0x0)/Pci.....\EFI\refind\refind_x64.efiтогда как для efiboomgr сделанная запись просто говорит:VenHw(99E275E7-75AO-4B37)

Есть ли у вас идея, как заставить efibootmgr работать? Или, в качестве альтернативы, какую опцию в вызове команды мне нужно использовать, чтобы указать параметры ядра с помощью bcfg?

решение1

Если 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?, где ?— буква от aup. Некоторые устройства, такие как некоторые карты SSD, имеют имена файлов в других формах, например /dev/mmcblk0(это по памяти и может быть не совсем верно). Я не помню, чтобы когда-либо видел имя устройства вроде /dev/nvme0n1. Это не значит, что это неправильно, но, по крайней мере, это необычно, и вам следует перепроверить его. Я бы был особенно осторожен и не включал номер раздела — для этого есть опция -pto efibootmgr.
  • Спецификация файла-- Более старые версии требуют, efibootmgrчтобы файлы были указаны с использованием синтаксиса EFI, то есть с обратными косыми чертами ( \), а не слешами ( /), разделяющими записи каталогов. Поскольку оболочки Linux обычно обрабатывают обратные косые черты уникально, это также требует либо закавычивания всего пути, либо удвоения обратных косых черт, поэтому вы должны указать -l \\EFI\\refind\\refind_x64.efiили -l "\EFI\refind\refind_x64.efi. Я слышал, что самые последние версии efibootmgrпринимают более традиционную форму Unix/Linux и "транслируют" внутренне, но я не знаю точно, когда эта функция была добавлена, и вы не сказали, какую версию Ubuntu вы используете. Таким образом, я рекомендую вам использовать удвоенные или заключенные в кавычки обратные косые черты вместо слешей.

С практической точки зрения, конечно, если у вас есть работающая запись через bcfg, то не должно быть необходимости делать что-либо еще с efibootmgr. Я предполагаю, что вы спрашиваете, потому что этодолженработы и потому, что вы хотите иметь возможность выполнять этот тип обслуживания из Ubuntu.

решение2

У меня была точно такая же проблема. Пытался создать загрузочную запись с помощью efibootmgr, используя диск nvme. Она не загрузилась, а меню загрузки в BIOS отображало только японские (или китайские?) символы для этой записи. Проверка загрузочных записей из другой ОС показала, что вновь созданная запись имела тип VenHw.

Однако проблема была в том, что номер раздела был неверным. У меня был корневой раздел и некоторые другие в зашифрованных томах lvm. Поэтому я указал этот зашифрованный раздел для efibootmgr вместо раздела /boot, который должен был быть указан. Это, вероятно, не ваш случай, но я все равно пишу это на случай, если кто-то еще столкнется с этой проблемой по той же причине. Дважды проверьте номер раздела и другие параметры для efibootmgr.

решение3

Вам нужно отредактировать файл refind.conf и изменить путь обратно на PciRoot. Запишите полное описание устройства, чтобы вы могли ввести его в файл conf. Просто убедитесь, что выбрали правильный PciRoot ;)

Связанный контент