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 のデバイスマッパーとの統合

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 にインストールされているようにこれらのルールについてまとめています。

表A.1 デバイスマッパーデバイス向けの udev ルール

ファイル名説明
10-dm.rules
基本的/一般的なデバイスマッパールールを格納し、/dev/mapper 内に /dev/dm-N をターゲットとするシンボリックリンクを作成します。ここで N は、カーネルによってデバイスに動的に割り当てられる数です。 (/dev/dm-N はノードです)
注意: /dev/dm-N ノードは、デバイスにアクセスするスクリプトには 決して 使用されるべきではありません。N の数は動的に割り当てられ、デバイスがアクティブ化される順序によって変化するためです。したがって、/dev/mapper ディレクトリー内の実際の名前を使用する必要があります。このレイアウトは、ノード/シンボリックリンクを作成する方法についての udev の要件をサポートします。
11-dm-lvm.rules
LVM デバイス用に適用されるルールを格納し、ボリュームグループの論理ボリュームのシンボリックリンクを作成します。このシンボリックリンクは、/dev/vgnameディレクトリーに、/dev/dm-N をターゲットとして作成されます。
注意: デバイスマッパーサブシステムの今後のすべてのルールの命名基準に一致させるには、udev ルールは、11-dm-subsystem_name.rules の形式に従う必要があります。udev ルールも提供する libdevmapper ユーザーはいずれも、この基準に従う必要があります。
13-dm-disk.rulesすべてのデバイスマッパーデバイス用に適用されるルールを格納し、/dev/disk/by-id/dev/disk/by-uuid、および /dev/disk/by-uuid ディレクトリー内にシンボリックリンクを作成します。
95-dm-notify.ruleslibdevmapper を使用する待機中のプロセスを通知するルールを格納します。(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: デバイスマッパーデバイスのUUID
  • DM_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 ファイル内で使用して、特定のデバイスマッパーデバイスのパーミッションを定義することができます。