Проблема с использованием &
для запуска команд в фоновом режиме заключается в том, что оболочка автоматически закрывает стандартный ввод для этой команды. Таким образом, ваш cat -
сразу читает конец -файла -. В качестве обходного пути вы можете, например, продублировать файловый дескриптор с 0 на 3 и использовать этот:
...
else exec 3<&0
cat - <&3 \
| tee >(get_1 ${col1}) \
...
Один из способов — добавить параметры загрузки в переменные загрузки 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, чтобы предварительно -установить корневое устройство по умолчанию по младшим/старшим номерам устройств; но я не уверен, что это работает с современными ядрами, и, кажется, не помню название команды, используемой для выполнения манипуляции.)
Я решил это.
Правильная команда:fs0:> Kubuntu.efi root=/dev/nvme0n1p5
Решение, найденное в:Linux-kernel ---> ~/Documentation/admin-guide/efi-stub.rst
Большое спасибо за Вашу помощь.