Red Hat Training

A Red Hat training course is available for RHEL 8

68.13. LVM の割り当ての制御

デフォルトでは、ボリュームグループは、同じ物理ボリューム上に並行ストライプを配置しないなど、常識的な規則に従って物理エクステントを割り当てます。これが normal の割り当てポリシーです。vgcreate コマンドで --alloc 引数を使用して、contiguousanywhere、または cling の割り当てポリシーを指定できます。一般的に、normal 以外の割り当てポリシーが必要となるのは、通常とは異なる、標準外のエクステント割り当てを必要とする特別なケースのみです。

68.13.1. LVM の割り当てポリシー

LVM の操作で物理エクステントを 1 つまたは複数の論理ボリュームに割り当てる必要がある場合、割り当ては以下のように行われます。

  • ボリュームグループで割り当てられていない物理エクステントのセットが、割り当てのために生成されます。コマンドラインの末尾に物理エクステントの範囲を指定すると、指定した物理ボリュームの中で、その範囲内で割り当てられていない物理エクステントだけが、割り当て用エクステントとして考慮されます。
  • 割り当てポリシーは順番に試行されます。最も厳格なポリシー (contiguous) から始まり、最後は --alloc オプションで指定した割り当てポリシーか、特定の論理ボリュームやボリュームグループにデフォルトとして設定されている割り当てポリシーが試行されます。割り当てポリシーでは、埋める必要がある空の論理ボリューム領域の最小番号の論理エクステントから始まり、割り当てポリシーによる制限に従って、できるだけ多くの領域の割り当てを行います。領域が足りなくなると、LVM は次のポリシーに移動します。

割り当てポリシーの制限は以下のとおりです。

  • contiguous の割り当てポリシーでは、論理ボリュームの最初の論理エクステントを除いたすべての論理エクステントは、その直前の論理エクステントに物理的に隣接している必要があります。

    論理ボリュームがストライプ化またはミラー化されている場合は、contiguous の割り当て制限が、領域を必要とする各ストライプまたはミラーイメージ (レッグ) に個別に適用されます。

  • cling の割り当てポリシーでは、既存の論理ボリュームに追加する論理エクステントに使用される物理ボリュームが、その論理ボリュームにある別の (1 つ以上の) 論理エクステントですでに使用されている必要があります。設定パラメーター allocation/cling_tag_list が定義されており、リスト表示されているいずれかのタグが 2 つの物理ボリュームにある場合、この 2 つの物理ボリュームは一致すると見なされます。これにより、割り当てのために、同様のプロパティー (物理的な場所など) が設定されている物理ボリュームのグループにタグを付け、その物理ボリュームを同等なものとして処理できます。

    論理ボリュームがストライプ化またはミラー化されると、cling の割り当て制限が、領域を必要とする各ストライプまたはミラーイメージ (レッグ) に個別に適用されます。

  • normal の割り当てポリシーは、並列の論理ボリューム (異なるストライプまたはミラーイメージ/レッグ) 内の同じオフセットで、その並列の論理ボリュームにすでに割り当てられている論理エクステントと同じ物理ボリュームを共有する物理エクステントは選択しません。

    ミラーデータを保持するために、論理ボリュームと同時にミラーログを割り当てる場合、normal の割り当てポリシーでは、最初にログとデータに対して、それぞれ別の物理ボリュームを選択しようとします。異なる物理ボリュームを選択できず、かつ allocation/mirror_logs_require_separate_pvs 設定パラメーターが 0 に設定されている場合は、データの一部とログが物理ボリュームを共有できるようになります。

    また、シンプールメタデータを割り当てる場合も、normal の割り当てポリシーはミラーログを割り当てる場合と同じようになりますが、設定パラメーターは allocation/thin_pool_metadata_require_separate_pvs の値が適用されます。

  • 割り当て要求を満たすのに十分な空きエクステントがあっても、normal の割り当てポリシーによって使用されない場合は、たとえ同じ物理ボリュームに 2 つのストライプを配置することによってパフォーマンスが低下しても、anywhere 割り当てポリシーがその空きエクステントを使用します。

割り当てポリシーは、vgchange コマンドで変更できます。

注記

今後の更新で、定義された割り当てポリシーに基づくレイアウト操作のコードが変更される可能性があることに注意してください。たとえば、割り当て可能な空き物理エクステントの数が同じ 2 つの空の物理ボリュームをコマンドラインで指定する場合、現行バージョンの LVM では、それが表示されている順番に使用が検討されます。ただし、今後のリリースで、そのプロパティーが変更されない保証はありません。特定の論理ボリューム用に特定のレイアウトを取得することが重要な場合は、各手順に適用される割り当てポリシーに基づいて LVM がレイアウトを決定することがないように、lvcreatelvconvert を順に使用してレイアウトを構築してください。

特定のケースで、割り当てプロセスがどのように行われているかを確認するには、コマンドに -vvvv オプションを追加するなどして、デバッグロギングの出力を表示します。

68.13.2. 物理ボリュームでの割り当て防止

pvchange コマンドを使用すると、1 つまたは複数の物理ボリュームの空き領域で物理エクステントが割り当てられないように設定できます。これは、ディスクエラーが発生した場合や、物理ボリュームを取り除く場合に必要となる可能性があります。

以下のコマンドは、/dev/sdk1 での物理エクステントの割り当てを無効にします。

# pvchange -x n /dev/sdk1

pvchange コマンドで -xy 引数を使用すると、無効にされていた割り当てを許可できます。

68.13.3. cling 割り当てポリシーを使用した論理ボリュームの拡張

LVM ボリュームを拡張する際には、lvextend コマンドの --alloc cling オプションを使用して、cling 割り当てポリシーを指定できます。このポリシーにより、既存の論理ボリュームの最終セグメントと同じ物理ボリュームの領域が選択されます。物理ボリューム上に十分な領域がなく、タグのリストが /etc/lvm/lvm.conf ファイルで定義されている場合には、LVM が、その物理ボリュームにいずれかのタグが付けられているかを確認し、既存エクステントと新規エクステント間で、物理ボリュームのタグを適合させようとします。

たとえば、使用している論理ボリュームが、1 つのボリュームグループ内の 2 サイト間でミラー化されている場合は、@site1 タグと @site2 タグを使用し、サイトの場所に応じて物理ボリュームにタグを付けることができます。この場合は、lvm.conf ファイル内に以下の行を指定します。

cling_tag_list = [ "@site1", "@site2" ]

以下の例では、lvm.conf ファイルが変更されて、次のような行が追加されています。

cling_tag_list = [ "@A", "@B" ]

また、この例では、/dev/sdb1/dev/sdc1/dev/sdd1/dev/sde1/dev/sdf1/dev/sdg1、および /dev/sdh1 の物理ボリュームで設定されるボリュームグループ taft が作成されています。この物理ボリュームには、AB、および C のタグが付けられています。この例では、C のタグは使用されていませんが、LVM がタグを使用して、ミラーレッグに使用する物理ボリュームを選択することを示しています。

# pvs -a -o +pv_tags /dev/sd[bcdefgh]
  PV         VG   Fmt  Attr PSize  PFree  PV Tags
  /dev/sdb1  taft lvm2 a--  15.00g 15.00g A
  /dev/sdc1  taft lvm2 a--  15.00g 15.00g B
  /dev/sdd1  taft lvm2 a--  15.00g 15.00g B
  /dev/sde1  taft lvm2 a--  15.00g 15.00g C
  /dev/sdf1  taft lvm2 a--  15.00g 15.00g C
  /dev/sdg1  taft lvm2 a--  15.00g 15.00g A
  /dev/sdh1  taft lvm2 a--  15.00g 15.00g A

以下のコマンドは、ボリュームグループ taft から 10 ギガバイトのミラー化ボリュームを作成します。

# lvcreate --type raid1 -m 1 -n mirror --nosync -L 10G taft
  WARNING: New raid1 won't be synchronised. Don't read what you didn't write!
  Logical volume "mirror" created

以下のコマンドは、ミラーレッグおよび RAID メタデータのサブボリュームに使用されるデバイスを表示します。

# lvs -a -o +devices
  LV                VG   Attr       LSize  Log Cpy%Sync Devices
  mirror            taft Rwi-a-r--- 10.00g       100.00 mirror_rimage_0(0),mirror_rimage_1(0)
  [mirror_rimage_0] taft iwi-aor--- 10.00g              /dev/sdb1(1)
  [mirror_rimage_1] taft iwi-aor--- 10.00g              /dev/sdc1(1)
  [mirror_rmeta_0]  taft ewi-aor---  4.00m              /dev/sdb1(0)
  [mirror_rmeta_1]  taft ewi-aor---  4.00m              /dev/sdc1(0)

以下のコマンドは、ミラー化ボリュームのサイズを拡張します。cling 割り当てポリシーで、同じタグが付いた物理ボリュームを使用して、ミラーレッグが拡張される必要があることを示します。

# lvextend --alloc cling -L +10G taft/mirror
  Extending 2 mirror images.
  Extending logical volume mirror to 20.00 GiB
  Logical volume mirror successfully resized

以下に表示したコマンドは、レッグとして同一のタグが付いた物理ボリュームを使用してミラーレッグが拡張されているのを示しています。C のタグが付いた物理ボリュームは無視される点に注意してください。

# lvs -a -o +devices
  LV                VG   Attr       LSize  Log Cpy%Sync Devices
  mirror            taft Rwi-a-r--- 20.00g       100.00 mirror_rimage_0(0),mirror_rimage_1(0)
  [mirror_rimage_0] taft iwi-aor--- 20.00g              /dev/sdb1(1)
  [mirror_rimage_0] taft iwi-aor--- 20.00g              /dev/sdg1(0)
  [mirror_rimage_1] taft iwi-aor--- 20.00g              /dev/sdc1(1)
  [mirror_rimage_1] taft iwi-aor--- 20.00g              /dev/sdd1(0)
  [mirror_rmeta_0]  taft ewi-aor---  4.00m              /dev/sdb1(0)
  [mirror_rmeta_1]  taft ewi-aor---  4.00m              /dev/sdc1(0)

68.13.4. タグを使用した LVM RAID オブジェクト間の区別

LVM RAID オブジェクトにタグを割り当て、グループごとにアクティブ化などの LVM RAID の動作の制御を自動化できます。

lvm の割り当ては、割り当てポリシーに基づいて PV レベルで発生するため、物理ボリューム (PV) タグは、論理ボリューム (LV) またはボリュームグループ (VG) タグではなく、LVM RAID の割り当て制御を行います。ストレージタイプを異なるプロパティーで区別するには、適切にタグを付けます (NVMe、SSD、HDD など)。Red Hat は、VG に追加した後に新規 PV を適切にタグ付けすることを推奨します。

この手順では、/dev/sda が SSD で、/dev/sd[b-f] が 1 つのパーティションを持つ HDD であることを前提とします。

前提条件

  • lvm2 パッケージがインストールされている。
  • PV として使用するストレージデバイスが利用できます。

手順

  1. ボリュームグループを作成します。

    # vgcreate MyVG /dev/sd[a-f]1
  2. 物理ボリュームにタグを追加します。

    # pvchange --addtag ssds /dev/sda1
    
    # pvchange --addtag hdds /dev/sd[b-f]1
  3. RAID6 論理ボリュームを作成します。

    # lvcreate --type raid6 --stripes 3 -L1G -nr6 MyVG @hdds
  4. リニアキャッシュプールボリュームを作成します。

    # lvcreate -nr6pool -L512m MyVG @ssds
  5. RAID6 ボリュームをキャッシュに変換します。

    # lvconvert --type cache --cachevol MyVG/r6pool MyVG/r6

関連情報

  • man ページの lvcreate(8)lvconvert(8)lvmraid(7)、および lvmcache(7)