Show Table of Contents
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 ファイル内で使用して、特定のデバイスマッパーデバイスのパーミッションを定義することができます。
A.3.2. udev をサポートするコマンドとインターフェース
表A.2 udev をサポートする dmsetup コマンド
| コマンド | 説明 |
|---|---|
dmsetup udevcomplete | udev がルールの処理を完了し、待機中のプロセスのロックを解除したことを通知するために使用されます (95-dm-notify.rules 内の udev ルールの中から呼び出されます)。 |
dmsetup udevcomplete_all | デバッグの目的で使用され、待機中の全プロセスのロックを手動で解除します。 |
dmsetup udevcookies | デバッグの目的で使用され、既存のすべての Cookie (システム全体のセマフォ) を表示します。 |
dmsetup udevcreatecookie | Cookie (セマフォ) を手動で作成するのに使用されます。これは、単一の同期リソース下で、より多くのプロセスを実行するのに役立ちます。 |
dmsetup udevreleasecookie | 単一の同期 Cookie の下に置かれるすべてのプロセスに関連した、すべての udev 処理を待機するのに使用されます。 |
udev 統合をサポートする dmsetup オプションは以下のとおりです。
--udevcookieudevトランザクションに追加したいすべてのdmsetupプロセスを対象に定義する必要があります。これは、udevcreatecookieおよびudevreleasecookieと併用されます。COOKIE=$(dmsetup udevcreatecookie) dmsetup command --udevcookie $COOKIE .... dmsetup command --udevcookie $COOKIE .... .... dmsetup command --udevcookie $COOKIE .... dmsetup udevreleasecookie --udevcookie $COOKIE
--udevcookieオプションを使用する以外には、プロセスの環境に変数を単にエクスポートできます。export DM_UDEV_COOKIE=$(dmsetup udevcreatecookie) dmsetup command ... dmsetup command ... ... dmsetup command ...
--noudevrulesudevルールを無効にします。ノード/シンボリックリンクはlibdevmapperによって作成されます (以前の方法)。このオプションは、udevが適切に機能しない場合のデバッグを目的としています。--noudevsyncudevの同期を無効にします。これもデバッグを目的としています。
dmsetup コマンドとそのオプションに関する情報は、dmsetup(8) の man ページを参照してください。
LVM コマンドは、
udev の統合に対応した以下のオプションをサポートします。
--noudevrules:dmsetupコマンドについて、udevルールを無効にします。--noudevsync:dmsetupコマンドについて、udev同期を無効にします。
lvm.conf ファイルには、udev の統合をサポートする以下のオプションが含まれます。
udev_rules: すべての LVM2 コマンドを対象にudev_rulesをグローバルに有効/無効にします。udev_sync: すべての LVM コマンドを対象にudev同期をグローバルに有効/無効にします。
lvm.conf ファイルオプションの詳細は、lvm.conf ファイルのインラインコメントを参照してください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.