Ошибка загрузки EFI :Пожалуйста, добавьте правильный вариант загрузки устройства "root="

Проблема с использованием &для запуска команд в фоновом режиме заключается в том, что оболочка автоматически закрывает стандартный ввод для этой команды. Таким образом, ваш cat -сразу читает конец -файла -. В качестве обходного пути вы можете, например, продублировать файловый дескриптор с 0 на 3 и использовать этот:

...
else    exec 3<&0
        cat - <&3 \
        | tee >(get_1 ${col1}) \
...
0
05.09.2020, 11:29
2 ответа

Один из способов — добавить параметры загрузки в переменные загрузки UEFI в NVRAM, используя параметр -@команды efibootmgr:

echo "root=/dev/nvme0n1pX" | efibootmgr -c -d /dev/nvme0n1 -L "Kubuntu with kernel UEFI stub" -l \\EFI\\ubuntu.efi -@ -

... где /dev/nvme0n1pX— это раздел устройства NVME, содержащий вашу фактическую корневую файловую систему, а /dev/nvme0n1— это устройство NVME, содержащее ваш раздел ESP, а \\EFI\\ubuntu.efi— путь в стиле Windows -относительно корня раздела ESP с двойной обратной косой чертой, потому что обратная косая черта является специальным символом оболочки. Вы можете установить любой текст метки (в качестве параметра опции -L).

Обратите внимание, что это вообще не включает initramfs, если только вы не встроили его в файл ядра. Возможно, заглушка UEFI загрузит initramfs, добавив параметр загрузки ядра, такой как initrd=\\EFI\\initrd.img, но поддержка неясна, потому что это очень плохо документировано и зависит от поддержки прошивки UEFI, которая может иметь ошибки и специфичные для поставщика -причуды (в одних системах может потребоваться абсолютный путь со всеми заглавными буквами, в других — относительный с точным регистром и т. д. ).

Он также не позволяет загрузиться в аварийном/однопользовательском режиме путем редактирования параметров загрузки ядра, так как у вас нет загрузчика, который позволял бы редактировать их во время загрузки. Таким образом, вам нужно будет предвидеть любые возможные требования к параметрам загрузки и сгенерировать несколько переменных загрузки UEFI, чтобы заранее охватить любые возможные сценарии, или просто перезагрузить систему с внешнего носителя в любое время, когда возникнут какие-либо проблемы с процессом ранней загрузки.

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

(В старых версиях Linux существовал способ напрямую манипулировать файлом bzImage, чтобы предварительно -установить корневое устройство по умолчанию по младшим/старшим номерам устройств; но я не уверен, что это работает с современными ядрами, и, кажется, не помню название команды, используемой для выполнения манипуляции.)

0
18.03.2021, 23:07

Я решил это.
Правильная команда:fs0:> Kubuntu.efi root=/dev/nvme0n1p5
Решение, найденное в:Linux-kernel ---> ~/Documentation/admin-guide/efi-stub.rst

Большое спасибо за Вашу помощь.

0
18.03.2021, 23:07

Теги

Похожие вопросы