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を押しても抜け出すことはできません。
答え1
解決済み:
カーネルパラメータ:
earlyshell
実際にシェルが起動しませんか? ? ?ただし、パラメータを使用してカーネルを実行すると、次のようになります。
break=premount
私にinitramfsシェルを与えました。
このリソースは非常に便利です。https://wiki.debian.org/InitramfsDebug
答え2
kexecに指定した値は正しいですか--initrd=
?
私はkexecをインストールして試してみました。私が行くと効果があります。
kexec -l /boot/vmlinuz --initrd=/boot/initrd.img --append=root=/dev/sda3
それからkexec -e
。 (暗号化しませんでした…)
最初は「使用」プロンプトに従おうとしましたが、/proc/cmdline
成功しませんでした。私は見るには追加のオプションを提供する必要があるようです--initrd=
。
パスワードを提供するには(暗号化されたデバイスをマウントするために)「initramfsプロンプト」が必要ですか?
通常私の/proc/cmdline
姿はこんな感じ
vmlinuz initrd=initrd.cpio.gz root=/dev/sda3
上記のkexecを実行して再起動すると、/proc/cmdline
次のようになります。
root=/dev/sda3
カーネルとinitrdの名前がありません!ただ- 追加その一部が残っています。これは私をとても混乱させません。質問に新しい側面を追加するだけです。カーネルイメージとinitrdイメージはありますか?カーネルオプション?それらは(カーネル)の一部ですか?コマンドライン?
起動にはuefiシェルを使用します。私はこの「initrd =」がどれほど重要かを知っています。ブートローダを使用すると同じように機能します。これは、カーネル、initrd(必要な場合、または必要に応じて)、ルート、init、およびすべての一般的な「カーネルオプション」(間接的に)を選択する他の方法です。
標準initrdは次のことを行います。
ルートディレクトリにアクセスするためのモジュールのロード(私の場合:SIMPLE SSDドライブはsata、ahciです)
デバイスマウント(root = / dev / xxxで提供)
"switch_root"(/sbin/init 実行を含む)
あなたの場合は、SATAモジュールではなくパスワードプロンプト(?)が必要です。しかし、結果は同じです。ルートをマウントできません。
ブートローダがどのように正常に起動するかを理解し、kexecを使用してそれらを模倣してください。
次に追加:
initrd(名前は重要ではありません...)はデフォルトでスクリプトで始まります/init
(rdinit=
起動オプションを参照)。これはearlyshellに対応する「初期ユーザースペース」です。これにより、initramfs-tool
/ initと呼び出されるスクリプトを制御するのに十分なブレークポイントがあるように見えます。
それ以外の場合は、initrdを抽出(gzip
および使用cpio
)して/ initを変更し(または/ init_newを追加し、起動オプションとしてrdinit = / init_newに移動します)、フォルダを再度アーカイブできます。私は以前このcpioコマンドを使用したことがありませんが、実際にはtarよりも簡単です。少し違います。
mkinitcpio
ツールです。初期ユーザースペースと暗号化について言及することから始まります。私はこれがArchiLinuxの仕事であり、後期と初期の「フック」もあることを読んだだけです。 initramfs-toolsと同じことをするようです。