ドライバをインストールした後はどうなりますか?

ドライバをインストールした後はどうなりますか?

フラッシュドライブ/ハードドライブがシステムに接続されているときにマウントする必要があります。インストール中に正確に何が起こりますか?システム/カーネルはフラッシュドライブの内容をどのように追跡しますか?

ベストアンサー1

まず、ソフトウェアを実行しない限り、実際には自動的にインストールされません。この動作はカーネルではなくユーザー空間で完全に処理されます。これは、自動マウントがセキュリティにとって悪夢であるため、やや重要です(衝突の可能性がある、または少なくともイメージングされたシステムで洗練されたDoSを持つほとんどのファイルシステムについて)。

今実際に起こるのは、udevとudiskの標準的な組み合わせを使用して自動マウントをトリガーするLinuxの一般的な順序です。

  1. デバイスはカーネルによって物理的に接続され、列挙されます。カーネルはこれを一種のブロックデバイスとして認識し、このインターフェイスをユーザースペースに公開するように適切なドライバーを設定し、ユーザースペースでリッスンしているすべての項目に新しいハードウェアが接続されたことを知らせるためにueventを実行します。
  2. カーネルはデバイスのパーティションをスキャンします。
  3. /devUdevはこのueventを見て、そのデバイスへのさまざまなデバイスノードとリンクを確立します。次に、デバイスとそのパーティションを検索して、どのファイルシステムがどこにあるかを確認し、このデータを他のプログラムがクエリできる場所に保存します。
  4. Udisksはカーネルでueventを見て、udev設定が完了したことを確認し、手順3で完了したudevスキャンで見つかったファイルシステムがあるかどうかを確認します。そうであれば、udisksは新しく接続されたファイルシステムを自動的にマウントするように設定されており、カーネルにファイルシステム固有のマウント要求を送信します。
  5. カーネルは内部的に以下を実行してファイルシステムをマウントします(はるかに単純化されています)。
    • まず、対応するファイルシステムタイプに合ったドライバがあることを確認し、そうでない場合はロードを試みます。
    • ファイルシステムドライバは、ファイルシステムスーパーブロック(ファイルシステム自体のすべてのメタデータが保存される場所)から必要なメタデータを解析します。
    • スーパーブロックのメモリ内コピーを作成し、ファイルシステムドライバとmountコマンドによって提供されるデータで埋めます。このデータ構造は、カーネル内でファイルシステムを内部的に参照するために使用されます。カーネル内のファイルシステムへの他のすべての内部参照は最終的にこのポイントを指します。
    • その後、カーネルはこのメモリのスーパーブロックへの参照を使用して内部マウントテーブルを更新します。

現在、カーネルがどのように「物を追跡するか」については、正しく説明する方がはるかに複雑です。簡単に言えば、そうではありません。デバイスのファイルにアクセスしようとするたびに、カーネルはファイルシステムのルートでそのファイルを探します。キャッシュがあると作業速度が速くなる可能性がありますが、パフォーマンス以外には重要ではありません。

おすすめ記事