загрузите ядро ​​Linux (4.7) с efistub, initrd и lvm

Вы ищете флаг -L:

grep -L 'trivial information' *

From man grep:

-L, --files-without-match

Подавить нормальный вывод ; вместо этого выведите имя каждого входного файла, из которого обычно не печатается вывод. Сканирование остановится на первом совпадении.

1
28.10.2016, 16:06
2 ответа

Я думаю, вы можете сделать так, чтобы найти установочный диск debian и подключить его к ПК. Затем загрузитесь с диска и пройдите меню устранения неполадок и восстановления файлов vmlinuz и других файлов загрузки.

-2
28.01.2020, 02:12

Этот вопрос старый, но так как на него нет ответа, и я недавно загрузился системой с указанной конфигурацией, позвольте мне написать, как я это сделал. Моя спецификация :ОС :arch Linux (основное ядро, Linux -zen, linux -ясно ). Система :Ноутбук HP с UEFI 2.

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

Первое, что вам нужно сделать, это настроить ваш initramfs/initrd/ramdisk так, чтобы у него были нужные хуки. В этом суть всей проблемы, с которой вы (сталкиваетесь, и я тоже ). Я знаком только с тем, как Arch Linux создает свой ramdisk/initramfs. Возможно, вам придется преобразовать процесс для debian (или любого другого дистрибутива, который вы используете ).

Я начал с трех хуков, доступных в процессе сборки makinitcpio initramfs :базовый крючок (это основной и необходимый крючок )udev hook (выполняет обнаружение необходимых частей системы, включая жесткий диск и корневую файловую систему ). Перехватчик LVM (, так как у вас есть LVM, этот перехватчик будет включать устройство отображения устройств и настройку томов LVM ).

Сборка EFISTUB.

Используйте инструмент objcopy из пакета binutils.

объектная копия
--добавить раздел -.osrel="/etc/os -выпуск" --изменить раздел --vma.osrel=0x20000
--добавить раздел -.cmdline=< (echo -n "${cmdline}")--изменить раздел --vma.cmdline=0x30000
--добавить раздел -.splash="${SPLASH}" --изменить раздел --vma.splash=0x40000
--добавить раздел -.linux="${linux}" --изменить раздел --vma.linux=0x2000000
--добавить раздел -.initrd=< (cat "${INITRD _PREPEND[@]}" "${initrd}")--изменить раздел --vma.initrd= 0x3000000
"${EFISTUB}" "${выход}" подожди $!

Приведенная выше команда в основном берет ваше ядро, iniramfs и параметры ядра и преобразует их в один EFISTUB, который вы можете напрямую загрузить из прошивки (прошивки UEFI ).

Здесь :$cmdline — это в основном параметры вашего ядра, и он должен как минимум содержать корневой путь, например, в вашем случае root=/dev/Debian/root $SPLASH должен быть изображением, которое вы хотите отображать в качестве заставки при загрузке.

$EFISTUB — это универсальный файл linuxx64.efi.stub, поставляемый с systemd. В Arch Linux он обычно находится в каталоге /use/lib/systemd/efi/.

$output — это место, куда вы хотите вывести файл, который, очевидно, должен находиться в системном разделе ESP (EFI ), чтобы прошивка могла его обнаружить.

Затем с помощью efibootmgr,вы можете сделать загрузочную запись только что созданного EFISTUB:

efibootmgr -c -d /dev/sda -p 2 -L "Debian EFISTUB" -l /efi/EFI/debian/linux -efi.efi

В приведенном выше примере :-c означает создание (для создания новой загрузочной записи )-d указывает на диск, на котором находится ESP. -p указывает на номер раздела этого диска. -L для предоставления подходящей метки для загрузочной записи. -l указывает на загрузчик (в основном на efistub ). Я предположил, что он находится в каталоге EFI/debian в ESP и монтируется в /efi.

Советы :Работая над загрузкой efistub, я обнаружил, что оболочка UEFI очень удобна. Вы можете попробовать многое из этой оболочки, включая загрузку заглушки efi ядра с пользовательскими параметрами ядра и т. д.

Приведенное выше руководство загружает EFISTUB БЕЗ ПОМОЩИ ЛЮБОГО ЗАГРУЗЧИКА. Если вы загружаете несколько операционных систем, вы можете добавить загрузчик для управления различными efistub или операционными системами.

0
01.06.2021, 15:37

Теги

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