AFAIKの実装は、デフォルトでコマンドを介してカーネルのデバイスマッパーメカニズム(モジュール)を使用してlvm
マッピングテーブルを設定するユーザースペースにあります。dm-mod
dmsetup
これが最終的に発生した一連の出来事であることは正しいですか/dev/dm-x
?
- ブロックデバイスがオンラインになります。
udev
パーティションからブロックデバイスを検索し、パーティションの最初の数セクタでlvmボリュームグループ/論理ボリュームメタデータを識別するルールをトリガします(通過dmsetup
?)。- その後、ルールはモジュール
udev
をロードdm-mod
し、dmsetupを呼び出してという新しいデバイスを作成し、上記/dev/dm-x
のメタデータにマッピングテーブルを設定します。 - 他のいくつかの
udev
規則は、次のシンボリックリンクを生成します。/dev/mapper/vg_name-lv_name
以下は質問です。
- モジュールをロードする特定の
udev
規則は何ですか?dm-mod
udev
このファイルを生成する特定の規則は何ですか/dev/mapper/control
?- どの特定の
udev
ルール/dev/dm-x
がファイルを生成しますか?
私はそれらがどこから来たのかを大まかに知っていますが(xx-dm.rules
後でシンボリックリンクをxx-dm-lvm.rules
追加するだけです/dev/vg_name/lv_name
)、そのファイルのどの行が正確にこれらのタスクを実行しますか?
答え1
以下を除いて、イベントの順序はほとんど正確です。
udev
つまりdm_mod
、カーネルモジュールのロードをトリガーしません。kmod
pvscan
LVMに最も関連するudevルールは、ディスクやパーティションなどの新しいブロックデバイスで呼び出しが行われるようにするルールです。これは通常、すべてのLVMツールを含み、呼び出しなしでデバイスマッパーと直接通信するpvscan
ために使用される単一のマルチコールバイナリの一部です。libdevmapper
dmsetup
- LVMツールバイナリはLVMメタデータを読み取り、シンボリックリンク名を指定することも直接担当しますが、リンクを
udev
生成する実際の作業は最終的に下位レベルのワーカーによって実行されます。
モジュールをロードする特定の
udev
規則は何ですか?dm-mod
udev
ここでは扱いません。これはdevtmpfs
ファイルシステムとサブシステムによってkmod
処理されます。/dev/mapper/control
存在しないデバイスにアクセスしようとすると、devtmpfs
要求が保留され、kmod
サブシステムに適切なモジュールをロードするように要求が開始されます。最終的に本質的に実行されるのは、modprobe devname:mapper/control
カーネルモジュールで定義されたエイリアスです。これは、カーネルのインストールまたは起動時にカーネルモジュールファイルのメタデータから収集されます。dm_mod
/lib/modules/$(uname -r)/modules.alias
depmod
モジュールがロードされ初期化されると(予想デバイスノードが作成された場合)、アクセス試行が再開され、デバイスノードが常に存在していたかのように実行されます。
udev
このファイルを生成する特定の規則は何ですか/dev/mapper/control
?
デバイスノードにはudev
ルールがまったくない場合があり、エンドデバイスの権限を調整するためのいくつかの展開固有のルールしかありません。dm_mod
カーネルモジュールが初期化されたら、misc_register()
カーネル機能を使用してデバイスノードの作成プロセスを開始します。カーネルコードは、デフォルト名と他のデフォルトパラメータを提供します。。これはデバイスマッパーサブシステムを制御するために使用される標準の静的デバイス名であるため、通常デフォルト値を/dev/mapper/control
変更しすぎる理由はありません。
どの特定の
udev
ルール/dev/dm-x
がファイルを生成しますか?
同様にudev
、デバイスの作成は開始されません。カーネル関数が呼び出されると、カーネル内のデバイスマッパーサブシステムでイニシアチブが提供されますregister_blkdev()
。デバイスマッパーがデバイスを作成すると指定した場合(指定された基本名およびその他の基本属性があります。)、udev
リクエストのパラメータを調整し、他のアクションをデバイスイベントにリンクしてから、ユーザ空間mknod()
システムコールを使用して、カーネルのリクエスト+ udevルールに従ってデバイスノード作成要求を完了するだけです。
リクエストにudevルールが適用されない場合、デバイスudev
マッパーカーネルコードで指定されたデフォルト名、所有権、権限、およびその他の属性のみを使用してデバイスが生成されます。より高いレベルのサブシステム(たとえば、LVM)が新しいマッピングの作成を要求したときに、これらのパラメーターの一部がより高いレベルのサブシステムによって指定されている可能性があります。
新しいデバイスに対してudevルールをいくらか生成できますが、ルールのパラメータと一致するデバイスを登録するためにカーネルコードが呼び出されない限り、ルールはアイドル状態にあり、何もしません。
最新のカーネル機能を使用すると、発信者はデバイス名のみを指定register_blkdev()
できますregister_chrdev()
。長期的な目標は、ほとんど/すべてのデバイスのメジャー/マイナー番号を動的に割り当て、udevにすべての権限割り当てを処理させることです。ただし、以前のバージョンではmisc_register()
デバイス構造全体を指定できるため、静的メジャー/マイナーノード番号やその他の属性を持つデバイスを作成できます。
マスエフェクト2:カーネル決定に頼るならいつデバイスをudev
決定してください。どのようにこれに対してデバイスノードを作成します。