web-dev-qa-db-ja.com

Kexecを新しいカーネルに追加しましたが、initramfsプロンプトにアクセスできません!

Kexecを使用してカーネルを正常にロードしましたが、dmesg行を出力しているだけです。これから抜け出してinitramfsプロンプトにドロップするにはどうすればよいですか? Ctrl-Alt-F2は黒い画面をロードするだけで、ctrl-cは何もしません。

これが私のkexecコマンドラインです:

kexec -l $kernel --initrd=$initrd --command-line="root=UUID=... acpi=off ro text earlyshell debug showerr debuginitrd"

earlyshellはシェルへのアクセスを提供するはずですが、そうではありません。そのコマンドラインがないと、ctrl-cを使用しても抜け出せないスクリプトループが発生します。

2
SurpriseDog

解決済み:

カーネル引数:

earlyshell

実際にシェルを起動しませんでしたか?しかし、次の引数を使用してカーネルを実行します。

break=premount

initramfsシェルをくれました。

このリソースは非常に役に立ちました: https://wiki.debian.org/InitramfsDebug

1
SurpriseDog

Kexecに正しい--initrd=を与えましたか?

Kexecをインストールして試しました。私が行けばそれは動作します

kexec -l /boot/vmlinuz --initrd=/boot/initrd.img --append=root=/dev/sda3 

そしてkexec -e。 (私には暗号がありません...)

最初に「use/proc/cmdline」というヒントに従おうとしましたが、うまくいきませんでした。私には、--initrd=オプションを追加する必要があるように見えます。

パスワードを入力するには「initramfsPrompt」が必要ですか(暗号化されたデバイスをマウントできるようにするため)?

通常、私の/proc/cmdlineは次のようになります

vmlinuz initrd=initrd.cpio.gz root=/dev/sda3

上記のkexec(および再起動)の後、/proc/cmdlineは次のようになります

root=/dev/sda3

Kernelとinitrdの名前はなくなりました! -appendの部分だけが残ります。これは私をあまり混乱させません:質問に新しいファセットを追加するだけです:カーネルイメージとinitrdイメージカーネルオプションですか?それらは(カーネル)コマンドラインの一部ですか?

UefiShellを使用して起動します。この「initrd =」がいかに重要かを知っています。ブートローダー(grub)を使用しても、同じように機能するはずです。カーネル、initrd(必要な場合/必要な場合)、ルート、init、およびすべての通常の「カーネルオプション」を選択するのは(間接的な)別の方法です。

標準のinitrdはこれを行います:

  • ルートにアクセスするためのモジュールのロード(私の場合:sata、SIMPLE SSDドライブのahci)

  • そのデバイスをマウントします(root =/dev/xxxで指定)

  • それへの「switch_root」(/ sbin/initの実行を含む)

あなたの場合、sata-moduleではなく、パスワードプロンプト(?)が必要です。ただし、結果は同じです。ルートをマウントできません。

ブートローダーがどのように正常に起動するかを調べてから、kexecでそれを模倣してみてください。


追加:

initrd(名前は関係ありません...)は、デフォルトで/initスクリプトで開始されます(rdinit=ブートオプションを確認してください)。これは、earlyshellに対応する「earlyuserspace」です。このinitramfs-toolを使用すると、/ initと呼び出されるスクリプトを制御するのに十分なブレークポイントが得られたようです。

それ以外の場合は、そのinitrdを抽出し(gzipおよびcpioを使用)、/ initを変更し(または/ init_newを追加してブートオプションとしてrdinit =/init_newに移動し)、フォルダーを再度アーカイブすることができます。このcpioコマンドは、これまで使用したことがありませんが、実際にはtarよりも単純です。少し違います。

mkinitcpioはそのためのツールです。冒頭で、初期のユーザースペースと暗号化の両方について言及しています。これは、私が読んだばかりのarchlinuxのものであり、後期および初期の「フック」もあります。 initramfs-toolsと同じ機能だと思います。

0
user359065