
Здравствуйте, у меня большая проблема, потому что, видите ли, когда я 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
тогда как для 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?
, где?
— буква отa
up. Некоторые устройства, такие как некоторые карты SSD, имеют имена файлов в других формах, например/dev/mmcblk0
(это по памяти и может быть не совсем верно). Я не помню, чтобы когда-либо видел имя устройства вроде/dev/nvme0n1
. Это не значит, что это неправильно, но, по крайней мере, это необычно, и вам следует перепроверить его. Я бы был особенно осторожен и не включал номер раздела — для этого есть опция-p
toefibootmgr
. - Спецификация файла-- Более старые версии требуют,
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 ;)