Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
A.3. デバイスマッパーの udev デバイスマネージャーサポート
udev
デバイスマネージャーの主なロールは、/dev
ディレクトリー内でノードを設定する動的な手段を提供することです。これらのノードの作成は、ユーザースペースで udev
ルールを適用することによって実行されます。これらのルールは、特定のデバイスを追加、削除、または変更した結果、カーネルから直接送信される udev
イベント上で処理されます。これはホットプラグサポートの便利な中央メカニズムを提供します。
udev
デバイスマネージャーは、実際のノードを作成するだけでなく、ユーザーによる名前付けが可能なシンボリックリンクも作成できます。これによりユーザーは、独自のカスタマイズされた名前付け、および /dev
ディレクトリーのディレクトリー構造を必要に応じて自由に選択できるようになります。
それぞれの
udev
イベントには、処理されるデバイスに関する基本情報が含まれます。これには、デバイスの名前、デバイスが属するサブシステム、デバイスのタイプ、使用されているメジャーとマイナーの番号、イベントのタイプなどが含まれます。udev
ルール内でもアクセス可能な /sys
ディレクトリー内のすべての情報にアクセスする可能性があることを考慮すると、ユーザーはこの情報に基づく単純なフィルターを利用し、この情報に基づいて条件付きでルールを実行することができます。
udev
デバイスマネージャーは、ノードのパーミッション設定の一元化された方法も提供します。ユーザーはカスタマイズされたルールセットを簡単に追加し、イベント処理中に入手可能な情報のいずれかのビットで指定する、任意のデバイスのパーミッションを定義することができます。
udev
ルール内にプログラムのフックを直接追加することも可能です。udev
デバイスマネージャーは、これらのプログラムを呼び出して、イベントを処理するために必要とされる追加処理を行うことができます。さらにプログラムは、この処理の結果として、環境変数をエクスポートすることもできます。追加の情報源として、任意の結果をルール内で追加で使用することが可能です。
udev
ライブラリーを使用するソフトウェアは、入手可能なすべての情報とともに、udev
イベントを受信し、処理することができます。このため、処理は、udev
デーモンのみにバインドされません。
A.3.1. udev のデバイスマッパーとの統合
デバイスマッパーは
udev
統合に対して直接のサポートを提供します。これによって、デバイスマッパーは、LVM デバイスを含むデバイスマッパーデバイスに関連したすべての udev
処理と同期します。udev
デーモンにルールを適用する方式は、デバイスの変更元であるプログラム (dmsetup
や LVM など) を使用した並列処理であるため、同期が必要です。このサポートがなかったため、前回の変更イベントの結果、引き続きオープンな udev
ルールで処理されたデバイスをユーザーが削除しようとする問題が頻繁に発生していました。この問題は、デバイスに対する変更の間隔が短い場合にとくに多く発生していました。
Red Hat Enterprise Linux は、一般的なデバイスマッパーデバイスおよび LVM 向けの
udev
ルールを正式にサポートしています。表A.1「デバイスマッパーデバイス向けの udev ルール」 では、これらのルールは、/lib/udev/rules.d
にインストールされます。
表A.1 デバイスマッパーデバイス向けの udev ルール
ファイル名 | 説明 | ||
---|---|---|---|
10-dm.rules |
| ||
11-dm-lvm.rules |
| ||
13-dm-disk.rules | 全デバイスマッパーデバイスに適用されるルールを格納し、/dev/disk/by-id ディレクトリーおよび /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 で設定されます。クラスター環境では、lvmetad デーモンと自動アクティブ化はサポートされません。 |
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
ファイル内で使用して、特定のデバイスマッパーデバイスのパーミッションを定義することができます。