web-dev-qa-db-ja.com

initramfsスクリプトをデバッグする方法は?

Ubuntu 14.04のセットアップには、BTRFSルートパーティションを形成するバッキングブロックデバイスとして機能する4つのLUKSパーティションがあります。デフォルト設定を使用すると、ブート時に4つの暗号化されたパーティションのロックを解除できなかったため、それを行うスクリプトを作成しました。

スクリプトはうまく動作します。起動時に問題が発生しないこともあれば、initramfsプロンプトで起動することもあります。 LUKSパーティションの暗号化を解除してからBTRFSパーティションを組み立ててからルートサブボリュームをマウントするまでの間にタイミングの問題があると思いますが、これをデバッグ/テスト/修正する方法がわかりません。何が問題なのかを理解するために何ができるだろうか?

1
elventear

「debug」カーネルパラメーターを使用すると、ブート時にさらにデバッグ出力が表示され、initramfsはブートログを/run/initramfs/initramfs.debugに書き込みます。

通常、実際のブートスクリプトのデバッグは時間がかかります。 initramfsを取り出して展開する必要があります(gzip -d init*.gzその後cpio -vid < init*)、変更します(/init)、それを再梱包し、それで起動します。特定の時点で何が起こっているかを確認したい箇所にprintステートメントを追加します。競合状態の問題は、デバッグ出力を追加するとタイミングが変わり、異なる動作が発生する可能性があることです。コードを読んでそれが何をしているのかを理解する以外に、それに対する簡単な解決策はありません。そうは言っても、スクリプトは短く、簡単に理解できるはずです(/initは約300行のコードです)。

1
bain