Red Hat Training

A Red Hat training course is available for RHEL 8

14.2. LVM デバイスフィルター

論理ボリュームマネージャー (LVM) デバイスフィルターは、デバイス名パターンのリストです。これを使用すると、システムがデバイスを評価して LVM での使用が有効であると認めるのに使用する一連の必須基準を指定できます。LVM デバイスフィルターを使用すると、LVM が使用するデバイスを制御できます。これは、偶発的なデータ損失やストレージデバイスへの不正アクセスを防ぐのに役立ちます。

14.2.1. LVM デバイスフィルターのパターンの特性

LVM デバイスフィルターのパターンは正規表現の形式です。正規表現は文字で区切られ、許可の場合は a、拒否の場合は r が前に付きます。デバイスに一致する最初の正規表現は、LVM が特定のデバイスを許可するか、拒否 (無視) するかを判断します。次に、LVM はデバイスのパスに一致する最初の正規表現をリスト内で検索します。LVM はこの正規表現を使用して、デバイスを a の結果により承認するか、r の結果により拒否するかを決定します。

単一のデバイスに複数のパス名がある場合、LVM はリストの順序に従ってこれらのパス名にアクセスします。r パターンの前に、少なくとも 1 つのパス名が a パターンと一致する場合、LVM はデバイスを許可します。しかし、a パターンが見つかる前にすべてのパス名が r パターンと一致した場合、デバイスは拒否されます。

パターンに一致しないパス名は、デバイスの許可ステータスに影響を与えません。デバイスのパターンに一致するパス名がまったくない場合も、LVM はデバイスを許可します。

システム上のデバイスごとに、udev ルールは複数のシンボリックリンクを生成します。ディレクトリーには、システム上の各デバイスが複数のパス名を通じてアクセスできるように、/dev/disk/by-id//dev/disk/by-uuid//dev/disk/by-path/ などのシンボリックリンクが含まれています。

フィルター内のデバイスを拒否するには、その特定のデバイスに関連付けられたすべてのパス名が、対応する r 拒否表現と一致する必要があります。ただし、考えられる拒否対象のパス名をすべて特定するのは困難な場合があります。そのため、一連の特定の a 表現の後に 1 つの r|.*| 表現を使用して、特定のパスを明確に限定して許可し、その他のすべてを拒否するフィルターを作成することを推奨します。

フィルターで特定のデバイスを定義するときは、カーネル名の代わりにそのデバイスのシンボリックリンク名を使用します。/dev/sda など、デバイスのカーネル名は変更される可能性がありますが、/dev/disk/by-id/wwn-* などの特定のシンボリックリンク名は変更されません。

デフォルトのデバイスフィルターは、システムに接続されているすべてのデバイスを許可します。理想的なユーザー設定のデバイスフィルターは、1 つ以上のパターンを許可し、それ以外はすべて拒否します。たとえば、r|.*| で終わるパターンリストなどが挙げられます。

LVM デバイスのフィルター設定は、lvm.conf ファイルの devices/filter および devices/global_filter 設定フィールドにあります。devices/filter 設定フィールドと devices/global_filter 設定フィールドは同等のものです。

関連情報

  • lvm.conf(5) man ページ

14.2.2. LVM デバイスフィルター設定の例

次の例は、LVM がスキャンして後で使用するデバイスを制御するためのフィルター設定を示しています。lvm.conf ファイルでデバイスフィルターを設定するには、LVM デバイスフィルター設定の適用 を参照してください。

注記

コピーまたはクローン作成された物理ボリューム (PV) を処理するときに、物理ボリューム (PV) の重複に関する警告が表示される場合があります。これはフィルターをセットアップすることで解決できます。マルチパス化され た LVM デバイスの重複した物理ボリューム警告のトラブルシューティング のフィルター設定の例を参照してください。

  • すべてのデバイスをスキャンするには、次のように入力します。

    filter = [ "a|.*|" ]
  • ドライブにメディアが含まれていない場合の遅延を避けるために cdrom デバイスを削除するには、次のように入力します。

    filter = [ "r|^/dev/cdrom$|" ]
  • すべてのループデバイスを追加し、他のすべてのデバイスを削除するには、次のように入力します。

    filter = [ "a|loop|", "r|.*|" ]
  • すべてのループデバイスと SCSI デバイスを追加し、他のすべてのブロックデバイスを削除するには、次のように入力します。

    filter = [ "a|loop|", "a|/dev/sd.*|", "r|.*|" ]
  • 最初の SCSI ドライブにパーティション 8 のみを追加し、他のすべてのブロックデバイスを削除するには、次のように入力します。

    filter = [ "a|^/dev/sda8$|", "r|.*|" ]
  • WWID によって識別される特定のデバイスおよびすべてのマルチパスデバイスからすべてのパーティションを追加するには、次のように入力します。

    filter = [ "a|/dev/disk/by-id/<disk-id>.|", "a|/dev/mapper/mpath.|", "r|.*|" ]

    また、このコマンドは、他のブロックデバイスを削除します。

14.2.3. LVM デバイスフィルター設定の適用

lvm.conf 設定ファイル内にフィルターを設定することにより、LVM がどのデバイスをスキャンするかを制御できます。

前提条件

  • 使用するデバイスフィルターパターンが準備されている。

手順

  1. 実際に /etc/lvm/lvm.conf ファイルを変更せずに、次のコマンドを使用してデバイスフィルターパターンをテストします。以下にフィルター設定の例を示します。

    # lvs --config 'devices{ filter = [ "a|/dev/emcpower.*|", "r|*.|" ] }'
  2. /etc/lvm/lvm.conf ファイルの設定セクション devices にデバイスフィルターパターンを追加します。

    filter = [ "a|/dev/emcpower.*|", "r|*.|" ]
  3. 再起動時に必要なデバイスのみをスキャンします。

    # dracut --force --verbose

    このコマンドによって、LVM が必要なデバイスのみを再起動時にスキャンするように initramfs ファイルシステムを再構築します。