A.3. デバイスマッパーによる udev デバイスマネージャーのサポート
udev
デバイスマネージャーの主な役割は、/dev
ディレクトリー内でノードを設定する動的な手段を提供することです。これらのノードの作成は、ユーザースペースにおける udev
ルールを適用することによって指示されます。これらのルールは、特定のデバイスを追加、削除、または変更した結果、カーネルから直接送信される udev
イベント上で処理されます。これはホットプラグサポートの便利な中央メカニズムを提供します。
udev
デバイスマネージャーは、実際のノードを作成するだけでなく、ユーザーによる名前付けが可能なシンボリックリンクも作成できます。これにより、ユーザーは独自のカスタマイズされた名前付けおよび /dev
ディレクトリー内のディレクトリー構造を必要に応じて自由に選択できるようになります。
それぞれの
udev
イベントには、処理されるデバイスに関する基本情報が含まれます。これには、デバイスの名前、デバイスが属するサブシステム、デバイスのタイプ、使用されているメジャーとマイナーの番号、イベントのタイプなどが含まれます。udev
ルール内でもアクセス可能な /sys
ディレクトリー内のすべての情報にアクセスする可能性があることを考慮すると、ユーザーはこの情報に基づく単純なフィルターを利用し、この情報に基づいて条件付きでルールを実行することができます。
udev
デバイスマネージャーは、ノードのパーミッション設定の一元化された方法も提供します。ユーザーはカスタマイズされたルールセットを簡単に追加し、イベント処理中に入手可能な情報のいずれかのビットによって指定される任意デバイスのパーミッションを定義することができます。
udev
ルール内にプログラムのフックを直接追加することも可能です。udev
デバイスマネージャーは、これらのプログラムを呼び出して、イベントを処理するために必要とされる追加処理を行うことができます。さらにプログラムは、この処理の結果として、環境変数をエクスポートすることもできます。追加の情報源として、任意の結果をルール内で追加で使用することが可能です。
udev
ライブラリーを使用するソフトウェアは、入手可能なすべての情報とともに、udev
イベントを受信し、処理することができます。このため、処理は、udev
デーモンのみにバインドされません。
A.3.1. udev のデバイスマッパーとの統合
Red Hat Enterprise Linux 6 では、デバイスマッパーは
udev
統合に対して直接のサポートを提供します。これによって、デバイスマッパーは、LVM デバイスを含むデバイスマッパーデバイスに関連したすべての udev
処理と同期します。udev
デーモンにルールを適用する方式は、デバイスの変更元であるプログラム (dmsetup
や LVM など) を使用した並列処理であるため、同期が必要です。このサポートがなかったため、ユーザーが前回の変更イベントの結果として udev
ルールで処理された引き続きオープンなデバイスをユーザーが削除しようとすると問題が頻繁に発生していました。この問題は、デバイスに対する変更の間隔が短い場合にとくに多く発生していました。
Red Hat Enterprise Linux 6 リリースは、一般的なデバイスマッパーデバイスおよび LVM 向けの
udev
ルールを正式にサポートしています。表A.1「デバイスマッパーデバイス向けの udev ルール」 は、/lib/udev/rules.d
にインストールされているようにこれらのルールについてまとめています。
ファイル名 | 説明 | ||
---|---|---|---|
10-dm.rules |
| ||
11-dm-lvm.rules |
| ||
13-dm-disk.rules | すべてのデバイスマッパーデバイス用に適用されるルールを格納し、/dev/disk/by-id 、/dev/disk/by-uuid 、および /dev/disk/by-uuid ディレクトリー内にシンボリックリンクを作成します。 | ||
95-dm-notify.rules | libdevmapper を使用する待機中のプロセスを通知するルールを格納します。(LVM や dmsetup と同様)。これまでのすべてのルールが適用された後に通知が行われ、udev 処理が確実に完了するようにします。通知されたプロセスは、その後で再開します。 | ||
69-dm-lvm-metad.rules | システム内の新たに表示されるブロックデバイス上での LVM スキャンをトリガーするためのフックが含まれ、可能な場合は LVM の自動アクティブ化を実行します。これは、lvmetad デーモンをサポートし、lvm.conf ファイル内の use_lvmetad=1 で設定されます。lvmeetad デーモンと自動アクティブ化はクラスター環境ではサポートされません。 |
12-dm-permissions.rules
ファイルを用いて、カスタマイズされたパーミッションルールをさらに追加することができます。このファイルは /lib/udev/rules
ディレクトリーにはインストール されず、/usr/share/doc/device-mapper-version
ディレクトリーにあります。12-dm-permissions.rules
ファイルは、パーミッションの設定方法のヒントが記載されたテンプレートで、一例として取り上げられている一部のマッチングルールをベースとしています。このファイルには、一般的な状況についての例が記載されています。このファイルを編集して、/etc/udev/rules.d
ディレクトリーに手動で配置すると、アップデート後もそのまま残り、設定がそのまま維持されます。
これらのルールは、イベントの処理中に、他のルールによっても使用可能なすべての基本的な変数を設定します。
以下の変数は、10-dm.rules で設定されています。
DM_NAME
: デバイスマッパーデバイスの名前DM_UUID
: デバイスマッパーデバイスのUUIDDM_SUSPENDED
: デバイスマッパーデバイスの停止状態DM_UDEV_RULES_VSN
:udev
ルールバージョン (これは主に、前述の変数が正式なデバイスマッパールールによって直接設定されていることを、他すべてのルールが確認するためのものです)
以下の変数は、
11-dm-lvm.rules
で設定されています。
DM_LV_NAME
: 論理ボリューム名DM_VG_NAME
: ボリュームグループ名DM_LV_LAYER
: LVM レイヤー名
12-dm-permissions.rules
ファイルに文書化されているように、これらの変数すべてを12-dm-permissions.rules
ファイル内で使用して、特定のデバイスマッパーデバイスのパーミッションを定義することができます。