NVMeデバイスのルートファイルシステム

NVMeデバイスのルートファイルシステム

Intel 750 NVMeドライブがあります。うまくいきます。まあ..そうです。このデバイスをルートファイルシステムとして使用したいと思います。

私のBIOSはNVMeデバイスをサポートしていません。

  1. モジュールではなくカーネルでnvmeドライバを有効にしました。 nmve デバイスをインストールできます。ルートファイルシステムをここにコピーしました。

このデバイスを grub2 でルートファイルシステムとして使用しようとすると、不明なデバイスが表示されます。

カーネルとパラメータの grub2 行は次のとおりです。

linux   /boot/kernel-4.1.6-gentoo root=/dev/nvme0n1p1 ro quiet

なぜこれですか?ドライバはカーネルにあります。モジュールではありません。ルートファイルシステムでは何も必要ありません。 /dev/nvme0n1p1にアクセスするためにBIOSを使用していますか?

  1. 2番目の試みはinitramfsを使用することでした。私はinitramfsを生成するためにgenkernelを使用します。

    /dev/nvme0n1p1にもこの問題があります。 initramfsを使用してLinuxで起動します。ただし、linuxrcスクリプトを介して実際のルートファイルシステムをマウントしようとすると、ブロックデバイスの検証は失敗します。

.... ブロックデバイスまたは /dev/nfs 確認 elif [ -b "${REAL_ROOT}" ] || ["${REAL_ROOT}"="/dev/nfs"]...

REAL_ROOTはdev / nvme0n1p1に設定されます。 (デバッグコードを追加しました。)

/dev/nvme0n1p1をマウントするように上記のスクリプトを変更しましたが、これも失敗しました。そこにありません。

奇妙なことは、失敗した後にユーザーにルートファイルシステムに移動するように求められます。そして…「/dev/nvme0n1p1」と入力すると正常に動作します。ブーツ。

さらに、それはあなたをシェルに落とします。そして/dev/nvme0n1p1がそこにあります...だけでなく、テストもします。

elif [ -b "${REAL_ROOT}" ]

シェルを通して。

それで#1で何が起こりましたか?これはうまくいくべきですか? BIOSを使用していますか(私のBIOSはNVMeをサポートしていないため失敗します)?

#2は奇妙でバグのように見えます。つまり、もしそうなら、誰がNVMeをルートデバイスとして使用できますか? Googleが私の検索から何かを返すと確信しています。

ベストアンサー1

Linuxカーネルの他の多くのMTDデバイスと同様に、NVMeデバイスは非同期初期化を使用します。カーネルがコントローラを発見した後、ブロック層はパーティションスキャンを開始しますが、カーネルは(デフォルトでは)待ちません。これは、カーネルがルートファイルシステムをマウントしようとしたときにパーティションのレイアウトがまだわからないため、そのようなデバイスにルートファイルシステムをマウントしようとすると失敗したり悪いことを意味します。

避けられないパニックを避けるために急いではなく、実際にルートデバイスが表示されるまでカーネルが待たれるようにするには、rootwaitブートローダ/埋め込みコマンドラインにオプションを渡す必要があります(rootdelay明示的なタイムアウトを使用することも別のオプションですが、間違いなくrootwait簡単です。より良い)。安全)。

問題は、カーネルを直接起動した場合にのみ発生します。これは、initramfsを有効にすると、パーティションのスキャンが完了し、すべてのパーティションが登録および使用可能になるように初期化操作が完了するか(または十分な遅延が発生するかどうかわからない)ことが保証されるためです。

おすすめ記事