質問
Linux の起動時に、「vmlinuz…」行に追加できるオプションがあり、これにより、OS が (少なくともそのセッションでは) NVMe SSD を表示またはアクセスできないようにしながら、他のすべてのハードウェアを検出およびマウント可能な状態に保つことができますか?
コンテクスト
私は Linux の初心者で、まだ勉強中です。各 OS インスタンスが効果的に「エアギャップ」されているマルチブート セットアップ (異なるパーティションではなく、異なるドライブから) を作成したいと考えています。起動時に BIOS でどのドライブからブートするかを選択でき、どのドライブがブートしても、その OS は他のドライブを認識できません。
私は、物理的にドライブを交換するのが現実的ではない (少なくとも頻繁には) ラップトップを使用しており、NVMe ドライブ (デバイス マネージャーで SATA ドライブを無効にした状態) から Win 10 Pro を実行し、SATA ドライブまたは Live CD (NVMe ドライブはそれらには見えない) からさまざまな Linux ディストリビューションを実行して、NVMe ドライブ上のデータを安全に保ちながら、さまざまな Linux ディストリビューションを試してみたいと考えています。
システム情報
- BIOS
AMI Aptio 2.18.126
ファームウェア Ver 1.05.03 - チップセット
Intel Z170 - プロセッサ ファミリー
Skylake - NVMe ドライブ
Samsung 950 Pro - SATAドライブ
Samsung 850 Pro
@EugenRieck、@davidgo、@TwistyImpersonator、@dirkt、@KamilMaciorowski と、時間を割いて回答してくれた皆さんに心から感謝します。
Dirk の質問にお答えします。私が目指していたのは、データと OS がある「ドライブ a」を「ドライブ b」で実行されているものから分離したマルチブート セットアップでした。理想的には、BIOS で、またはハードウェア スイッチを介して、選択したドライブ (またはドライブ ポート) を無効にできれば便利ですが、私のシステムにはそのオプションがありません。起動時にコマンド ラインを使用して Linux カーネル オプションを構成することを参照しているものがあったので、その方法でドライブを無効にできるかどうか疑問に思いました。そのアプローチは、事前構成された Live CD など、および「ドライブ b」にインストールしてセットアップする可能性のあるものに簡単に適用できるため、便利に思えました (その方法についての詳細を教えてくれた Eugen に再度感謝します)。 David が投稿で述べたことから、そのようなカーネル コマンドはオーバーライドされないようです。このようなアプローチでは、たとえば IPTables や VM を誤って構成したり、独創的な機能があるように見えても実際には破損しているパッケージをインストールしたりした場合に、マルウェアが NVMe ドライブに侵入するのは依然として非常に簡単です。これは正しいですか?
答え1
これはかなり簡単です。ブート コマンド ライン パラメータでmodprobe.blacklist=nvme
十分です。
編集
コメントで求められた通り、背景は次のとおりです。
modprobe
は、デバイスが検出されたときにドライバーが自動的にロードされるメカニズムです。したがって、NVMe ドライブが PCIe バス上で検出されると、ドライバーをロードするために呼び出されます。- ドライバーを自動的にロードしたくない状況がいくつかあるため (標準的な例は、
nouveau
ベンダー バイナリの nvidia ドライバーの場合)、このメカニズムにはドライバーの自動ロードを停止する「ブラックリスト」機能が含まれています。 - このブラックリスト化は、カーネルのコマンドラインでファイルを編集するか、またはカーネルのコマンドライン経由で開始できます
/etc/modprobe.d
。質問でブート コマンドラインが明示的に指定されているため、私は後者を使用しました。 - NVMeドライブをブロックデバイスとしてアクセスできるようにするドライバー(カーネルモジュール)は、当然ながら「nvme」と呼ばれます。
これらすべてを組み合わせると、前述のコマンド ラインが作成されます。特に風変わりなラップトップでは、このようなパラメータを使用することは絶対に珍しいことではありません。基本的に、これは Windows デバイス マネージャーで SATA ドライバーを無効にすることとまったく同じです。