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
一般的なデバイスマッパールールを格納し、/dev/mapper 内に /dev/dm-N をターゲットとするシンボリックリンクを作成します。ここで N は、カーネルによってデバイスに動的に割り当てられる数です (/dev/dm-N はノードです)。
注意: /dev/dm-N ノードは、デバイスにアクセスするスクリプトには 決して 使用されるべきではありません。これは、N 番号が動的に割り当てラレ、デバイスが有効化される順が変わるためです。そのため、/dev/mapper ディレクトリーの true 名を使用する必要があります。このレイアウトは、ノード/シンボリックリンクの作成方法の 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 ディレクトリーにシンボリックリンクを作成します。
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: デバイスマッパーデバイスの 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 ファイル内で使用して、特定のデバイスマッパーデバイスのパーミッションを定義することができます。