論理ボリュームの設定および管理


Red Hat Enterprise Linux 9

LVM の設定と管理

Red Hat Customer Content Services

概要

論理ボリュームマネージャー (LVM) は、物理ストレージデバイスの管理と柔軟性を強化するために設計されたストレージ仮想化ソフトウェアです。LVM では、物理ハードウェアを抽象化することで、仮想ストレージデバイスを動的に作成、サイズ変更、削除できます。このフレームワーク内では、物理ボリューム (PV) は、グループ化されてボリュームグループ (VG) を形成する raw ストレージデバイス群を表します。LVM は、この VG 内で、論理ボリューム (LV) を作成するための領域を割り当てます。LV は、ファイルシステム、データベース、またはアプリケーションが使用できる仮想ブロックストレージデバイスです。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 論理ボリューム管理の概要

論理ボリュームマネージャー (LVM) は、抽象化レイヤーを物理ストレージ上に作成します。これは論理ストレージボリュームを作成するのに役立ちます。これにより、物理ストレージを直接使用する場合に比べて柔軟性が高まります。

さらに、ハードウェアストレージ設定がソフトウェアから隠されているため、アプリケーションを停止したりファイルシステムをアンマウントしたりすることなく、ボリュームのサイズを変更したり移動したりできます。したがって、運用コストが削減できます。

1.1. LVM のアーキテクチャー

以下は、LVM のコンポーネントです。

物理ボリューム
物理ボリューム (PV) は、LVM 使用用に指定されたパーティションまたはディスク全体です。詳細は、LVM 物理ボリュームの管理 を参照してください。
ボリュームグループ
ボリュームグループ (VG) は物理ボリューム (PV) の集合です。これにより、論理ボリュームに割り当て可能なディスク領域のプールが作成されます。詳細は、LVM ボリュームグループの管理 を参照してください。
論理ボリューム
論理ボリュームは使用可能なストレージデバイスを表します。詳細は、基本的な論理ボリューム管理 および 高度な論理ボリューム管理 を参照してください。

以下の図は、LVM のコンポーネントを示しています。

図1.1 LVM 論理ボリュームのコンポーネント

LVM 論理ボリュームのコンポーネント

1.2. LVM の利点

物理ストレージを直接使用する場合と比較して、論理ボリュームには、以下のような利点があります。

容量の柔軟性
論理ボリュームを使用すると、ディスクとパーティションを 1 つの論理ボリュームに集約できます。この機能を使用すると、ファイルシステムを複数のデバイスにまたがって拡張でき、1 つの大きなファイルシステムとして扱うことができます。
便利なデバイスの命名
論理ストレージボリュームは、ユーザー定義のカスタマイズした名前で管理できます。
サイズ変更可能なストレージボリューム
基になるデバイスを再フォーマットしたり、パーティションを再作成したりせずに、簡単なソフトウェアコマンドを使用して論理ボリュームのサイズを拡大または縮小できます。詳細は、論理ボリュームのサイズ変更 を参照してください。
オンラインデータ移動

より新しく、高速で、耐障害性の高いストレージサブシステムをデプロイするには、pvmove コマンドを使用して、システムがアクティブな間にデータを移動できます。データは、ディスクが使用中の場合でもディスクに再配置できます。たとえば、ホットスワップ可能なディスクを削除する前に空にできます。

データの移行方法の詳細は、pvmove man ページおよび ボリュームグループからの物理ボリュームの削除 を参照してください。

ストライプ化ボリューム
2 つ以上のデバイスにまたがってデータをストライプ化する論理ボリュームを作成できます。これにより、スループットが大幅に向上します。詳細は、ストライプ化論理ボリュームの作成 を参照してください。
RAID ボリューム
論理ボリュームは、データの RAID を設定する際に便利な方法を提供します。これにより、デバイス障害に対する保護が可能になり、パフォーマンスが向上します。詳細は、RAID 論理ボリュームの設定 を参照してください。
ボリュームスナップショット
論理ボリュームの特定の時点のコピーであるスナップショットを作成して、一貫性のあるバックアップを作成したり、実際のデータに影響を与えずに変更の影響をテストしたりすることができます。詳細は、論理ボリュームのスナップショットの管理 を参照してください。
シンボリューム
論理ボリュームはシンプロビジョニングできます。これにより、利用可能な物理容量よりも大きな論理ボリュームを作成できます。詳細は、シン論理ボリュームの作成 を参照してください。
キャッシュ
キャッシュは、SSD などの高速デバイスを使用して論理ボリュームからデータをキャッシュし、パフォーマンスを向上させます。詳細は、論理ボリュームのキャッシュ を参照してください。

第2章 LVM 物理ボリュームの管理

物理ボリューム (PV) は、LVM が使用する物理ストレージデバイスまたはストレージデバイス上のパーティションです。

初期化プロセス中に、LVM ディスクラベルとメタデータがデバイスに書き込まれます。これにより、LVM が論理ボリューム管理スキームの一部としてデバイスを追跡および管理できるようになります。

注記

初期化後にメタデータのサイズを増やすことはできません。より大きなメタデータが必要な場合は、初期化プロセス中に適切なサイズを設定する必要があります。

初期化プロセスが完了したら、PV をボリュームグループ (VG) に割り当てることができます。この VG を論理ボリューム (LV) に分割できます。論理ボリュームは、オペレーティングシステムとアプリケーションがストレージに使用できる仮想ブロックデバイスです。

最適なパフォーマンスを確保するには、LVM 用にディスク全体を単一の PV としてパーティション設定してください。

2.1. LVM 物理ボリュームの作成

pvcreate コマンドを使用して、LVM で使用する物理ボリュームを初期化できます。

前提条件

  • 管理アクセスがある。
  • lvm2 パッケージがインストールされている。

手順

  1. 物理ボリュームとして使用するストレージデバイスを特定します。使用可能なすべてのストレージデバイスをリスト表示するには、次のコマンドを使用します。

    $ lsblk
  2. LVM 物理ボリュームを作成します。

    # pvcreate /dev/sdb

    /dev/sdb は、物理ボリュームとして初期化するデバイスの名前に置き換えます。

検証手順

  • 作成された物理ボリュームを表示します。

    # pvs
    
      PV         VG  Fmt  Attr PSize  PFree
      /dev/sdb       lvm2 a--  28.87g 13.87g

関連情報

  • システム上の pvcreate(8)pvdisplay(8)pvs(8)pvscan(8)、および lvm(8) man ページ

2.2. storage RHEL システムロールを使用して物理ボリュームのサイズを変更する

storage システムロールを使用して、ホストの外部から基盤となるストレージまたはディスクのサイズを変更した後、LVM 物理ボリュームのサイズを変更できます。たとえば、仮想ディスクのサイズを増やした後、既存の LVM でさらに多くの領域を使用できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage local storage
      hosts: managed-node-01.example.com
      tasks:
        - name: Resize LVM PV size
          ansible.builtin.include_role:
            name: rhel-system-roles.storage
          vars:
            storage_pools:
               - name: myvg
                 disks: ["sdf"]
                 type: lvm
                 grow_to_fill: true

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 新しい物理ボリュームのサイズを表示します。

    $ ansible managed-node-01.example.com -m command -a 'pvs'
    PV         VG   Fmt Attr PSize PFree
    /dev/sdf1 myvg lvm2 a-- 1,99g 1,99g

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイル
  • /usr/share/doc/rhel-system-roles/storage/ ディレクトリー

2.3. LVM 物理ボリュームの削除

pvremove コマンドを使用して、LVM で使用する物理ボリュームを削除できます。

前提条件

  • 管理アクセスがある。

手順

  1. 物理ボリュームをリスト表示して、削除するデバイスを特定します。

    # pvs
    
      PV           VG Fmt  Attr PSize  PFree
      /dev/sdb1       lvm2 ---  28.87g 28.87g
  2. 物理ボリュームを削除します。

    # pvremove /dev/sdb1

    /dev/sdb1 は、物理ボリュームに関連付けられたデバイスの名前に置き換えます。

注記

物理ボリュームがボリュームグループに含まれている場合は、まずボリュームグループから削除する必要があります。

  • ボリュームグループに複数の物理ボリュームが含まれている場合は、vgreduce コマンドを使用します。

    # vgreduce VolumeGroupName /dev/sdb1

    VolumeGroupName は、ボリュームグループの名前に置き換えます。/dev/sdb1 は、デバイス名に置き換えます。

  • ボリュームグループに物理ボリュームが 1 つだけ含まれている場合は、vgremove コマンドを使用します。

    # vgremove VolumeGroupName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。

検証

  • 物理ボリュームが削除されたことを確認します。

    # pvs

関連情報

  • システム上の pvremove(8) man ページ

2.4. Web コンソールで論理ボリュームの作成

論理ボリュームは物理ドライブとして動作します。RHEL 9 Web コンソールを使用して、ボリュームグループに LVM 論理ボリュームを作成できます。

前提条件

  • RHEL 9 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • cockpit-storaged パッケージがシステムにインストールされている。
  • ボリュームグループが作成されている。

手順

  1. RHEL 9 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Storage をクリックします。
  3. Storage テーブルで、論理ボリュームを作成するボリュームグループをクリックします。
  4. Logical volume group ページで、LVM2 logical volumes セクションまでスクロールし、Create new logical volume をクリックします。
  5. Name フィールドに、新しい論理ボリュームの名前を入力します。名前にスペースを含めないでください。
  6. Purpose ドロップダウンメニューで、Block device for filesystems を選択します。

    この設定では、ボリュームグループに含まれるすべてのドライブの容量の合計に等しい最大ボリュームサイズを持つ論理ボリュームを作成できます。

    cockpit lv block dev

  7. 論理ボリュームのサイズを定義します。以下を検討してください。

    • この論理ボリュームを使用するシステムにどのぐらいの容量が必要か
    • 作成する論理ボリュームの数

    領域をすべて使用する必要はありません。必要な場合は、後で論理ボリュームを大きくすることができます。

    cockpit lv size

  8. Create をクリックします。

    論理ボリュームが作成されます。論理ボリュームを使用するには、ボリュームをフォーマットしてマウントする必要があります。

検証

  • Logical volume ページで、LVM2 logical volumes セクションまでスクロールし、新しい論理ボリュームがリストされているかどうかを確認します。

    cockpit lv details

2.5. Web コンソールで論理ボリュームのフォーマット

論理ボリュームは物理ドライブとして動作します。これらを使用するには、ファイルシステムでフォーマットする必要があります。

警告

論理ボリュームをフォーマットすると、ボリューム上のすべてのデータが消去されます。

選択するファイルシステムにより、論理ボリュームに使用できる設定パラメーターが決まります。たとえば、XFS ファイルシステムはボリュームの縮小をサポートしていません。

前提条件

  • RHEL 9 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • cockpit-storaged パッケージがシステムにインストールされている。
  • 論理ボリュームが作成されている。
  • システムに対する root アクセス権限を持っている。

手順

  1. RHEL 9 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Storage をクリックします。
  3. Storage テーブルで、論理ボリュームが作成されたボリュームグループをクリックします。
  4. Logical volume group ページで、LVM2 logical volumes セクションまでスクロールします。
  5. フォーマットするボリュームグループの横にあるメニューボタン をクリックします。
  6. ドロップダウンメニューから Format を選択します。

    Image displaying the details of the existing logical volume.

  7. Name フィールドに、ファイルシステムの名前を入力します。
  8. マウントポイント フィールドに、マウントパスを追加します。

    The format a logical volume dialog box with configurable fields.

  9. Type ドロップダウンメニューで、ファイルシステムを選択します。

    • XFS ファイルシステムは大規模な論理ボリュームをサポートし、オンラインの物理ドライブを停止せずに、既存のファイルシステムの拡大および縮小を行うことができます。別のストレージの使用を希望しない場合は、このファイルシステムを選択したままにしてください。

      XFS は、XFS ファイルシステムでフォーマットしたボリュームサイズを縮小することには対応していません。

    • ext4 ファイルシステムは以下に対応します。

      • 論理ボリューム
      • オンラインの物理ドライブを停止せずに切り替え
      • ファイルシステムの拡張
      • ファイルシステムの縮小
  10. RHEL Web コンソールでディスク全体をゼロで書き換える場合は、Overwrite existing data with zeros チェックボックスをオンにします。このプログラムはディスク全体を調べるため、このオプションを使用すると遅くなりますが、安全性は高まります。ディスクにデータが含まれていて、上書きする必要がある場合は、このオプションを使用します。

    Overwrite existing data with zeros チェックボックスを選択しない場合、RHEL Web コンソールはディスクヘッダーのみを書き換えます。これにより、フォーマットの速度が向上します。

  11. 論理ボリュームで暗号化を有効にする場合は、Encryption ドロップダウンメニューで暗号化のタイプを選択します。

    LUKS1 (Linux Unified Key Setup) または LUKS2 暗号化を使用したバージョンを選択できます。これを使用すると、パスフレーズを使用してボリュームを暗号化できます。

  12. At boot ドロップダウンメニューで、システムの起動後に論理ボリュームをいつマウントするかを選択します。
  13. 必要な Mount options を選択します。
  14. 論理ボリュームをフォーマットします。

    • ボリュームをフォーマットしてすぐにマウントする場合は、Format and mount をクリックします。
    • ボリュームをマウントせずにフォーマットする場合は、Format only をクリックします。

      ボリュームのサイズや、選択するオプションによって、フォーマットに数分かかることがあります。

検証

  1. Logical volume group ページで、LVM2 logical volumes セクションまでスクロールし、論理ボリュームをクリックして詳細と追加オプションを確認します。

    cockpit lv formatted

  2. Format only オプションを選択した場合は、論理ボリュームの行末にあるメニューボタンをクリックし、Mount を選択して論理ボリュームを使用します。

2.6. Web コンソールで論理ボリュームのサイズを変更する

RHEL 9 Web コンソールで論理ボリュームを拡張または縮小できます。この手順の例では、ボリュームをオフラインにせずに論理ボリュームのサイズを拡大および縮小する方法を説明します。

警告

GFS2 または XFS のファイルシステムを含むボリュームを減らすことはできません。

前提条件

  • RHEL 9 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • cockpit-storaged パッケージがシステムにインストールされている。
  • 論理ボリュームのサイズ変更に対応するファイルシステムを含む既存の論理ボリューム。

手順

  1. RHEL Web コンソールにログインします。
  2. Storage をクリックします。
  3. Storage テーブルで、論理ボリュームが作成されたボリュームグループをクリックします。
  4. Logical volume group ページで、LVM2 logical volumes セクションまでスクロールし、サイズを変更するボリュームグループの横にあるメニューボタン をクリックします。

    LVM2 volume group details

  5. メニューから Grow または Shrink を選択してボリュームのサイズを変更します。

    • ボリュームの増加:

      1. ボリュームのサイズを増やすには、Grow を選択します。
      2. Grow logical volume ダイアログボックスで、論理ボリュームのサイズを調整します。

        LV grow dialog

      3. Grow をクリックします。

        LVM はシステム停止を引き起こすことなく論理ボリュームを拡張します。

    • ボリュームの縮小:

      1. ボリュームのサイズを縮小するには、Shrink を選択します。
      2. Shrink logical volume ダイアログボックスで、論理ボリュームのサイズを調整します。

        LV shrink dialog

      3. Shrink をクリックします。

        LVM はシステム停止を引き起こすことなく論理ボリュームを縮小します。

2.7. 関連情報

第3章 LVM ボリュームグループの管理

ボリュームグループ (VG) を作成および使用すると、複数の物理ボリューム (PV) を 1 つのストレージエンティティーにまとめて管理およびサイズ変更できます。

LVM で割り当てることができる最小単位の領域のことを、エクステントといいます。物理エクステント (PE) と論理エクステント (LE) のデフォルトサイズは 4 MiB です。このサイズは設定可能です。すべてのエクステントは同じサイズです。

VG 内に論理ボリューム (LV) を作成すると、LVM が PV に物理エクステントを割り当てます。LV 内の論理エクステントは、VG 内の物理エクステントと 1 対 1 で対応します。LV を作成するために PE を指定する必要はありません。LVM は利用可能な PE を検出してそれらを組み合わせて、要求されたサイズの LV を作成します。

VG 内では、複数の LV を作成できます。各 LV は、従来のパーティションのように機能しますが、複数の物理ボリュームにまたがって動的にサイズを変更する機能を備えています。VG はディスク領域の割り当てを自動的に管理できます。

3.1. LVM ボリュームグループの作成

vgcreate コマンドを使用してボリュームグループ (VG) を作成できます。非常に大きいボリュームまたは非常に小さいボリュームのエクステントサイズを調整すると、パフォーマンスとストレージ効率を最適化できます。エクステントサイズは、VG を作成するときに指定できます。エクステントサイズを変更するには、ボリュームグループを再作成する必要があります。

前提条件

  • 管理アクセスがある。
  • lvm2 パッケージがインストールされている。
  • 1 つ以上の物理ボリュームが作成されている。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。

手順

  1. VG に含める PV をリスト表示して特定します。

    # pvs
  2. VG を作成します。

    # vgcreate VolumeGroupName PhysicalVolumeName1 PhysicalVolumeName2

    VolumeGroupName は、作成するボリュームグループの名前に置き換えます。PhysicalVolumeName は、PV の名前に置き換えます。

    VG を作成するときにエクステントサイズを指定するには、-s ExtentSize オプションを使用します。ExtentSize は、エクステントサイズに置き換えます。サイズの接尾辞を指定しなかった場合、このコマンドではデフォルトで MB が使用されます。

検証

  • VG が作成されたことを確認します。

    # vgs
    
      VG              #PV #LV #SN Attr   VSize  VFree
      VolumeGroupName   1   0   0 wz--n- 28.87g 28.87g

関連情報

  • システム上の vgcreate(8)vgs(8)、および pvs(8) man ページ

3.2. Web コンソールでボリュームグループの作成

1 つ以上の物理ドライブまたは他のストレージデバイスからボリュームグループを作成します。

論理ボリュームは、ボリュームグループから作成されます。各ボリュームグループに、複数の論理ボリュームを追加できます。

前提条件

  • RHEL 9 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • cockpit-storaged パッケージがシステムにインストールされている。
  • ボリュームグループを作成する物理ドライブ、またはその他の種類のストレージデバイス。

手順

  1. RHEL 9 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Storage をクリックします。
  3. Storage テーブルで、メニューボタンをクリックします。
  4. ドロップダウンメニューから、Create LVM2 volume group を選択します。

    Image displaying the available options in the Storage table drop-down menu. Selecting Create LVM2 volume group.

  5. Name フィールドにボリュームグループの名前を入力します。名前にスペースを含めることはできません。
  6. ボリュームグループを作成するために組み合わせるドライブを選択します。

    cockpit create volume group

    RHEL Web コンソールは、未使用のブロックデバイスのみを表示します。リストにデバイスが表示されない場合は、そのデバイスがシステムで使用されていないことを確認するか、デバイスを空で未使用の状態にフォーマットしてください。使用されるデバイスには、たとえば次のようなものがあります。

    • ファイルシステムでフォーマットしたデバイス
    • 別のボリュームグループの物理ボリューム
    • 別のソフトウェアの RAID デバイスのメンバーになる物理ボリューム
  7. Create をクリックします。

    ボリュームグループが作成されている。

検証

  • Storage ページで、新しいボリュームグループが Storage テーブルにリストされているかどうかを確認します。

3.3. LVM ボリュームグループの名前変更

vgrename コマンドを使用してボリュームグループ (VG) の名前を変更できます。

前提条件

  • 管理アクセスがある。
  • lvm2 パッケージがインストールされている。
  • 1 つ以上の物理ボリュームが作成されている。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
  • ボリュームグループが作成されている。ボリュームグループの作成の詳細は、「LVM ボリュームグループの作成」 を参照してください。

手順

  1. 名前を変更する VG をリスト表示して特定します。

    # vgs
  2. VG の名前を変更します。

    # vgrename OldVolumeGroupName NewVolumeGroupName

    OldVolumeGroupName は、VG の名前に置き換えます。NewVolumeGroupName は、VG の新しい名前に置き換えます。

検証

  • VG に新しい名前が付けられたことを確認します。

    # vgs
    
      VG                  #PV #LV #SN Attr   VSize  VFree
      NewVolumeGroupName   1   0   0 wz--n- 28.87g 28.87g

関連情報

  • vgrename(8)vgs(8) man ページ

3.4. LVM ボリュームグループの拡張

vgextend コマンドを使用して、物理ボリューム (PV) をボリュームグループ (VG) に追加できます。

前提条件

  • 管理アクセスがある。
  • lvm2 パッケージがインストールされている。
  • 1 つ以上の物理ボリュームが作成されている。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
  • ボリュームグループが作成されている。ボリュームグループの作成の詳細は、「LVM ボリュームグループの作成」 を参照してください。

手順

  1. 拡張する VG をリスト表示して特定します。

    # vgs
  2. VG に追加する PV をリスト表示して特定します。

    # pvs
  3. VG を拡張します。

    # vgextend VolumeGroupName PhysicalVolumeName

    VolumeGroupName は、VG の名前に置き換えます。PhysicalVolumeName は、PV の名前に置き換えます。

検証

  • VG に新しい PV が含まれていることを確認します。

    # pvs
    
      PV         VG              Fmt  Attr PSize  PFree
      /dev/sda   VolumeGroupName lvm2 a--  28.87g 28.87g
      /dev/sdd   VolumeGroupName lvm2 a--   1.88g  1.88g

関連情報

  • vgextend(8)vgs(8)pvs(8) man ページ

3.5. LVM ボリュームグループの結合

vgmerge コマンドを使用して、既存の 2 つのボリュームグループ (VG) を結合できます。結合元ボリュームが結合先ボリュームにマージされます。

前提条件

  • 管理アクセスがある。
  • lvm2 パッケージがインストールされている。
  • 1 つ以上の物理ボリュームが作成されている。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
  • 2 つ以上のボリュームグループが作成されている。ボリュームグループの作成の詳細は、「LVM ボリュームグループの作成」 を参照してください。

手順

  1. マージする VG をリスト表示して特定します。

    # vgs
    
      VG               #PV #LV #SN Attr   VSize  VFree
      VolumeGroupName1   1   0   0 wz--n- 28.87g 28.87g
      VolumeGroupName2   1   0   0 wz--n-  1.88g  1.88g
  2. 結合元 VG を結合先 VG にマージします。

    # vgmerge VolumeGroupName2 VolumeGroupName1

    VolumeGroupName2 は、結合元 VG の名前に置き換えます。VolumeGroupName1 は、結合先 VG の名前に置き換えます。

検証

  • VG に新しい PV が含まれていることを確認します。

    # vgs
    
      VG               #PV #LV #SN Attr   VSize  VFree
      VolumeGroupName1   2   0   0 wz--n- 30.75g 30.75g

関連情報

  • システム上の vgmerge(8) man ページ

3.6. ボリュームグループからの物理ボリュームの削除

ボリュームグループ (VG) から未使用の物理ボリューム (PV) を削除するには、vgreduce コマンドを使用します。vgreduce コマンドは、空の物理ボリュームを 1 つまたは複数削除して、ボリュームグループの容量を縮小します。これにより、物理ボリュームが解放され、異なるボリュームグループで使用したり、システムから削除できるようになります。

手順

  1. 物理ボリュームがまだ使用中の場合は、同じボリュームグループから別の物理ボリュームにデータを移行します。

    # pvmove /dev/vdb3
      /dev/vdb3: Moved: 2.0%
     ...
      /dev/vdb3: Moved: 79.2%
     ...
      /dev/vdb3: Moved: 100.0%
  2. 既存のボリュームグループ内の他の物理ボリュームに空きエクステントが十分にない場合は、以下を行います。

    1. /dev/vdb4 から、物理ボリュームを新規作成します。

      # pvcreate /dev/vdb4
        Physical volume "/dev/vdb4" successfully created
    2. 新しく作成した物理ボリュームをボリュームグループに追加します。

      # vgextend VolumeGroupName /dev/vdb4
        Volume group "VolumeGroupName" successfully extended
    3. データを /dev/vdb3 から /dev/vdb4 に移動します。

      # pvmove /dev/vdb3 /dev/vdb4
        /dev/vdb3: Moved: 33.33%
        /dev/vdb3: Moved: 100.00%
  3. ボリュームグループから物理ボリューム /dev/vdb3 を削除します。

    # vgreduce VolumeGroupName /dev/vdb3
    Removed "/dev/vdb3" from volume group "VolumeGroupName"

検証

  • /dev/vdb3 物理ボリュームが VolumeGroupName ボリュームグループから削除されていることを確認します。

    # pvs
      PV           VG                Fmt    Attr   PSize      PFree       Used
      /dev/vdb1 VolumeGroupName  lvm2   a--    1020.00m    0          1020.00m
      /dev/vdb2 VolumeGroupName  lvm2   a--    1020.00m    0          1020.00m
      /dev/vdb3                    lvm2   a--    1020.00m   1008.00m    12.00m

関連情報

  • システム上の vgreduce(8)pvmove(8)、および pvs(8) man ページ

3.7. LVM ボリュームグループの分割

この物理ボリュームに未使用領域が十分にあれば、新たにディスクを追加しなくてもボリュームグループを作成できます。

初期設定では、ボリュームグループ VolumeGroupName1 は、/dev/vdb1/dev/vdb2、および /dev/vdb3 で構成されます。この手順を完了すると、ボリュームグループ VolumeGroupName1/dev/vdb1/dev/vdb2 で構成され、2 番目のボリュームグループ VolumeGroupName2/dev/vdb3 で構成されます。

前提条件

  • ボリュームグループに十分な空き領域がある。vgscan コマンドを使用すると、現在ボリュームグループで利用可能な空き領域の容量を確認できます。
  • 既存の物理ボリュームの空き容量に応じて、pvmove コマンドを使用して、使用されている物理エクステントをすべて他の物理ボリュームに移動します。詳細は、ボリュームグループからの物理ボリュームの削除 を参照してください。

手順

  1. 既存のボリュームグループ VolumeGroupName1 を、新しいボリュームグループ VolumeGroupName2 に分割します。

    # vgsplit VolumeGroupName1 VolumeGroupName2 /dev/vdb3
      Volume group "VolumeGroupName2" successfully split from "VolumeGroupName1"
    注記

    既存のボリュームグループを使用して論理ボリュームを作成した場合は、次のコマンドを実行して論理ボリュームを非アクティブにします。

    # lvchange -a n /dev/VolumeGroupName1/LogicalVolumeName
  2. 2 つのボリュームグループの属性を表示します。

    # vgs
      VG                  #PV #LV #SN Attr   VSize  VFree
      VolumeGroupName1     2   1   0 wz--n- 34.30G 10.80G
      VolumeGroupName2     1   0   0 wz--n- 17.15G 17.15G

検証

  • 新しく作成したボリュームグループ VolumeGroupName2 が、/dev/vdb3 物理ボリュームで構成されていることを確認します。

    # pvs
      PV          VG                  Fmt     Attr    PSize       PFree       Used
      /dev/vdb1 VolumeGroupName1   lvm2    a--     1020.00m      0        1020.00m
      /dev/vdb2 VolumeGroupName1   lvm2    a--     1020.00m      0        1020.00m
      /dev/vdb3 VolumeGroupName2   lvm2    a--     1020.00m    1008.00m    12.00m

関連情報

  • システム上の vgsplit(8)vgs(8)、および pvs(8) man ページ

3.8. ボリュームグループを別のシステムへ移動

次のコマンドを使用して、LVM ボリュームグループ (VG) 全体を別のシステムに移動できます。

vgexport
既存のシステムでこのコマンドを使用して、システムから非アクティブな VG にアクセスできないようにします。VG にアクセスできなくなったら、その物理ボリューム (PV) の接続を解除できます。
vgimport
他のシステムでこのコマンドを使用して、新しいシステムで、古いシステムで非アクティブだった VG にアクセスできるようにします。

前提条件

  • 移動するボリュームグループ内のアクティブなボリュームのファイルにアクセスしているユーザーがいない。

手順

  1. LogicalVolumeName 論理ボリュームをアンマウントします。

    # umount /dev/mnt/LogicalVolumeName
  2. ボリュームグループ内のすべての論理ボリュームを非アクティブ化します。これにより、ボリュームグループでこれ以上の動作が発生しないようにします。

    # vgchange -an VolumeGroupName
    vgchange -- volume group "VolumeGroupName" successfully deactivated
  3. ボリュームグループをエクスポートして、削除元のシステムがボリュームグループにアクセスできないようにします。

    # vgexport VolumeGroupName
    vgexport -- volume group "VolumeGroupName" successfully exported
  4. エクスポートされたボリュームグループを表示します。

    # pvscan
      PV /dev/sda1    is in exported VG VolumeGroupName [17.15 GB / 7.15 GB free]
      PV /dev/sdc1    is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free]
      PV /dev/sdd1    is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free]
      ...
  5. システムをシャットダウンし、ボリュームグループを構成するディスクを取り外し、新しいシステムに接続します。
  6. ディスクを新しいシステムに接続し、ボリュームグループをインポートして、新しいシステムからアクセスできるようにします。

    # vgimport VolumeGroupName
    注記

    vgimport コマンドの --force 引数を使用すると、物理ボリュームがないボリュームグループをインポートし、その後 vgreduce --removemissing コマンドを実行できます。

  7. ボリュームグループをアクティブ化します。

    # vgchange -ay VolumeGroupName
  8. ファイルシステムをマウントして使用できるようにします。

    # mkdir -p /mnt/VolumeGroupName/users
    # mount /dev/VolumeGroupName/users /mnt/VolumeGroupName/users

関連情報

  • システム上の vgimport(8)vgexport(8)、および vgchange(8) man ページ

3.9. LVM ボリュームグループの削除

vgremove コマンドを使用して、既存のボリュームグループを削除できます。削除できるボリュームグループは、論理ボリュームが含まれていないものだけです。

前提条件

  • 管理アクセスがある。

手順

  1. ボリュームグループに論理ボリュームが含まれていないことを確認します。

    # vgs -o vg_name,lv_count VolumeGroupName
    
      VG               #LV
      VolumeGroupName    0

    VolumeGroupName は、ボリュームグループの名前に置き換えます。

  2. ボリュームグループを削除します。

    # vgremove VolumeGroupName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。

関連情報

  • システム上の vgs(8)vgremove(8) man ページ

3.10. クラスター環境での LVM ボリュームグループの削除

クラスター環境では、LVM は lockspace <qualifier> を使用して、複数のマシン間で共有されるボリュームグループへのアクセスを調整します。ボリュームグループを削除する前に lockspace を停止し、削除プロセス中に他のノードがボリュームグループにアクセスしたり変更したりしないようにする必要があります。

前提条件

  • 管理アクセスがある。
  • ボリュームグループには論理ボリュームがありません。

手順

  1. ボリュームグループに論理ボリュームが含まれていないことを確認します。

    # vgs -o vg_name,lv_count VolumeGroupName
    
      VG               #LV
      VolumeGroupName    0

    VolumeGroupName は、ボリュームグループの名前に置き換えます。

  2. ボリュームグループを削除するノードを除くすべてのノードで lockspace を停止します。

    # vgchange --lockstop VolumeGroupName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。ロックが停止するまで待ちます。

  3. ボリュームグループを削除します。

    # vgremove VolumeGroupName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。

関連情報

  • vgremove(8)vgchange(8) man ページ

第4章 基本的な論理ボリューム管理

LVM を使用すると、次のタスクを実行できます。

  • 新しい論理ボリュームを作成してシステムのストレージ機能を拡張する
  • データの増大に対応するために既存のボリュームとシンプールを拡張する
  • 整理しやすくするためにボリュームの名前を変更する
  • ボリュームを減らして未使用の領域を解放する
  • 不要になったボリュームを安全に削除する
  • ボリュームをアクティブ化または非アクティブ化して、システムのデータへのアクセスを制御する

4.1. 論理ボリューム機能の概要

論理ボリュームマネージャー (LVM) を使用すると、従来のパーティションスキームでは実現できない柔軟かつ効率的な方法でディスクストレージを管理できます。以下は、ストレージの管理と最適化に使用される主要な LVM 機能の概要です。

連結
連結では、1 つ以上の物理ボリュームの領域を 1 つの論理ボリュームに結合し、物理ストレージを効果的にマージします。
ストライピング
ストライピングは、データを複数の物理ボリュームに分散することで、データの I/O 効率を最適化します。並列 I/O 操作を可能にすることで、シーケンシャルな読み取りおよび書き込みのパフォーマンスを向上させます。
RAID
LVM は、RAID レベル 0、1、4、5、6、10 に対応します。RAID 論理ボリュームを作成するとき、LVM は、データまたはアレイ内のパリティーサブボリュームごとに、サイズが 1 エクステントのメタデータサブボリュームを作成します。
シンプロビジョニング
シンプロビジョニングを使用すると、使用可能な物理ストレージよりも大きい論理ボリュームを作成できます。シンプロビジョニングでは、事前に決められた量ではなく、実際の使用量に基づいてシステムがストレージを動的に割り当てます。
スナップショット
LVM スナップショットを使用すると、論理ボリュームの特定時点のコピーを作成できます。スナップショットは、最初は空の状態です。元の論理ボリュームに変更が発生すると、スナップショットがコピーオンライト (CoW) により変更前の状態をキャプチャーします。変更があった場合にのみ、元の論理ボリュームの状態を保持するためにサイズが増加します。
キャッシュ
LVM は、高速ブロックデバイス (SSD ドライブなど) を、大規模で低速なブロックデバイスのライトバックまたはライトスルーのキャッシュとして使用することに対応します。既存の論理ボリュームのパフォーマンスを改善するためにキャッシュ論理ボリュームを作成したり、大規模で低速なデバイスと共に小規模で高速なデバイスで構成される新規のキャッシュ論理ボリュームを作成したりできます。

4.2. 論理ボリュームの作成

LVM は、物理レイヤーを論理ボリュームに抽象化し、ニーズに応じて作成および調整することで、ディスクストレージを柔軟な方法で処理します。

4.2.1. リニア (シック) 論理ボリュームの作成

リニア論理ボリューム (LV) を使用すると、複数の物理ストレージユニットを 1 つの仮想ストレージ領域に結合できます。リニア LV は、データ要件に合わせて、簡単に拡張または縮小できます。

前提条件

  • 管理アクセスがある。
  • lvm2 パッケージがインストールされている。
  • ボリュームグループが作成されている。詳細は、LVM ボリュームグループの作成 を参照してください。

手順

  1. ボリュームグループの名前とサイズをリスト表示します。

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. リニア LV を作成します。

    # lvcreate --name LogicalVolumeName --size VolumeSize VolumeGroupName

    LogicalVolumeName は、LV の名前に置き換えます。VolumeSize は、LV のサイズに置き換えます。サイズの接尾辞が指定されていない場合、このコマンドではデフォルトで MB が使用されます。VolumeGroupName は、ボリュームグループの名前に置き換えます。

検証

  • リニア LV が作成されたことを確認します。

    # lvs -o lv_name,seg_type
    
      LV                   Type
      LogicalVolumeName    linear

関連情報

  • vgs(8)lvs(8)lvcreate(8) man ページ

4.2.2. ストライプ化論理ボリュームの作成

ストライプ化論理ボリューム (LV) を使用すると、複数の物理ボリューム (PV) にデータを分散できます。そのため、複数のディスクの帯域幅を同時に利用して、読み取りおよび書き込み速度を向上できます。

ストライプ化 LV を作成するときは、ストライプの数とサイズを考慮することが重要です。ストライプの数は、データが分散される PV の数です。ストライプの数を増やすと、複数のディスクを同時に利用してパフォーマンスを向上できます。ストライプのサイズは、次のディスクに移動するまでにストライプセット内の各ディスクに書き込まれるデータチャンクのサイズであり、キロバイト (KB) 単位で指定されます。最適なストライプのサイズは、ワークロードとファイルシステムのブロックサイズによって異なります。デフォルトは 64KB ですが、調整可能です。

前提条件

  • 管理アクセスがある。

手順

  1. ボリュームグループの名前とサイズをリスト表示します。

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. ストライプ化 LV を作成します。

    # lvcreate --stripes NumberOfStripes --stripesize StripeSize --size LogicalVolumeSize --name LogicalVolumeName VolumeGroupName

    NumberOfStripes は、ストライプの数に置き換えます。StripeSize は、キロバイト単位のストライプのサイズに置き換えます。--stripesize は必須オプションではありません。ストライプのサイズを指定しなかった場合、デフォルトで 64 KB になります。LogicalVolumeName は、LV の名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。

検証

  • ストライプ化 LV が作成されたことを確認します。

    # lvs -o lv_name,seg_type
    
      LV                   Type
      LogicalVolumeName    striped

関連情報

  • vgs(8) lvs(8)lvcreate(8) man ページ

4.2.3. RAID 論理ボリュームの作成

RAID 論理ボリュームを使用すると、複数のディスクを使用して冗長性とパフォーマンスを確保できます。LVM は、RAID0、RAID1、RAID4、RAID5、RAID6、RAID10 など、さまざまな RAID レベルをサポートしています。

LVM を使用すると、ストライプ化 RAID (RAID0、RAID4、RAID5、RAID6)、ミラー化 RAID (RAID1)、またはその両方の組み合わせ (RAID10) を作成できます。

RAID 4、RAID 5、および RAID 6 は、ディスク障害発生時に失われた情報を再構築するのに使用できるパリティーデータを保存することにより、フォールトトレランスを提供します。

RAID LV を作成するときは、各ストライプを個別の PV に配置します。ストライプの数は、ボリュームグループ (VG) 内に存在する PV の数と同じです。

表4.1 最小限の RAID 構成要件
RAID レベルパリティーデバイスの最小数ストライプの最小数

RAID0

ストライピング

なし

2

2

RAID1

ミラーリング

なし

2

-

RAID4

ストライピング

最初のデバイスを使用してパリティーを保存する

3

2

RAID5

ストライピング

1 つの追加デバイスを使用してパリティーを保存する

3

2

RAID6

ストライピング

2 つの追加デバイスを使用してパリティーを保存する

5

3

RAID10

ストライピングとミラーリング

なし

4

2

前提条件

  • 管理アクセスがある。

手順

  1. ボリュームグループの名前とサイズをリスト表示します。

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. RAID LV を作成します。

    • ストライプ化 RAID を作成するには、次を使用します。

      # lvcreate --type raidlevel --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName

      level は、RAID レベル 0、4、5、または 6 に置き換えます。NumberOfStripes は、ストライプの数に置き換えます。StripeSize は、キロバイト単位のストライプのサイズに置き換えます。Size は、LV のサイズに置き換えます。LogicalVolumeName は、LV の名前に置き換えます。

    • ミラー化 RAID を作成するには、次を使用します。

      # lvcreate --type raid1 --mirrors MirrorsNumber --size Size --name LogicalVolumeName VolumeGroupName

      MirrorsNumber は、ミラーの数に置き換えます。Size は、LV のサイズに置き換えます。LogicalVolumeName は、LV の名前に置き換えます。

    • ミラー化およびストライプ化 RAID を作成するには、次を使用します。

      # lvcreate --type raid10 --mirrors MirrorsNumber --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName

      MirrorsNumber は、ミラーの数に置き換えます。NumberOfStripes は、ストライプの数に置き換えます。StripeSize は、キロバイト単位のストライプのサイズに置き換えます。Size は、LV のサイズに置き換えます。LogicalVolumeName は、LV の名前に置き換えます。

検証

  • RAID LV が作成されたことを確認します。

    # lvs -o lv_name,seg_type
    
      LV                   Type
      LogicalVolumeName    raid0

関連情報

  • lvmraid(7)vgs(8)lvs(8)lvcreate(8) man ページ

4.2.4. シン論理ボリュームの作成

シンプロビジョニングでは、ボリュームグループ (VG) の物理エクステント (PE) が割り当てられて、特定の物理サイズのシンプールが作成されます。このシンプールから、論理ボリューム (LV) が、プールの物理容量によって制限されることなく、仮想サイズに基づいて割り当てられます。これにより、すべてのシン LV の合計仮想サイズがシンプールの物理容量を超えると、各シン LV の仮想サイズがシンプールの実際のサイズを超え、オーバープロビジョニングが発生する可能性があります。したがって、容量不足やシステム停止を回避するには、論理的な使用量と物理的な使用量の両方を注意深く監視することが重要です。

シンプロビジョニングは、必要に応じて領域を割り当て、初期コストを削減し、リソースの使用率を向上させることで、ストレージ効率を最適化します。ただし、シン LV を使用する場合は、次の欠点に注意してください。

  • 不適切な破棄処理により、未使用のストレージ領域の解放がブロックされ、時間が経過すると領域がすべて割り当てられる可能性があります。
  • スナップショットのあるファイルシステムでは、コピーオンライト (CoW) 操作が遅くなる可能性があります。
  • データブロックが複数のファイルシステム間で混在する可能性があるため、ランダムアクセスが制限されることがあります。

前提条件

手順

  1. ボリュームグループの名前とサイズをリスト表示します。

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. シンプールを作成します。

    # lvcreate --type thin-pool --size PoolSize --name ThinPoolName VolumeGroupName

    PoolSize は、シンプールが使用できるディスク領域の最大量に置き換えます。ThinPoolName は、シンプールの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。

  3. シン LV を作成します。

    # lvcreate --type thin --virtualsize MaxVolumeSize --name ThinVolumeName --thinpool ThinPoolName VolumeGroupName

    MaxVolumeSize は、シンプール内でボリュームが拡張できる最大サイズに置き換えます。ThinPoolName は、シンプールの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。

    注記

    同じシンプール内に他のシン LV を作成できます。

検証

  • シン LV が作成されたことを確認します。

    # lvs -o lv_name,seg_type
      LV                Type
      ThinPoolName      thin-pool
      ThinVolumeName    thin

関連情報

  • lvs(8)lvcreate(8) man ページ

4.2.5. VDO 論理ボリュームの作成

VDO 論理ボリューム (LV) では、ストレージ効率を向上させる Virtual Data Optimizer (VDO) テクノロジーを使用します。VDO LV には、仮想サイズと物理サイズの両方があります。仮想サイズは、ユーザーとアプリケーションに提供されるストレージの合計量を指します。物理サイズは、VG から割り当てられ、VDO プールによって消費される物理ストレージの実際の量です。

VDO LV の仮想サイズは、通常 VDO プールの物理サイズよりも大きいため、オーバープロビジョニングが発生します。そのため、VDO プール内の物理領域を厳重に監視し、必要に応じて拡張する必要があります。

VDO LV と VDO プールは、ペアとして作成され、常にペアとして存在します。

前提条件

  • 管理アクセスがある。

手順

  1. ボリュームグループの名前とサイズをリスト表示します。

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. VDO LV を作成します。

    # lvcreate --type vdo --virtualsize VolumeSize --size PhysicalPoolSize --name VDOVolumeName --vdopool VDOPoolName VolumeGroupName

    VolumeSize は、ボリュームのサイズに置き換えます。PhysicalPoolSize は、プールのサイズに置き換えます。VDOVolumeName は、VDO ボリュームの名前に置き換えます。VDOPoolName は、VDO プールの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。

検証

  • VDO LV が作成されたことを確認します。

    # lvs -o name,seg_type,size
    
      LV            Type     LSize
      VDOPoolName   vdo-pool   5.00g
      VDOVolumeName vdo        5.00g

関連情報

  • vgs(8)lvs(8)lvcreate(8) man ページ

4.3. 論理ボリュームのサイズ変更

論理ボリュームマネージャー (LVM) を使用すると、論理ボリューム (LV) に保存されているデータに影響を与えることなく、必要に応じて LV のサイズを変更できます。

4.3.1. リニア論理ボリュームの拡張

lvextend コマンドを使用して、リニア (シック) LV とそのスナップショットを拡張できます。

前提条件

  • 管理アクセスがある。

手順

  1. ボリュームグループに、LV を拡張するのに十分な容量があることを確認します。

    # lvs -o lv_name,lv_size,vg_name,vg_size,vg_free
      LV                   LSize   VG              VSize  VFree
      LogicalVolumeName    1.49g   VolumeGroupName 30.75g 29.11g
  2. リニア LV を拡張し、ファイルシステムのサイズを変更します。

    # lvextend --size +AdditionalSize --resizefs VolumeGroupName/LogicalVolumeName

    AdditionalSize は、LV に追加する容量に置き換えます。デフォルトの測定単位はメガバイトですが、他の単位を指定することもできます。VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、シンボリュームの名前に置き換えます。

検証

  • リニア LV が拡張されたことを確認します。

    # lvs -o lv_name,lv_size
      LV                   LSize
      NewLogicalVolumeName 6.49g

4.3.2. シン論理ボリュームの拡張

lvextend コマンドを使用して、シン論理ボリューム (LV) を拡張できます。

前提条件

  • 管理アクセスがある。

手順

  1. 追加する予定のデータに対して、シンプールに十分な容量があることを確認します。

    # lvs -o lv_name,lv_size,data_percent
    
      LV                LSize   Data%
      MyThinPool        20.10g  3.21
      ThinVolumeName     1.10g  4.88
  2. シン LV を拡張し、ファイルシステムのサイズを変更します。

    # lvextend --size +AdditionalSize --resizefs VolumeGroupName/ThinVolumeName

    AdditionalSize は、LV に追加する容量に置き換えます。デフォルトの測定単位はメガバイトですが、他の単位を指定することもできます。VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinVolumeName は、シンボリュームの名前に置き換えます。

検証

  • シン LV が拡張されたことを確認します。

    # lvs -o lv_name,lv_size,data_percent
    
      LV                LSize   Data%
      MyThinPool        20.10g  3.21
      ThinVolumeName     6.10g  0.43

4.3.3. シンプールの拡張

シン論理ボリュームの仮想サイズがシンプールの物理容量を超え、オーバープロビジョニングが発生する可能性があります。容量不足を防ぐために、シンプールの容量を監視し、定期的に拡張する必要があります。

data_percent メトリクスは、シンプールが現在使用している割り当て済みのデータ領域の割合を示します。metadata_percent メトリクスは、シンプール内のマッピングを管理するために不可欠なメタデータの保存に使用される領域の割合を示します。

効率的なストレージ管理を実現し、容量の問題を回避するには、これらのメトリクスを監視することが不可欠です。

LVM には、必要に応じてデータまたはメタデータの容量を手動で拡張するオプションが用意されています。または、監視を有効にして、シンプールの拡張を自動化することもできます。

4.3.3.1. シンプールの手動拡張

論理ボリュームマネージャー (LVM) には、データセグメント、メタデータセグメント、またはシンプールを手動で拡張するオプションが用意されています。

4.3.3.1.1. シンプールの拡張

lvextend コマンドを使用してシンプールを拡張できます。

前提条件

  • 管理アクセスがある。

手順

  1. データとメタデータの使用中の領域を表示します。

    # lvs -o lv_name,seg_type,data_percent,metadata_percent
    
      LV                Type      Data%  Meta%
      ThinPoolName      thin-pool 97.66  26.86
      ThinVolumeName    thin      48.80
  2. シンプールを拡張します。

    # lvextend -L Size VolumeGroupName/ThinPoolName

    Size は、シンプールの新しいサイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinPoolName は、シンプールの名前に置き換えます。

    データサイズが拡張されます。必要に応じてメタデータのサイズが拡張されます。

検証

  • シンプールが拡張されたことを確認します。

    # lvs -o lv_name,seg_type,data_percent,metadata_percent
    
      LV                Type      Data%  Meta%
      ThinPoolName      thin-pool 24.41  16.93
      ThinVolumeName    thin      24.41

関連情報

  • lvs(8)lvextend(8) man ページ
  • lvs -o help
4.3.3.1.2. シンプールのデータセグメントの拡張

lvextend コマンドを使用して、data_percent セグメントを拡張できます。

前提条件

  • 管理アクセスがある。

手順

  1. data_percent セグメントを表示します。

    # lvs -o lv_name,seg_type,data_percent
    
      LV                Type      Data%
      ThinPoolName      thin-pool 93.87
  2. data_percent セグメントを拡張します。

    # lvextend -L Size VolumeGroupName/ThinPoolName_tdata

    Size は、データセグメントのサイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinPoolName は、シンプールの名前に置き換えます。

検証

  • data_percent セグメントが拡張されたことを確認します。

    # lvs -o lv_name,seg_type,data_percent
    
      LV                Type      Data%
      ThinPoolName      thin-pool 40.23

関連情報

  • lvs(8)lvextend(8) man ページ
  • lvs -o help
4.3.3.1.3. シンプールのメタデータセグメントの拡張

lvextend コマンドを使用して、metadata_percent セグメントを拡張できます。

前提条件

  • 管理アクセスがある。

手順

  1. metadata_percent セグメントを表示します。

    # lvs -o lv_name,seg_type,metadata_percent
    
      LV                Type      Meta%
      ThinPoolName      thin-pool 75.00
  2. metadata_percent セグメントを拡張します。

    # lvextend -L Size VolumeGroupName/ThinPoolName_tmeta

    Size は、メタデータセグメントのサイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinPoolName は、シンプールの名前に置き換えます。

検証

  • metadata_percent セグメントが拡張されたことを確認します。

    # lvs -o lv_name,seg_type,metadata_percent
    
      LV                Type      Meta%
      ThinPoolName      thin-pool 0.19

関連情報

  • lvs(8)lvextend(8) man ページ
  • lvs -o help
4.3.3.2. シンプールの自動拡張

監視を有効にして、thin_pool_autoextend_threshold および thin_pool_autoextend_percent 設定パラメーターを設定することで、シンプールの拡張を自動化できます。

前提条件

  • 管理アクセスがある。

手順

  1. シンプールが監視されているかどうかを確認します。

    # lvs -o lv_name,vg_name,seg_monitor
    
      LV                VG              Monitor
      ThinPoolName      VolumeGroupName not monitored
  2. dmeventd デーモンを使用してシンプールの監視を有効にします。

    # lvchange --monitor y VolumeGroupName/ThinPoolName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinPoolName は、シンプールの名前に置き換えます。

  3. root ユーザーとして、任意のエディターで /etc/lvm/lvm.conf ファイルを開きます。
  4. thin_pool_autoextend_threshold 行と thin_pool_autoextend_percent 行のコメントを解除し、各パラメーターを必要な値に設定します。

    thin_pool_autoextend_threshold = 70
    thin_pool_autoextend_percent = 20

    thin_pool_autoextend_threshold は、LVM がシンプールの自動拡張を開始するパーセンテージを指定します。たとえば、これを 70 に設定すると、容量の 70% に達したときに LVM がシンプールの拡張を試みます。

    thin_pool_autoextend_percent は、しきい値に達したときにシンプールを何パーセント拡張するかを指定します。たとえば、これを 20 に設定すると、シンプールのサイズが現在のサイズの 20% 増加します。

  5. 変更を保存し、エディターを終了します。
  6. lvm2-monitor を再起動します。

    # systemctl restart lvm2-monitor

関連情報

  • lvs(8)lvchange(8)dmeventd(8) man ページ

4.3.4. VDO プールの拡張

容量不足を防ぐために、VDO プールの容量を監視し、定期的に拡張することが重要です。

論理ボリュームマネージャー (LVM) には、必要に応じて VDO プールの容量を手動で拡張するオプションが用意されています。または、監視を有効にして、VDO プールの拡張を自動化することもできます。

4.3.4.1. VDO プールの手動拡張

lvextend コマンドを使用して VDO プールを拡張します。

前提条件

  • 管理アクセスがある。

手順

  1. 現在の VDO の使用率を表示します。

    # lvs -o lv_name,vg_name,lv_size,data_percent VolumeGroupName/VDOPoolName
    
      LV          VG              LSize Data%
      VDOPoolName VolumeGroupName 5.00g 60.03

    VolumeGroupName は、ボリュームグループの名前に置き換えます。VDOPoolName は、VDO プールの名前に置き換えます。

  2. VDO プールを拡張します。

    # lvextend --size PhysicalSize VolumeGroupName/VDOPoolName

    PhysicalSize は、新しい物理サイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。VDOPoolName は、VDO プールの名前に置き換えます。

検証

  1. VDO プールが拡張されたことを確認します。

    # lvs -o lv_name,vg_name,lv_size,data_percent VolumeGroupName/VDOPoolName
    
      LV          VG              LSize  Data%
      VDOPoolName VolumeGroupName 10.00g 30.02

関連情報

  • lvs(8)lvextend(8) man ページ
4.3.4.2. VDO プールの自動拡張

監視を有効にして、vdo_pool_autoextend_threshold および vdo_pool_autoextend_percent パラメーターを設定することで、Virtual Data Optimizer (VDO) プールの拡張を自動化できます。

前提条件

  • 管理アクセスがある。

手順

  1. VDO プールが監視されているかどうかを確認します。

    # lvs -o name,seg_monitor VolumeGroupName/VDOPoolName
    
      LV                VG              Monitor
      VDOPoolName       VolumeGroupName not monitored

    VolumeGroupName は、ボリュームグループの名前に置き換えます。VDOPoolName は、VDO プールの名前に置き換えます。

  2. dmeventd デーモンを使用して VDO プールの監視を有効にします。

    # lvchange --monitor y VolumeGroupName/VDOPoolName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。VDOPoolName は、VDO プールの名前に置き換えます。

  3. root ユーザーとして、任意のエディターで /etc/lvm/lvm.conf ファイルを開きます。
  4. vdo_pool_autoextend_percent 行と vdo_pool_autoextend_threshold 行のコメントを解除し、各パラメーターを必要な値に設定します。

    vdo_pool_autoextend_threshold = 70
    vdo_pool_autoextend_percent = 20

    vdo_pool_autoextend_threshold は、LVM が VDO プールの自動拡張を開始するパーセンテージを指定します。たとえば、これを 70 に設定すると、容量の 70% に達したときに LVM が VDO プールの拡張を試みます。

    vdo_pool_autoextend_percent は、しきい値に達したときに VDO プールを何パーセント拡張するかを指定します。たとえば、これを 20 に設定すると、VDO プールが現在のサイズの 20% 増加します。

  5. 変更を保存し、エディターを終了します。
  6. lvm2-monitor を再起動します。

    # systemctl restart lvm2-monitor

関連情報

  • lvs(8)lvchange(8)dmeventd(8) man ページ

4.3.5. 論理ボリュームの縮小

LV のサイズを縮小すると、解放された論理エクステントがボリュームグループに戻され、他の LV で使用できるようになります。

警告

縮小される領域に保存されているデータが失われます。続行する前に必ずデータをバックアップし、ファイルシステムのサイズを変更してください。

前提条件

  • 管理アクセスがある。

手順

  1. 論理ボリュームとそのボリュームグループをリスト表示します。

    # lvs -o lv_name,vg_name,lv_size
    
      LV                   VG              LSize
      LogicalVolumeName    VolumeGroupName 6.49g
  2. 論理ボリュームがマウントされている場所を確認します。

    # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
    
    SOURCE                                           TARGET
    /dev/mapper/VolumeGroupName-NewLogicalVolumeName /MountPoint

    /dev/VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。

  3. 論理ボリュームをアンマウントします。

    # umount /MountPoint

    /MountPoint は、論理ボリュームのマウントポイントに置き換えます。

  4. ファイルシステムエラーをチェックして修復します。

    # e2fsck -f /dev/VolumeGroupName/LogicalVolumeName
  5. LV とファイルシステムのサイズを変更します。

    # lvreduce --size TargetSize --resizefs VolumeGroupName/LogicalVolumeName

    TargetSize は、LV の新しいサイズに置き換えます。VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。

  6. ファイルシステムを再マウントします。

    # mount -o remount /MountPoint

    /MountPoint は、ファイルシステムのマウントポイントに置き換えます。

検証

  1. ファイルシステムの領域使用率を確認します。

    # df -hT /MountPoint/
    
    Filesystem                                       Type  Size  Used Avail Use% Mounted on
    /dev/mapper/VolumeGroupName-NewLogicalVolumeName ext4  2.9G  139K  2.7G   1% /MountPoint

    /MountPoint は、論理ボリュームのマウントポイントに置き換えます。

  2. LV のサイズを確認します。

    # lvs -o lv_name,lv_size
    
      LV                   LSize
      NewLogicalVolumeName 4.00g

4.4. 論理ボリュームの名前変更

lvrename コマンドを使用して、スナップショットを含む既存の論理ボリュームの名前を変更できます。

前提条件

  • 管理アクセスがある。

手順

  1. 論理ボリュームとそのボリュームグループをリスト表示します。

    # lvs -o lv_name,vg_name
    
      LV                VG
      LogicalVolumeName VolumeGroupName
  2. 論理ボリュームの名前を変更します。

    # lvrename VolumeGroupName/LogicalVolumeName VolumeGroupName/NewLogicalVolumeName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。NewLogicalVolumeName は、新しい論理ボリューム名に置き換えます。

検証

  • 論理ボリュームの名前が変更されたことを確認します。

    # lvs -o lv_name
      LV
      NewLogicalVolumeName

関連情報

  • システム上の lvrename(8) man ページ

4.5. 論理ボリュームの削除

lvremove コマンドを使用して、スナップショットを含む既存の論理ボリュームを削除できます。

前提条件

  • 管理アクセスがある。

手順

  1. 論理ボリュームとそのパスをリスト表示します。

    # lvs -o lv_name,lv_path
    
      LV                Path
      LogicalVolumeName /dev/VolumeGroupName/LogicalVolumeName
  2. 論理ボリュームがマウントされている場所を確認します。

    # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
    
    SOURCE                                        TARGET
    /dev/mapper/VolumeGroupName-LogicalVolumeName /MountPoint

    /dev/VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。

  3. 論理ボリュームをアンマウントします。

    # umount /MountPoint

    /MountPoint は、論理ボリュームのマウントポイントに置き換えます。

  4. 論理ボリュームを削除します。

    # lvremove VolumeGroupName/LogicalVolumeName

    VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。

関連情報

  • システム上の lvs(8)lvremove(8) man ページ

4.6. 論理ボリュームのアクティブ化

lvchange コマンドを使用して論理ボリュームをアクティブ化できます。

前提条件

  • 管理アクセスがある。

手順

  1. 論理ボリューム、そのボリュームグループ、およびパスをリスト表示します。

    # lvs -o lv_name,vg_name,lv_path
    
      LV                VG              Path
      LogicalVolumeName VolumeGroupName VolumeGroupName/LogicalVolumeName
  2. 論理ボリュームをアクティブ化します。

    # lvchange --activate y VolumeGroupName/LogicalVolumeName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

    注記

    別の LV のスナップショットとして作成されたシン LV をアクティブ化する場合は、--ignoreactivationskip オプションを使用してアクティブ化する必要がある場合があります。

検証

  • LV がアクティブであることを確認します。

    # lvdisplay VolumeGroupName/LogicalVolumeName
    
      ...
      LV Status              available

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

関連情報

  • lvs(8) lvchange(8)lvdisplay(8) man ページ

4.7. 論理ボリュームの非アクティブ化

デフォルトでは、論理ボリュームを作成すると、アクティブ状態になります。lvchange コマンドを使用して論理ボリュームを非アクティブ化できます。

警告

アクティブなマウントがある論理ボリュームや使用中の論理ボリュームを非アクティブ化すると、データの不整合やシステムエラーが発生する可能性があります。

前提条件

  • 管理アクセスがある。

手順

  1. 論理ボリューム、そのボリュームグループ、およびパスをリスト表示します。

    # lvs -o lv_name,vg_name,lv_path
    
      LV                VG              Path
      LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName
  2. 論理ボリュームがマウントされている場所を確認します。

    # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
    
    SOURCE                                        TARGET
    /dev/mapper/VolumeGroupName-LogicalVolumeName /MountPoint

    /dev/VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。

  3. 論理ボリュームをアンマウントします。

    # umount /MountPoint

    /MountPoint は、論理ボリュームのマウントポイントに置き換えます。

  4. 論理ボリュームを非アクティブにします。

    # lvchange --activate n VolumeGroupName/LogicalVolumeName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

検証

  • LV がアクティブでないことを確認します。

    # lvdisplay VolumeGroupName/LogicalVolumeName
    
      ...
      LV Status              NOT available

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

関連情報

  • lvs(8) lvchange(8)lvdisplay(8) man ページ

第5章 高度な論理ボリューム管理

LVM には次のような高度な機能があります。

  • スナップショット。スナップショットは論理ボリューム (LV) の特定時点のコピーです。
  • キャッシュ。使用すると、高速なストレージを低速なストレージのキャッシュとして利用できるようになります。
  • カスタムシンプールの作成
  • カスタム VDO LV の作成

5.1. 論理ボリュームのスナップショットの管理

スナップショットは、特定時点における別の LV の内容をミラーリングする論理ボリューム (LV) です。

5.1.1. 論理ボリュームスナップショットにてういて

スナップショットを作成すると、特定時点における別の LV のコピーとして機能する新しい LV が作成されます。スナップショット LV は、最初は実際のデータを含んでいません。代わりに、スナップショット作成時における元の LV のデータブロックを参照します。

警告

スナップショットのストレージ使用率を定期的に監視することが重要です。スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。

スナップショットが完全にいっぱいになる前に拡張することが重要です。これは、lvextend コマンドを使用して手動で行うことも、/etc/lvm/lvm.conf ファイルを使用して自動的に行うこともできます。

シック LV スナップショット
元の LV のデータが変更されると、コピーオンライト (CoW) システムによって、変更前の元のデータがスナップショットにコピーされます。この方法では、変更が発生した場合にのみスナップショットのサイズが増加し、スナップショット作成時における元のボリュームの状態が保存されます。シックスナップショットは、事前に一定量のストレージ領域を割り当てる必要がある LV の一種です。この量は後で増減できますが、元の LV にどのような変更を加える予定かを検討してください。そうすることで、割り当てる領域が多すぎるためにリソースが無駄になったり、割り当てる領域が少なすぎるためにスナップショットのサイズを頻繁に増やす必要が生じたりすることがなくなります。
シン LV スナップショット

シンスナップショットは、既存のシンプロビジョニングされた LV から作成される LV の一種です。シンスナップショットでは、事前に追加の領域を割り当てる必要はありません。最初は、元の LV とそのスナップショットの両方が同じデータブロックを共有します。元の LV に変更が加えられると、新しいデータが別のブロックに書き込まれますが、スナップショットは元のブロックを参照し続け、スナップショット作成時における LV データの特定時点のビューが保持されます。

シンプロビジョニングは、必要に応じてディスク領域を割り当てることで、ストレージを効率的に最適化および管理する方法です。そのため、各 LV に事前に大量のストレージを割り当てる必要がなく、複数の LV を作成できます。ストレージがシンプール内のすべての LV で共有されるため、リソースをより効率的に使用できます。シンプールは、必要に応じて LV に領域を割り当てます。

シック LV スナップショットとシン LV スナップショットの選択
シック LV スナップショットとシン LV スナップショットの選択は、スナップショットの作成元とする LV のタイプによって直接決まります。元の LV がシック LV である場合、スナップショットもシックになります。元の LV がシン LV の場合は、スナップショットもシンになります。

5.1.2. シック論理ボリュームスナップショットの管理

シック LV スナップショットを作成するときは、ストレージ要件とスナップショットの想定される有効期間を考慮することが重要です。元のボリュームに予想される変更に基づいて、十分なストレージを割り当てる必要があります。スナップショットは、想定される有効期間中の変更を取り込むのに十分なサイズである必要がありますが、元の LV のサイズを超えることはできません。変更頻度が低いと予想される場合は、10% - 15% の小さいスナップショットサイズで十分な場合があります。変更頻度が高い LV の場合は、30% 以上を割り当てる必要がある場合があります。

重要

スナップショットが完全にいっぱいになる前に拡張することが重要です。スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。lvs -o lv_name,data_percent,origin コマンドを使用すると、スナップショットの容量を監視できます。

5.1.2.1. シック論理ボリュームスナップショットの作成

lvcreate コマンドを使用して、シック LV スナップショットを作成できます。

前提条件

手順

  1. スナップショットを作成する LV を特定します。

    # lvs -o vg_name,lv_name,lv_size
    
      VG              LV                LSize
      VolumeGroupName LogicalVolumeName 10.00g

    スナップショットのサイズは LV のサイズを超えることはできません。

  2. シック LV スナップショットを作成します。

    # lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeName

    SnapshotSize は、スナップショットに割り当てるサイズ (例: 10 G) に置き換えます。SnapshotName は、スナップショット論理ボリュームに付ける名前に置き換えます。VolumeGroupName は、元の論理ボリュームを含むボリュームグループの名前に置き換えます。LogicalVolumeName は、スナップショットの作成元とする論理ボリュームの名前に置き換えます。

検証

  • スナップショットが作成されたことを確認します。

    # lvs -o lv_name,origin
    
      LV                  Origin
      LogicalVolumeName
      SnapshotName        LogicalVolumeName

関連情報

  • lvcreate(8) および lvs(8) man ページ
5.1.2.2. 論理ボリュームスナップショットの手動拡張

スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。スナップショットが完全にいっぱいになる前に拡張することが重要です。これは、lvextend コマンドを使用して手動で実行できます。

前提条件

  • 管理アクセスがある。

手順

  1. ボリュームグループ、論理ボリューム、スナップショットのソースボリュームの名前、使用率、およびサイズをリスト表示します。

    # lvs -o vg_name,lv_name,origin,data_percent,lv_size
      VG              LV                Origin            Data%  LSize
      VolumeGroupName LogicalVolumeName                          10.00g
      VolumeGroupName SnapshotName      LogicalVolumeName 82.00   5.00g
  2. シックプロビジョニングされたスナップショットを拡張します。

    # lvextend --size +AdditionalSize VolumeGroupName/SnapshotName

    AdditionalSize は、スナップショットに追加する容量 (例: +1G) に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。SnapshotName は、スナップショットの名前に置き換えます。

検証

  • LV が拡張されたことを確認します。

    # lvs -o vg_name,lv_name,origin,data_percent,lv_size
      VG              LV                Origin            Data%  LSize
      VolumeGroupName LogicalVolumeName                          10.00g
      VolumeGroupName SnapshotName      LogicalVolumeName 68.33   6.00g
5.1.2.3. シック論理ボリュームスナップショットの自動拡張

スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。スナップショットが完全にいっぱいになる前に拡張することが重要です。これは自動的に実行できます。

前提条件

  • 管理アクセスがある。

手順

  1. root ユーザーとして、任意のエディターで /etc/lvm/lvm.conf ファイルを開きます。
  2. snapshot_autoextend_threshold 行と snapshot_autoextend_percent 行のコメントを解除し、各パラメーターを必要な値に設定します。

    snapshot_autoextend_threshold = 70
    snapshot_autoextend_percent = 20

    snapshot_autoextend_threshold は、LVM がスナップショットの自動拡張を開始するパーセンテージを指定します。たとえば、このパラメーターを 70 に設定すると、容量の 70% に達したときに LVM がスナップショットの拡張を試みます。

    snapshot_autoextend_percent は、しきい値に達したときにスナップショットを何パーセント拡張するかを指定します。たとえば、パラメーターを 20 に設定すると、スナップショットが現在のサイズの 20% 増加します。

  3. 変更を保存し、エディターを終了します。
  4. lvm2-monitor を再起動します。

    # systemctl restart lvm2-monitor
5.1.2.4. シック論理ボリュームのスナップショットのマージ

シック LV スナップショットを、スナップショットの作成元となった元の論理ボリュームにマージできます。マージプロセスでは、元の LV がスナップショット作成時点の状態に戻されます。マージが完了すると、スナップショットは削除されます。

注記

元の LV とスナップショット LV 間のマージは、どちらかがアクティブな場合、延期されます。両方の LV が再アクティブ化され、使用されていない場合にのみ続行されます。

前提条件

  • 管理アクセスがある。

手順

  1. LV、そのボリュームグループ、およびそのパスをリスト表示します。

    # lvs -o lv_name,vg_name,lv_path
    
      LV                   VG              Path
      LogicalVolumeName    VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName
      SnapshotName         VolumeGroupName /dev/VolumeGroupName/SnapshotName
  2. LV がマウントされている場所を確認します。

    # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
    # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotName

    /dev/VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。/dev/VolumeGroupName/SnapshotName は、スナップショットへのパスに置き換えます。

  3. LV をアンマウントします。

    # umount /LogicalVolume/MountPoint
    # umount /Snapshot/MountPoint

    /LogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。/Snapshot/MountPoint は、スナップショットのマウントポイントに置き換えます。

  4. LV を非アクティブ化します。

    # lvchange --activate n VolumeGroupName/LogicalVolumeName
    # lvchange --activate n VolumeGroupName/SnapshotName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。SnapshotName は、スナップショットの名前に置き換えます。

  5. シック LV スナップショットを元の LV にマージします。

    # lvconvert --merge SnapshotName

    SnapshotName は、スナップショットの名前に置き換えます。

  6. LV をアクティブ化します。

    # lvchange --activate y VolumeGroupName/LogicalVolumeName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

  7. LV をマウントします。

    # umount /LogicalVolume/MountPoint

    /LogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。

検証

  • スナップショットが削除されたことを確認します。

    # lvs -o lv_name

関連情報

  • lvconvert(8)lvs(8) man ページ

5.1.3. シン論理ボリュームスナップショットの管理

ストレージ効率を優先する場合は、シンプロビジョニングが適しています。ストレージ領域の動的割り当てにより、初期のストレージコストが削減され、利用可能なストレージリソースが最大限に使用されます。動的なワークロードがある環境や、時間の経過とともにストレージが増加する環境では、シンプロビジョニングによって柔軟性が向上します。これにより、ストレージ領域を事前に大量に割り当てることなく、ストレージシステムをニーズの変化に適応させることができます。動的な割り当てにより、オーバープロビジョニングが可能になります。つまり、すべての LV の合計サイズが、シンプールの物理サイズを超えることがあります。これは、すべての領域が同時に使用されるわけではないということを前提にしているためです。

5.1.3.1. シン論理ボリュームスナップショットの作成

lvcreate コマンドを使用して、シン LV スナップショットを作成できます。シン LV スナップショットを作成するときは、スナップショットサイズを指定しないでください。サイズのパラメーターを含めると、代わりにシックスナップショットが作成されます。

前提条件

手順

  1. スナップショットを作成する LV を特定します。

    # lvs -o lv_name,vg_name,pool_lv,lv_size
    
      LV                VG              Pool       LSize
      PoolName          VolumeGroupName            152.00m
      ThinVolumeName    VolumeGroupName PoolName   100.00m
  2. シン LV スナップショットを作成します。

    # lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeName

    SnapshotName は、スナップショット論理ボリュームに付ける名前に置き換えます。VolumeGroupName は、元の論理ボリュームを含むボリュームグループの名前に置き換えます。ThinVolumeName は、スナップショットの作成元とするシン論理ボリュームの名前に置き換えます。

検証

  • スナップショットが作成されたことを確認します。

    # lvs -o lv_name,origin
    
      LV                Origin
      PoolName
      SnapshotName      ThinVolumeName
      ThinVolumeName

関連情報

  • lvcreate(8) および lvs(8) man ページ
5.1.3.2. シン論理ボリュームスナップショットのマージ

シン LV スナップショットを、スナップショットの作成元となった元の論理ボリュームにマージできます。マージプロセスでは、元の LV がスナップショット作成時点の状態に戻されます。マージが完了すると、スナップショットは削除されます。

前提条件

  • 管理アクセスがある。

手順

  1. LV、そのボリュームグループ、およびそのパスをリスト表示します。

    # lvs -o lv_name,vg_name,lv_path
    
      LV                VG              Path
      ThinPoolName      VolumeGroupName
      ThinSnapshotName  VolumeGroupName /dev/VolumeGroupName/ThinSnapshotName
      ThinVolumeName    VolumeGroupName /dev/VolumeGroupName/ThinVolumeName
  2. 元の LV がマウントされている場所を確認します。

    # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeName

    VolumeGroupName/ThinVolumeName は、論理ボリュームへのパスに置き換えます。

  3. LV をアンマウントします。

    # umount /ThinLogicalVolume/MountPoint

    /ThinLogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。/ThinSnapshot/MountPoint は、スナップショットのマウントポイントに置き換えます。

  4. LV を非アクティブ化します。

    # lvchange --activate n VolumeGroupName/ThinLogicalVolumeName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinLogicalVolumeName は、論理ボリュームの名前に置き換えます。

  5. シン LV スナップショットを元の LV にマージします。

    # lvconvert --mergethin VolumeGroupName/ThinSnapshotName

    VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinSnapshotName は、スナップショットの名前に置き換えます。

  6. LV をマウントします。

    # umount /ThinLogicalVolume/MountPoint

    /ThinLogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。

検証

  • 元の LV がマージされたことを確認します。

    # lvs -o lv_name

関連情報

  • lvremove(8)lvs(8) man ページ

5.2. 論理ボリュームのキャッシュ

dm-cache または dm-writecache ターゲットを使用して論理ボリュームをキャッシュできます。

dm-cache は、高速なストレージデバイス (SSD) を、低速なストレージデバイス (HDD) のキャッシュとして利用します。読み取りおよび書き込みデータをキャッシュし、頻繁に使用されるデータへのアクセス時間を最適化します。読み取り操作と書き込み操作を強化することでパフォーマンスが大幅に向上する混合ワークロード環境で役立ちます。

dm-writecache は、書き込みデータがプライマリーストレージデバイス (HDD) にコミットされる前に、高速なストレージメディア (SSD) を使用して一時的に書き込みデータを保持することで、書き込み操作を最適化します。書き込みのパフォーマンスによってデータ転送プロセスが遅くなる可能性がある、書き込みが多いアプリケーションに役立ちます。

5.2.1. dm-cache による論理ボリュームのキャッシュ

dm-cache を使用して LV をキャッシュすると、キャッシュプールが作成されます。キャッシュプールは、キャッシュされた実際の内容を保存するキャッシュデータと、キャッシュに保存された内容を追跡するキャッシュメタデータを組み合わせた LV です。このプールは、データをキャッシュするために特定の LV に関連付けられます。

dm-cache は、2 種類のブロックを対象とします。頻繁にアクセスされる (ホット) ブロックは、キャッシュに移動されます。あまり頻繁にアクセスされない (コールド) ブロックは、低速のデバイスに残ります。

前提条件

  • 管理アクセスがある。

手順

  1. キャッシュする LV とそのボリュームグループを表示します。

    # lvs -o lv_name,vg_name
      LV                   VG
      LogicalVolumeName    VolumeGroupName
  2. キャッシュプールを作成します。

    # lvcreate --type cache-pool --name CachePoolName --size Size VolumeGroupName /FastDevicePath

    CachePoolName は、キャッシュプールの名前に置き換えます。Size は、キャッシュプールのサイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。/FastDevicePath は、SSD や NVME などの高速デバイスへのパスに置き換えます。

  3. キャッシュプールを LV にアタッチします。

    # lvconvert --type cache --cachepool VolumeGroupName/CachePoolName VolumeGroupName/LogicalVolumeName

検証

  • LV がキャッシュされたことを確認します。

    # lvs -o lv_name,pool_lv
    
      LV                   Pool
      LogicalVolumeName    [CachePoolName_cpool]

関連情報

  • lvcreate(8)lvconvert(8)lvs(8) man ページ

5.2.2. dm-writecache による論理ボリュームのキャッシュ

dm-writecache を使用して LV をキャッシュすると、論理ボリュームと物理ストレージデバイスの間にキャッシュレイヤーが作成されます。dm-writecache は、書き込み操作を SSD などの高速ストレージメディアに一時的に保存し、最終的にプライマリーストレージデバイスに書き戻すことで、書き込み集中型のワークロードを最適化します。

前提条件

  • 管理アクセスがある。

手順

  1. キャッシュする論理ボリュームとそのボリュームグループを表示します。

    # lvs -o lv_name,vg_name
      LV                   VG
      LogicalVolumeName    VolumeGroupName
  2. キャッシュボリュームを作成します。

    # lvcreate --name CacheVolumeName --size Size VolumeGroupName /FastDevicePath

    CacheVolumeName は、キャッシュボリュームの名前に置き換えます。Size は、キャッシュプールのサイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。/FastDevicePath は、SSD や NVME などの高速デバイスへのパスに置き換えます。

  3. キャッシュボリュームを LV にアタッチします。

    # lvconvert --type writecache --cachevol CacheVolumeName VolumeGroupName/LogicalVolumeName

    CacheVolumeName は、キャッシュボリュームの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

検証

  • LV がキャッシュされたことを確認します。

    # lvs -o lv_name,pool_lv
    
      LV                   Pool
      LogicalVolumeName    [CacheVolumeName_cvol]

関連情報

  • lvcreate(8)lvconvert(8)lvs(8) man ページ

5.2.3. 論理ボリュームのキャッシュ削除

LV からキャッシュを削除するには、主に 2 つの方法を使用します。

分割
キャッシュボリューム自体を保持しながら、キャッシュを LV からデタッチできます。この場合、LV はキャッシュメカニズムの恩恵を受けられなくなりますが、キャッシュボリュームとそのデータはそのまま残ります。キャッシュボリュームは保持されますが、キャッシュ内のデータは再利用できず、次回キャッシュ設定で使用されるときに消去されます。
キャッシュ削除
キャッシュを LV からデタッチし、さらにキャッシュボリュームを完全に削除できます。この操作により、キャッシュが効果的に破棄され、領域が解放されます。

前提条件

  • 管理アクセスがある。

手順

  1. キャッシュされた LV を表示します。

    # lvs -o lv_name,pool_lv,vg_name
    
      LV                   Pool                   VG
      LogicalVolumeName    [CacheVolumeName_cvol] VolumeGroupName
  2. キャッシュされたボリュームをデタッチまたは削除します。

    • キャッシュされたボリュームをデタッチするには、次のコマンドを使用します。

      # lvconvert --splitcache VolumeGroupName/LogicalVolumeName
    • キャッシュされたボリュームをデタッチして削除するには、次のコマンドを使用します。

      # lvconvert --uncache VolumeGroupName/LogicalVolumeName

      VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。

検証

  • LV がキャッシュされていないことを確認します。

    # lvs -o lv_name,pool_lv

関連情報

  • lvconvert(8)lvs(8) man ページ

5.3. カスタムシンプールの作成

ストレージをより適切に制御するために、カスタムシンプールを作成できます。

前提条件

  • 管理アクセスがある。

手順

  1. 利用可能なボリュームグループを表示します。

    # vgs -o vg_name
    
      VG
      VolumeGroupName
  2. 利用可能なデバイスをリスト表示します。

    # lsblk
  3. シンプールのデータを保持する LV を作成します。

    # lvcreate --name ThinPoolDataName --size Size VolumeGroupName /DevicePath

    ThinPoolDataName は、シンプールデータ用の LV の名前に置き換えます。Size は、LV のサイズに置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。

  4. シンプールのメタデータを保持する LV を作成します。

    # lvcreate --name ThinPoolMetadataName --size Size VolumeGroupName /DevicePath
  5. LV をシンプールにマージします。

    # lvconvert --type thin-pool --poolmetadata ThinPoolMetadataName VolumeGroupName/ThinPoolDataName

検証

  1. カスタムシンプールが作成されたことを確認します。

    # lvs -o lv_name,seg_type
    
      LV                Type
      ThinPoolDataName  thin-pool

関連情報

  • vgs(8) lvs(8)lvcreate(8) man ページ

5.4. カスタム VDO 論理ボリュームの作成

論理ボリュームマネージャー (LVM) を使用すると、データストレージに Virtual Data Optimizer (VDO) プールを使用するカスタム LV を作成できます。

前提条件

  • 管理アクセスがある。

手順

  1. VG を表示します。

    # vgs
    
      VG               #PV #LV #SN Attr   VSize   VFree
      VolumeGroupName   1   0   0 wz--n-  28.87g 28.87g
  2. VDO プールに変換する LV を作成します。

    # lvcreate --name VDOPoolName --size Size VolumeGroupName

    VDOPoolName は、VDO プールの名前に置き換えます。Size は、VDO プールのサイズに置き換えます。VolumeGroupName は、VG の名前に置き換えます。

  3. この LV を VDO プールに変換します。この変換により、VDO プールを使用する新しい VDO LV を作成します。lvcreate によって新しい VDO LV が作成されるため、新しい VDO LV のパラメーターを指定する必要があります。--name|-n を使用して新しい VDO LV の名前を指定し、--virtualsize|-V を使用して新しい VDO LV のサイズを指定します。

    # lvconvert --type vdo-pool --name VDOVolumeName --virtualsize VDOVolumeSize VolumeGroupName/VDOPoolName

    VDOVolumeName は、VDO ボリュームの名前に置き換えます。VDOVolumeSize は、VDO ボリュームのサイズに置き換えます。VolumeGroupName/VDOPoolName は、VG と VDO プールの名前に置き換えます。

検証

  1. LV が VDO プールに変換されたことを確認します。

    *# lvs -o lv_name,vg_name,seg_type*
    
      LV                     VG              Type
      VDOPoolName            VolumeGroupName vdo-pool
      VDOVolumeName          VolumeGroupName vdo

関連情報

  • vgs(8)lvs(8)lvconvert(8) man ページ

第6章 LVM レポートのカスタマイズ

LVM は、カスタマイズしたレポートを生成するための幅広い設定オプションとコマンドラインオプションを備えています。出力のソート、単位の指定、選択基準の使用、および lvm.conf ファイルの更新を行って LVM レポートをカスタマイズできます。

6.1. LVM 表示の形式の制御

追加オプションなしで pvslvs、または vgs コマンドを使用すると、デフォルトの並べ替え順序でデフォルトのフィールドセットが表示されます。pvs コマンドのデフォルトフィールドには、物理ボリュームの名前で並べ替えられた次の情報が含まれています。

# pvs
  PV         VG               Fmt     Attr   PSize    PFree
  /dev/vdb1  VolumeGroupName  lvm2    a--    17.14G   17.14G
  /dev/vdb2  VolumeGroupName  lvm2    a--    17.14G   17.09G
  /dev/vdb3  VolumeGroupName  lvm2    a--    17.14G   17.14G
PV
物理ボリューム名。
VG
ボリュームグループ名。
Fmt
物理ボリュームのメタデータ形式: lvm2 または lvm1
Attr
物理ボリュームのステータス: (a) - 割り当て可能、または (x) - エクスポート済み。
PSize
物理ボリュームのサイズ。
PFree
物理ボリュームにある残りの空き領域。
カスタムフィールドの表示

デフォルトとは異なるフィールドセットを表示するには、-o オプションを使用します。次の例では、物理ボリュームの名前、サイズ、空き容量のみを表示します。

# pvs -o pv_name,pv_size,pv_free
  PV         PSize  PFree
  /dev/vdb1  17.14G 17.14G
  /dev/vdb2  17.14G 17.09G
  /dev/vdb3  17.14G 17.14G
LVM 表示の並べ替え

特定の基準で結果を並べ替えるには、-O オプションを使用します。次の例では、エントリーを物理ボリュームの空き領域で昇順に並べ替えます。

# pvs -o pv_name,pv_size,pv_free -O pv_free
  PV         PSize  PFree
  /dev/vdb2  17.14G 17.09G
  /dev/vdb1  17.14G 17.14G
  /dev/vdb3  17.14G 17.14G

結果を降順で並べ替えるには、- 文字とともに -O オプションを使用します。

# pvs -o pv_name,pv_size,pv_free -O -pv_free
  PV         PSize  PFree
  /dev/vdb1  17.14G 17.14G
  /dev/vdb3  17.14G 17.14G
  /dev/vdb2  17.14G 17.09G

関連情報

6.2. LVM 表示の単位の指定

LVM 表示コマンドの --units 引数を指定すると、LVM デバイスのサイズを 2 進数単位または 10 進数単位で表示できます。すべての引数については次の表を参照してください。

単位の種類説明利用可能なオプションデフォルト

2 進数単位

単位は 2 の累乗 (1024 の倍数) で表示されます。

b: バイト。
s: セクター、各 512 バイト。
k: キビバイト。
m: メビバイト。
g: ギビバイト。
t: テビバイト。
p: ペビバイト。
e: エクスビバイト。
h: 人間が判読可能で適切な単位が使用されます。
r: 丸めインジケーター付きの人間が判読可能な形式。丸め接頭辞 < または > 付きの h と同様な機能となり、LVM が表示サイズを最も近い単位に丸める方法を示します。

r (--units が指定されていない場合)。このデフォルト設定を上書きするには、/etc/lvm/lvm.conf ファイルの global セクションに units パラメーターを設定します。

10 進数単位

単位は 1000 の倍数で表示されます。

B: バイト。
S: セクター、各 512 バイト。
K: キロバイト。
M: メガバイト。
G: ギガバイト。
T: テラバイト。
P: ペタバイト。
E: エクスバイト。
H: 人間が判読可能で適切な単位が使用されます。
R : 丸めインジケーター付きの判読可能な形式。丸め接頭辞 < または > が付いた H と同様に機能し、LVM が表示サイズを最も近い単位に丸める方法を示します。

該当なし

カスタム単位

数量と 2 進数または 10 進数の単位の組み合わせ。たとえば、結果を 4 メビバイトで表示するには、4m を使用します。

該当なし

該当なし

  • 単位の値を指定しない場合は、人間が判読できる形式 (r) がデフォルトで使用されます。次の vgs コマンドは、VG のサイズを人間が判読できる形式で表示します。最適な単位が使用されます。また、丸め記号 < によって、実際のサイズが近似値であり、931 ギビバイト未満であることが示されます。

    # vgs myvg
      VG   #PV #LV #SN Attr VSize    VFree
      myvg   1   1   0 wz-n <931.00g <930.00g
  • 次の pvs コマンドは、/dev/vdb 物理ボリュームの出力を 2 進数のギビバイト単位で表示します。

    # pvs --units g /dev/vdb
      PV        VG    Fmt  Attr PSize   PFree
      /dev/vdb  myvg  lvm2 a--  931.00g 930.00g
  • 次の pvs コマンドは、/dev/vdb 物理ボリュームの出力を 10 進数のギガバイト単位で表示します。

    # pvs --units G /dev/vdb
      PV        VG   Fmt  Attr  PSize   PFree
      /dev/vdb  myvg lvm2 a--   999.65G 998.58G
  • 次の pvs コマンドは、出力を 512 バイトのセクター単位で表示します。

    # pvs --units s
      PV         VG     Fmt  Attr PSize       PFree
      /dev/vdb   myvg   lvm2 a--  1952440320S 1950343168S
  • LVM 表示コマンドには、カスタム単位を指定できます。次の例では、pvs コマンドの出力を 4 メビバイト単位で表示します。

    # pvs --units 4m
      PV         VG     Fmt  Attr PSize      PFree
      /dev/vdb   myvg   lvm2 a--  238335.00U 238079.00U

6.3. LVM 設定ファイルのカスタマイズ

lvm.conf ファイルを編集することで、お客様固有のストレージおよびシステム要件に応じて LVM 設定をカスタマイズできます。たとえば、lvm.conf ファイルを編集して、フィルター設定の変更、ボリュームグループの自動アクティブ化の設定、シンプールの管理、またはスナップショットの自動拡張を行うことができます。

手順:

  1. 任意のエディターで lvm.conf ファイルを開きます。
  2. デフォルトの表示値を変更する設定のコメントを解除して変更し、lvm.conf ファイルをカスタマイズします。

    • lvs の出力に表示されるフィールドをカスタマイズするには、lvs_cols パラメーターのコメントを解除して変更します。

        lvs_cols="lv_name,vg_name,lv_attr"
    • pvsvgslvs コマンドの空のフィールドを非表示にするには、compact_output=1 設定のコメントを解除します。

        compact_output = 1
    • pvsvgs、および lvs コマンドのデフォルトの単位としてギガバイトを設定するには、units = "r" 設定を units = "G" に置き換えます。

        units = "G"
  3. lvm.conf ファイルの対応するセクションのコメントが解除されていることを確認します。たとえば、lvs_cols パラメーターを変更するには、report セクションのコメントを解除する必要があります。

      report {
    ...
    }

検証

  • lvm.conf ファイルを変更した後、変更した値を表示します。

    # lvmconfig --typeconfig diff

関連情報

  • システム上の lvm.conf(5) man ページ

6.4. LVM 選択基準の定義

選択基準は、<field> <operator> <value> 形式の一連のステートメントであり、比較演算子を使用して特定のフィールドの値を定義します。選択基準に一致するオブジェクトが処理または表示されます。オブジェクトは、物理ボリューム (PV)、ボリュームグループ (VG)、または論理ボリューム (LV) です。ステートメントは、論理演算子とグループ化演算子によって結合します。

選択基準を定義するには、-S または --select オプションの後に 1 つまたは複数のステートメントを使用します。

-S オプションは、各オブジェクトに名前を付けるのではなく、処理するオブジェクトを記述することによって機能します。これは、多くのオブジェクトを処理する場合や、各オブジェクトを個別に検索して名前を付けることが難しい場合や、複雑な特性セットを持つオブジェクトを検索する場合に役立ちます。-S オプションは、多くの名前を入力しなくても済むようにショートカットとして使用することもできます。

フィールドと使用可能な演算子の完全なセットを表示するには、lvs -S help コマンドを使用します。lvs をレポートまたは処理コマンドに置き換えると、そのコマンドの詳細が表示されます。

  • レポートコマンドには、pvsvgslvspvdisplayvgdisplaylvdisplay、および dmsetup info -c が含まれます。
  • 処理コマンドには、pvchangevgchangelvchangevgimportvgexportvgremove、および lvremove が含まれます。
pvs コマンドを使用した選択基準の例
  • 次の pvs コマンドの例では、名前に文字列 nvme が含まれる物理ボリュームのみが表示されます。

    # pvs -S name=~nvme
      PV           Fmt  Attr PSize PFree
      /dev/nvme2n1 lvm2 ---  1.00g 1.00g
  • 次の pvs コマンドの例では、myvg ボリュームグループ内の物理デバイスのみが表示されます。

    # pvs -S vg_name=myvg
      PV         VG   Fmt  Attr PSize    PFree
      /dev/vdb1   myvg lvm2 a--  1020.00m 396.00m
      /dev/vdb2   myvg lvm2 a--  1020.00m 896.00m
lvs コマンドを使用した選択基準の例
  • 次の lvs コマンドの例では、サイズが 100 m より大きく 200 m 未満の論理ボリュームのみが表示されます。

    # lvs -S 'size > 100m && size < 200m'
      LV   VG   Attr       LSize   Cpy%Sync
      rr   myvg rwi-a-r--- 120.00m 100.00
  • 次の lvs コマンドの例では、名前に lvol と 0 から 2 までの任意の数字が含まれる論理ボリュームのみが表示されます。

    # lvs -S name=~lvol[02]
      LV    VG   Attr       LSize
      lvol0 myvg -wi-a----- 100.00m
      lvol2 myvg -wi------- 100.00m
  • 次の lvs コマンドの例では、raid1 セグメントタイプを持つ論理ボリュームのみが表示されます。

    # lvs -S segtype=raid1
      LV   VG   Attr       LSize   Cpy%Sync
      rr   myvg rwi-a-r--- 120.00m 100.00
高度な例

選択基準を他のオプションと組み合わせることができます。

  • 次の lvchange コマンドの例では、アクティブな論理ボリュームにのみ特定のタグ mytag を追加します。

    # lvchange --addtag mytag -S active=1
      Logical volume myvg/mylv changed.
      Logical volume myvg/lvol0 changed.
      Logical volume myvg/lvol1 changed.
      Logical volume myvg/rr changed.
  • 次の lvs コマンドの例では、名前が _pmspare と一致しないすべての論理ボリュームを表示し、デフォルトのヘッダーをカスタムのものに変更します。

    # lvs -a -o lv_name,vg_name,attr,size,pool_lv,origin,role -S 'name!~_pmspare'
      LV         VG      Attr       LSize Pool Origin Role
      thin1      example Vwi-a-tz-- 2.00g tp          public,origin,thinorigin
      thin1s     example Vwi---tz-- 2.00g tp   thin1  public,snapshot,thinsnapshot
      thin2      example Vwi-a-tz-- 3.00g tp          public
      tp         example twi-aotz-- 1.00g             private
      [tp_tdata] example Twi-ao---- 1.00g             private,thin,pool,data
      [tp_tmeta] example ewi-ao---- 4.00m             private,thin,pool,metadata
  • 次の lvchange コマンドの例では、role=thinsnapshot および origin=thin1 の論理ボリュームを、通常のアクティブ化コマンドの実行中にスキップするようにフラグ付けします。

    # lvchange --setactivationskip n -S 'role=thinsnapshot && origin=thin1'
      Logical volume myvg/thin1s changed.
  • 次の lvs コマンドの例では、次の 3 つの条件すべてに一致する論理ボリュームのみが表示されます。

    • 名前に _tmeta が含まれている。
    • ロールが metadata である。
    • サイズが 4m 以下である。
    # lvs -a -S 'name=~_tmeta && role=metadata && size <= 4m'
      LV         VG      Attr       LSize
      [tp_tmeta] myvg   ewi-ao---- 4.00m

関連情報

  • システム上の lvmreport(7) man ページ

第7章 共有ストレージ上での LVM の設定

共有ストレージは、複数のノードが同時にアクセスできるストレージです。LVM を使用して共有ストレージを管理できます。共有ストレージは通常、クラスターおよび高可用性セットアップで使用されます。共有ストレージがシステム上でどのように表示されるかについては、次の 2 つの一般的なシナリオがあります。

  • LVM デバイスはホストに接続され、ゲストの仮想マシンに渡されて使用されます。この場合、デバイスはホストによって使用されることは決して意図されておらず、ゲストの仮想マシンによってのみ使用されます。
  • マシンはファイバーチャネルなどを使用してストレージエリアネットワーク (SAN) に接続されており、SAN LUN は複数のマシンから認識されます。

7.1. 仮想マシンディスク用の LVM の設定

仮想マシンストレージがホストに公開されるのを防ぐために、LVM デバイスアクセスと LVM の system ID を設定できます。これを行うには、問題のデバイスをホストから除外します。これにより、ホスト上の LVM がゲストの VM に渡されたデバイスを認識したり使用したりすることがなくなります。VG 内に LVM の system ID をゲストの仮想マシンと一致するように設定することで、ホスト上の仮想マシンのの VG が誤って使用されるのを防ぐことができます。

手順

  1. lvm.conf ファイルで、system.devices ファイルが有効になっているかどうかを確認します。

    use_devicesfile=1
  2. ホストのデバイスファイルから問題のデバイスを除外します。

    $ lvmdevices --deldev <device>
  3. オプション: LVM デバイスをさらに保護できます。

    1. lvm.conf ファイルのホストと VM の両方で LVM の system ID 機能を設定します。

      system_id_source = "uname"
    2. VG の system ID を仮想マシンの system ID と一致するように設定します。これにより、ゲスト仮想マシンのみが VG をアクティブ化できるようになります。

      $ vgchange --systemid <VM_system_id> <VM_vg_name>

7.2. 1 台のマシンで SAN ディスクを使用するように LVM を設定する

SAN LUN が間違ったマシンで使用されないようにするには、SAN LUN を使用する 1 台のマシンを除くすべてのマシンのデバイスファイルから LUN を除外します。

また、すべてのマシンで system ID を設定し、VG 内の system ID を使用するマシンと一致するように設定することで、VG が間違ったマシンによって使用されないように保護することもできます。

手順

  1. lvm.conf ファイルで、system.devices ファイルが有効になっているかどうかを確認します。

    use_devicesfile=1
  2. ホストのデバイスファイルから問題のデバイスを除外します。

    $ lvmdevices --deldev <device>
  3. lvm.conf ファイルで LVM の system ID 機能を設定します。

    system_id_source = "uname"
  4. VG の system ID を、この VG を使用するマシンの system ID と一致するように設定します。

    $ vgchange --systemid <system_id> <vg_name>

7.3. フェイルオーバーに SAN ディスクを使用するための LVM の設定

フェイルオーバーなどの目的で、マシン間で LUN を移動するように設定できます。LVM をセットアップするには、LVM デバイスファイルを設定し、デバイスを使用するすべてのマシンのデバイスファイルに LUN を含め、各マシンで LVM の system ID を設定します。

次の手順では、LVM の初期設定を説明します。フェイルオーバー用の LVM のセットアップを完了し、マシン間で VG を移動するには、VG が使用できるマシンのシステム ID と一致するように VG のシステム ID を自動的に変更する pacemaker と LVM アクティブ化リソースエージェントを設定する必要があります。詳細は、高可用性クラスターの設定と管理 を参照してください。

手順

  1. lvm.conf ファイルで、system.devices ファイルが有効になっているかどうかを確認します。

    use_devicesfile=1
  2. 問題のデバイスをホストのデバイスファイルに含めます。

    $ lvmdevices --adddev <device>
  3. すべてのマシンの LVM の system ID 機能を lvm.conf ファイルに設定します。

    system_id_source = "uname"

7.4. 複数のマシン間で SAN ディスクを共有するための LVM の設定

lvmlockd デーモンと dlmsanlock などのロックマネージャーを使用すると、複数のマシンから SAN ディスク上の共有 VG にアクセスできるようになります。特定のコマンドは、使用されているロックマネージャーとオペレーティングシステムによって異なる場合があります。次の手順では、複数のマシン間で SAN ディスクを共有するように LVM を設定するために必要な手順の概要を説明します。

警告

pacemaker を使用する場合は、代わりに 高可用性クラスターの設定と管理 に示されているペースメーカーの手順を使用してシステムを設定し、起動する必要があります。

手順

  1. lvm.conf ファイルで、system.devices ファイルが有効になっているかどうかを確認します。

    use_devicesfile=1
  2. 共有 LUN を使用するマシンごとに、マシンのデバイスファイルに LUN を追加します。

    $ lvmdevices --adddev <device>
  3. すべてのマシンで lvmlockd デーモンを使用するように lvm.conf ファイルを設定します。

    use_lvmlockd=1
  4. すべてのマシンで lvmlockd デーモンファイルを開始します。
  5. すべてのマシン上で dlmsanlock などの lvmlockd で使用するロックマネージャーを開始します。
  6. vgcreate --shared コマンドを使用して、新しい共有 VG を作成します。
  7. すべてのマシンで vgchange --lockstart コマンドおよび vgchange --lockstop コマンドを使用して、既存の共有 VG へのアクセスを開始および停止します。

関連情報

  • システム上の lvmlockd(8) man ページ

7.5. storage RHEL システムロールを使用して共有 LVM デバイスを作成する

複数のシステムが同じストレージに同時にアクセスできるようにする場合は、storage RHEL システムロールを使用して共有 LVM デバイスを作成できます。

これにより、次のような注目すべき利点がもたらされます。

  • リソース共有
  • ストレージリソース管理の柔軟性
  • ストレージ管理タスクの簡素化

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage local storage
      hosts: managed-node-01.example.com
      become: true
      tasks:
        - name: Create shared LVM device
          ansible.builtin.include_role:
            name: rhel-system-roles.storage
          vars:
            storage_pools:
              - name: vg1
                disks: /dev/vdb
                type: lvm
                shared: true
                state: present
                volumes:
                  - name: lv1
                    size: 4g
                    mount_point: /opt/test1
            storage_safe_mode: false
            storage_use_partitions: true

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイル
  • /usr/share/doc/rhel-system-roles/storage/ ディレクトリー

第8章 RAID 論理ボリュームの設定

論理ボリュームマネージャー (LVM) を使用して、Redundant Array of Independent Disks (RAID) ボリュームを作成および管理できます。LVM は、RAID レベル 0、1、4、5、6、10 に対応します。LVM RAID ボリュームには以下の特徴があります。

  • LVM は、Multiple Devices (MD) カーネルドライバーを活用した RAID 論理ボリュームを作成して管理する
  • アレイから RAID1 イメージを一時的に分割し、後でアレイにマージし直すことが可能
  • LVM RAID ボリュームはスナップショットに対応
  • RAID 論理ボリュームはクラスターには対応していません。RAID 論理ボリュームは 1 台のマシンに排他的に作成およびアクティブ化できますが、複数のマシンで同時にアクティブにすることはできません。
  • RAID 論理ボリューム (LV) を作成するとき、LVM は、データまたはアレイ内のパリティーサブボリュームごとに、サイズが 1 エクステントのメタデータサブボリュームを作成します。たとえば、2 方向の RAID1 アレイを作成すると、メタデータサブボリュームが 2 つ (lv_rmeta_0 および lv_rmeta_1) と、データサブボリュームが 2 つ (lv_rimage_0 および lv_rimage_1) 作成されます。
  • RAID LV に整合性を追加すると、ソフト破損が軽減または防止されます。

8.1. RAID レベルとリニアサポート

レベル 0、1、4、5、6、10、リニアなど、RAID 別の対応設定は以下のとおりです。

レベル 0

ストライピングとも呼ばれる RAID レベル 0 は、パフォーマンス指向のストライピングデータマッピング技術です。これは、アレイに書き込まれるデータがストライプに分割され、アレイのメンバーディスク全体に書き込まれることを意味します。これにより低い固有コストで高い I/O パフォーマンスを実現できますが、冗長性は提供されません。

RAID レベル 0 実装は、アレイ内の最小デバイスのサイズまで、メンバーデバイス全体にだけデータをストライピングします。つまり、複数のデバイスのサイズが少し異なる場合、それぞれのデバイスは最小ドライブと同じサイズであるかのように処理されます。したがって、レベル 0 アレイの共通ストレージ容量は、すべてのディスクの合計容量です。メンバーディスクのサイズが異なる場合、RAID0 は使用可能なゾーンを使用して、それらのディスクのすべての領域を使用します。

レベル 1

RAID レベル 1 (ミラーリング) は、アレイの各メンバーディスクに同一のデータを書き込み、ミラー化されたコピーを各ディスクに残すことによって冗長性を提供します。ミラーリングは、データの可用性の単純化と高レベルにより、いまでも人気があります。レベル 1 は 2 つ以上のディスクと連携して、非常に優れたデータ信頼性を提供し、読み取り集中型のアプリケーションに対してパフォーマンスが向上しますが、比較的コストが高くなります。

RAID レベル 1 は、アレイ内のすべてのディスクに同じ情報を書き込むためコストがかかります。これにより、データの信頼性が提供されますが、レベル 5 などのパリティーベースの RAID レベルよりもスペース効率が大幅に低下します。ただし、この領域の非効率性にはパフォーマンス上の利点があります。パリティーベースの RAID レベルは、パリティーを生成するためにかなり多くの CPU 電力を消費しますが、RAID レベル 1 は単に同じデータを、CPU オーバーヘッドが非常に少ない複数の RAID メンバーに複数回書き込むだけです。そのため、RAID レベル 1 は、ソフトウェア RAID が使用されているマシンや、マシンの CPU リソースが一貫して RAID アクティビティー以外の操作でアレイ化されます。

レベル 1 アレイのストレージ容量は、ハードウェア RAID 内でミラーリングされている最小サイズのハードディスクの容量と同じか、ソフトウェア RAID 内でミラーリングされている最小のパーティションと同じ容量になります。レベル 1 の冗長性は、すべての RAID タイプの中で最も高いレベルであり、アレイは 1 つのディスクのみで動作できます。

レベル 4

レベル 4 は、1 つのディスクドライブでパリティー連結を使用して、データを保護します。パリティー情報は、アレイ内の残りのメンバーディスクのコンテンツに基づいて計算されます。この情報は、アレイ内のいずれかのディスクに障害が発生した場合にデータの再構築に使用できます。その後、再構築されたデータを使用して、交換前に失敗したディスクに I/O 要求に対応でき、交換後に失敗したディスクを接続します。

パリティー専用ディスクは、RAID アレイへのすべての書き込みトランザクションにおいて固有のボトルネックとなるため、ライトバックキャッシングなどの付随する技術なしにレベル 4 が使用されることはほとんどありません。または、システム管理者が意図的にこのボトルネックを考慮してソフトウェア RAID デバイスを設計している特定の状況下で使用されます。たとえば、アレイにデータが格納されると書き込みトランザクションがほとんどないようなアレイです。RAID レベル 4 にはほとんど使用されないため、Anaconda ではこのオプションとしては使用できません。ただし、実際には必要な場合は、ユーザーが手動で作成できます。

ハードウェア RAID レベル 4 のストレージ容量は、最小メンバーパーティションの容量にパーティションの数を掛けて 1 を引いた値に等しくなります。RAID レベル 4 アレイのパフォーマンスは常に非対称です。つまり、読み込みは書き込みを上回ります。これは、パリティーを生成するときに書き込み操作が余分な CPU リソースとメインメモリー帯域幅を消費し、実際のデータをディスクに書き込むときに余分なバス帯域幅も消費するためです。これは、データだけでなくパリティーも書き込むためです。読み取り操作は、アレイが劣化状態にない限り、データを読み取るだけでパリティーを読み取る必要はありません。その結果、読み取り操作では、通常の操作条件下で同じ量のデータ転送を行う場合でも、ドライブおよびコンピューターのバス全体に生成されるトラフィックが少なくなります。

レベル 5

これは RAID の最も一般的なタイプです。RAID レベル 5 は、アレイのすべてのメンバーディスクドライブにパリティーを分散することにより、レベル 4 に固有の書き込みボトルネックを排除します。パリティー計算プロセス自体のみがパフォーマンスのボトルネックです。最近の CPU はパリティーを非常に高速に計算できます。しかし、RAID 5 アレイに多数のディスクを使用していて、すべてのデバイスの合計データ転送速度が十分に高い場合、パリティー計算がボトルネックになる可能性があります。

レベル 5 のパフォーマンスは非対称であり、読み取りは書き込みよりも大幅に優れています。RAID レベル 5 のストレージ容量は、レベル 4 と同じです。

レベル 6

パフォーマンスではなくデータの冗長性と保存が最重要事項であるが、レベル 1 の領域の非効率性が許容できない場合は、これが RAID の一般的なレベルです。レベル 6 では、複雑なパリティースキームを使用して、アレイ内の 2 つのドライブから失われたドライブから復旧できます。複雑なパリティースキームにより、ソフトウェア RAID デバイスで CPU 幅が大幅に高くなり、書き込みトランザクションの際に増大度が高まります。したがって、レベル 6 はレベル 4 や 5 よりもパフォーマンスにおいて、非常に非対称です。

RAID レベル 6 アレイの合計容量は、RAID レベル 5 および 4 と同様に計算されますが、デバイス数から追加パリティーストレージ領域用に 2 つのデバイス (1 ではなく) を引きます。

レベル 10

この RAID レベルでは、レベル 0 のパフォーマンスとレベル 1 の冗長性を組み合わせます。また、2 台以上のデバイスを使用するレベル 1 アレイの無駄なスペースをある程度削減することができます。レベル 10 では、たとえば、データごとに 2 つのコピーのみを格納するように設定された 3 ドライブアレイを作成することができます。これにより、全体用のアレイサイズを最小デバイスのみと同じサイズ (3 つのデバイス、レベル 1 アレイなど) ではなく、最小デバイスのサイズの 1.5 倍にすることができます。これにより、CPU プロセスの使用量が RAID レベル 6 のようにパリティーを計算するのを防ぎますが、これは領域効率が悪くなります。

RAID レベル 10 の作成は、インストール時には対応していません。インストール後に手動で作成できます。

リニア RAID

リニア RAID は、より大きな仮想ドライブを作成するドライブのグループ化です。

リニア RAID では、あるメンバードライブからチャンクが順次割り当てられます。最初のドライブが完全に満杯になったときにのみ次のドライブに移動します。これにより、メンバードライブ間の I/O 操作が分割される可能性はないため、パフォーマンスの向上は見られません。リニア RAID は冗長性がなく、信頼性は低下します。メンバードライブが 1 台でも故障すると、アレイ全体が使用できなくなり、データが失われる可能性があります。容量はすべてのメンバーディスクの合計になります。

8.2. LVM RAID のセグメントタイプ

RAID 論理ボリュームを作成するには、RAID タイプを lvcreate コマンドの --type 引数として指定します。ほとんどのユーザーの場合、raid1raid4raid5raid6raid10 の 5 つの使用可能なプライマリータイプのいずれかを指定するだけで十分です。

以下の表は、考えられる RAID セグメントタイプを示しています。

表8.1 LVM RAID のセグメントタイプ
セグメントタイプ説明

raid1

RAID1 ミラーリング。-m 引数を指定し、ストライピングを指定しない場合は、これが lvcreate コマンドの --type 引数のデフォルト値になります。

raid4

RAID4 専用パリティーディスク

raid5_la

  • RAID5 left asymmetric
  • ローテートパリティー 0 + データ継続

raid5_ra

  • RAID5 right asymmetric
  • ローテートパリティー N + データ継続

raid5_ls

  • RAID5 left symmetric
  • raid5 と同じです。
  • ローテートパリティー 0 + データ再起動

raid5_rs

  • RAID5 right symmetric
  • ローテートパリティー N + データ再起動

raid6_zr

  • RAID6 zero restart
  • raid6 と同じです。
  • ローテートパリティーゼロ (左から右) + データ再起動

raid6_nr

  • RAID6 N restart
  • ローテートパリティー N (左から右) + データ再起動

raid6_nc

  • RAID6 N continue
  • ローテートパリティー N (左から右) + データを継続

raid10

  • ストライピング + ミラーリング。-m 引数を指定し、1 よりも大きい数をストライプの数として指定すると、これが lvcreate コマンドの --type 引数のデフォルト値になります。
  • ミラーセットのストライピング

raid0/raid0_meta

ストライピング。RAID0 では、ストライプサイズの単位で、複数のデータサブボリュームに論理ボリュームデータが分散されます。これは、パフォーマンスを向上させるために使用します。論理ボリュームのデータは、いずれかのデータサブボリュームで障害が発生すると失われます。

8.3. RAID0 を作成するためのパラメーター

RAID0 ストライピング論理ボリュームは、lvcreate --type raid0[meta] --stripes _Stripes --stripesize StripeSize VolumeGroup [PhysicalVolumePath] コマンドを使用して作成することができます。

次の表は、RAID0 ストライピング論理ボリュームを作成するときに使用できるさまざまなパラメーターを説明しています。

表8.2 RAID0 ストライピング論理ボリュームを作成するためのパラメーター
パラメーター説明

--type raid0[_meta]

raid0 を指定すると、メタデータボリュームなしで RAID0 ボリュームが作成されます。raid0_meta を指定すると、メタデータボリュームとともに RAID0 ボリュームが作成されます。RAID0 には耐障害性がないため、RAID1/10 の場合のようにミラーリングされたすべてのデータブロックを格納したり、RAID4/5/6 の場合のようにすべてのパリティーブロックを計算して格納したりしません。したがって、ミラーリングされたブロックまたはパリティーブロックの再同期の進行状態を把握するメタデータボリュームは必要ありません。RAID0 から RAID4/5/6/10 への変換では、メタデータボリュームが必須となります。raid0_meta を指定すると、これらのメタデータボリュームが事前に割り当てられ、それぞれの割り当ての失敗を防ぐことができます。

--stripes Stripes

論理ボリュームを分散するデバイスの数を指定します。

--stripesize StripeSize

各ストライプのサイズをキロバイト単位で指定します。これは、次のデバイスに移動する前にデバイスに書き込まれるデータの量です。

VolumeGroup

使用するボリュームグループを指定します。

PhysicalVolumePath

使用するデバイスを指定します。指定しない場合は、LVM により、Stripes オプションに指定されているデバイスの数が、各ストライプに 1 つずつ選択されます。

8.4. RAID 論理ボリュームの作成

-m 引数に指定する値に応じて、複数のコピーを持つ RAID1 アレイを作成できます。同様に、-i 引数を使用して、RAID 0、4、5、6、10 論理ボリュームのストライピング数を指定できます。-I 引数で、ストライプのサイズを指定することもできます。以下の手順では、異なるタイプの RAID 論理ボリュームを作成するさまざまな方法を説明します。

手順

  • 2 方向 RAID を作成します。以下のコマンドは、ボリュームグループ my_vg 内にサイズが 1G の 2 方向 RAID1 アレイ my_lv を作成します。

    # lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg
    Logical volume "my_lv" created.
  • ストライピングで RAID5 アレイを作成します。次のコマンドは、ボリュームグループ my_vg に、3 つのストライプと 1 つの暗黙のパリティードライブ (my_lv) を持つ、サイズが 1G の RAID5 アレイを作成します。LVM ストライピングボリュームと同様にストライピングの数を指定できることに注意してください。正しい数のパリティードライブが自動的に追加されます。

    # lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vg
  • ストライピングで RAID6 アレイを作成します。次のコマンドは、ボリュームグループ my_vg に 3 つの 3 ストライプと 2 つの暗黙的なパリティードライブ (my_lv という名前) を持つ RAID6 アレイを作成します。これは、1G 1 ギガバイトのサイズです。

    # lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg

検証

  • 2 ウェイ RAID1 アレイである LVM デバイス my_vg/my_lv を表示します。
# lvs -a -o name,copy_percent,devices _my_vg_
  LV                Copy%  Devices
  my_lv             6.25    my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]         /dev/sde1(0)
  [my_lv_rimage_1]         /dev/sdf1(1)
  [my_lv_rmeta_0]          /dev/sde1(256)
  [my_lv_rmeta_1]          /dev/sdf1(0)

関連情報

  • システム上の lvcreate(8) および lvmraid(7) man ページ

8.5. storage RHEL システムロールを使用して RAID を備えた LVM プールを設定する

storage システムロールを使用すると、Red Hat Ansible Automation Platform を使用して、RAID を備えた LVM プールを RHEL に設定できます。利用可能なパラメーターを使用して Ansible Playbook を設定し、RAID を備えた LVM プールを設定できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage local storage
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure LVM pool with RAID
          ansible.builtin.include_role:
            name: rhel-system-roles.storage
          vars:
            storage_safe_mode: false
            storage_pools:
              - name: my_pool
                type: lvm
                disks: [sdh, sdi]
                raid_level: raid1
                volumes:
                  - name: my_volume
                    size: "1 GiB"
                    mount_point: "/mnt/app/shared"
                    fs_type: xfs
                    state: present

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • プールが RAID 上にあることを確認します。

    # ansible managed-node-01.example.com -m command -a 'lsblk'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイル
  • /usr/share/doc/rhel-system-roles/storage/ ディレクトリー
  • RAID の管理

8.6. RAID0 ストライプ化論理ボリュームの作成

RAID0 論理ボリュームは、論理ボリュームデータをストライプサイズ単位で複数のデータサブボリューム全体に分散します。以下の手順では、ディスク間でデータをストライピングする mylv という LVM RAID0 論理ボリュームを作成します。

前提条件

  1. 3 つ以上の物理ボリュームを作成している。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
  2. ボリュームグループを作成している。詳細は、LVM ボリュームグループの作成 を参照してください。

手順

  1. 既存のボリュームグループから RAID0 論理ボリュームを作成します。次のコマンドは、ボリュームグループ myvg から RAID0 ボリューム mylv を作成します。このボリュームは、サイズが 2G で、ストライプが 3 つあります。ストライプのサイズは 4kB です。

    # lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg
      Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents).
      Logical volume "mylv" created.
  2. RAID0 論理ボリュームにファイルシステムを作成します。以下のコマンドを使用すると、論理ボリュームに ext4 ファイルシステムが作成されます。

    # mkfs.ext4 /dev/my_vg/mylv
  3. 論理ボリュームをマウントして、ファイルシステムのディスクの領域使用率を報告します。

    # mount /dev/my_vg/mylv /mnt
    
    # df
    Filesystem             1K-blocks     Used  Available  Use% Mounted on
    /dev/mapper/my_vg-mylv   2002684     6168  1875072    1%   /mnt

検証

  • 作成された RAID0 ストライピング論理ボリュームを表示します。

    # lvs -a -o +devices,segtype my_vg
      LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type
      mylv my_vg rwi-a-r--- 2.00g mylv_rimage_0(0),mylv_rimage_1(0),mylv_rimage_2(0) raid0
      [mylv_rimage_0] my_vg iwi-aor--- 684.00m /dev/sdf1(0) linear
      [mylv_rimage_1] my_vg iwi-aor--- 684.00m /dev/sdg1(0) linear
      [mylv_rimage_2] my_vg iwi-aor--- 684.00m /dev/sdh1(0) linear

8.7. storage RHEL システムロールを使用して RAID LVM ボリュームのストライプサイズを設定する

storage システムロールを使用すると、Red Hat Ansible Automation Platform を使用して、RHEL の RAID LVM ボリュームのストライプサイズを設定できます。利用可能なパラメーターを使用して Ansible Playbook を設定し、RAID を備えた LVM プールを設定できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage local storage
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure stripe size for RAID LVM volumes
          ansible.builtin.include_role:
            name: rhel-system-roles.storage
          vars:
            storage_safe_mode: false
            storage_pools:
              - name: my_pool
                type: lvm
                disks: [sdh, sdi]
                volumes:
                  - name: my_volume
                    size: "1 GiB"
                    mount_point: "/mnt/app/shared"
                    fs_type: xfs
                    raid_level: raid0
                    raid_stripe_size: "256 KiB"
                    state: present

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • ストライプサイズが必要なサイズに設定されていることを確認します。

    # ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md ファイル
  • /usr/share/doc/rhel-system-roles/storage/ ディレクトリー
  • RAID の管理

8.8. ソフトデータの破損

データストレージにおけるソフト破損は、ストレージデバイスから取得したデータが、そのデバイスに書き込まれるデータとは異なることを意味します。破損したデータは、ストレージデバイスで無期限に存在する可能性があります。破損したデータは、このデータを取得および使用するまで、検出されない可能性があります。

設定のタイプに応じて、Redundant Array of Independent Disks (RAID) 論理ボリューム (LV) は、デバイスに障害が発生した場合のデータ損失を防ぎます。RAID アレイで構成されているデバイスに障害が発生した場合、その RAID LV の一部である他のデバイスからデータを回復できます。ただし、RAID 設定により、データの一貫性は確保されません。ソフト破損、無兆候破損、ソフトエラー、およびサイレントエラーでは、システム設計やソフトウェアが想定どおりに機能し続けている場合でも、破損するデータを示す用語です。

DM 整合性で新しい RAID LV を作成したり、既存の RAID LV に整合性を追加する場合は、以下の点を考慮してください。

  • 整合性メタデータには、追加のストレージ領域が必要です。各 RAID イメージには、データに追加されるチェックサムがあるため、500MB の全データに 4 MB のストレージ領域が必要になります。
  • 一部の RAID 設定には、より多くの影響がありますが、データにアクセスする際のレイテンシーにより、DM 整合性を追加するとパフォーマンスに影響が及びます。RAID1 設定は通常、RAID5 またはそのバリアントよりも優れたパフォーマンスを提供します。
  • RAID 整合性ブロックサイズは、パフォーマンスにも影響を及ぼします。RAID 整合性ブロックサイズが大きいと、パフォーマンスが向上します。ただし、RAID 整合性ブロックのサイズが小さくなると、後方互換性がより高くなります。
  • 利用可能な整合性モードには、bitmap または journal の 2 つがあります。通常、bitmap 整合性モードは、journal モードよりも優れたパフォーマンスを提供します。
ヒント

パフォーマンスの問題が発生した場合は、整合性で RAID1 を使用するか、特定の RAID 設定のパフォーマンスをテストして、要件を満たすことを確認してください。

8.9. DM 整合性を備えた RAID 論理ボリュームの作成

デバイスマッパー (DM) 整合性を備えた RAID LV を作成するか、既存の RAID 論理ボリューム (LV) に整合性を追加すると、ソフト破損によるデータ損失のリスクが軽減されます。LV を使用する前に、整合性の同期と RAID メタデータが完了するのを待ちます。そうしないと、バックグラウンドの初期化が LV のパフォーマンスに影響する可能性があります。

デバイスマッパー (DM) 整合性は、RAID レベル 1、4、5、6、10 で使用され、ソフト破損によるデータ損失を軽減または防止します。RAID レイヤーでは、データの結合のないコピーが、ソフト破損エラーを修正できるようになります。

手順

  1. DM 整合性のある RAID LV を作成します。次の例では、my_vg ボリュームグループに test-lv という名前の整合性を持つ新しい RAID LV を作成します。使用可能なサイズは 256M で、RAID レベルは 1 です。

    # lvcreate --type raid1 --raidintegrity y -L 256M -n test-lv my_vg
    Creating integrity metadata LV test-lv_rimage_0_imeta with size 8.00 MiB.
    Logical volume "test-lv_rimage_0_imeta" created.
    Creating integrity metadata LV test-lv_rimage_1_imeta with size 8.00 MiB.
    Logical volume "test-lv_rimage_1_imeta" created.
    Logical volume "test-lv" created.
    注記

    既存の RAID LV に DM 整合性を追加するには、次のコマンドを実行します。

    # lvconvert --raidintegrity y my_vg/test-lv

    RAID LV に整合性を追加すると、その RAID LV で実行可能な操作の数が制限されます。

  2. オプション: 特定の操作を実行する前に整合性を削除します。

    # lvconvert --raidintegrity n my_vg/test-lv
    Logical volume my_vg/test-lv has removed integrity.

検証

  • 追加された DM 整合性に関する情報を表示します。

    • my_vg ボリュームグループ内に作成された test-lv RAID LV の情報を表示します。

      # lvs -a my_vg
        LV                        VG      Attr       LSize   Origin                 Cpy%Sync
        test-lv                   my_vg rwi-a-r--- 256.00m                          2.10
        [test-lv_rimage_0]        my_vg gwi-aor--- 256.00m [test-lv_rimage_0_iorig] 93.75
        [test-lv_rimage_0_imeta]  my_vg ewi-ao----   8.00m
        [test-lv_rimage_0_iorig]  my_vg -wi-ao---- 256.00m
        [test-lv_rimage_1]        my_vg gwi-aor--- 256.00m [test-lv_rimage_1_iorig] 85.94
       [...]

      以下は、この出力から得られるさまざまなオプションを説明したものです。

      g 属性
      これは、Attr 列の下にある属性のリストで、RAID イメージが整合性を使用していることを示します。整合性は、チェックサムを _imeta RAID LV に保存します。
      Cpy%Sync
      最上位の RAID LV と各 RAID イメージの両方の同期の進行状況を示します。
      RAID イメージ
      LV 列に raid_image_N で表示されます。
      LV
      これにより、最上位の RAID LV と各 RAID イメージの同期の進行状況が 100% と表示されるようになります。
    • 各 RAID LV のタイプを表示します。

      # lvs -a my-vg -o+segtype
        LV                       VG      Attr       LSize   Origin                 Cpy%Sync Type
        test-lv                  my_vg rwi-a-r--- 256.00m                          87.96    raid1
        [test-lv_rimage_0]       my_vg gwi-aor--- 256.00m [test-lv_rimage_0_iorig] 100.00   integrity
        [test-lv_rimage_0_imeta] my_vg ewi-ao----   8.00m                                   linear
        [test-lv_rimage_0_iorig] my_vg -wi-ao---- 256.00m                                   linear
        [test-lv_rimage_1]       my_vg gwi-aor--- 256.00m [test-lv_rimage_1_iorig] 100.00   integrity
       [...]
    • 各 RAID イメージで検出された不一致の数をカウントする増分カウンターがあります。my_vg/test-lv の下の rimage_0 から整合性で検出されたデータの不一致を表示します。

      # lvs -o+integritymismatches my_vg/test-lv_rimage_0
        LV                 VG      Attr       LSize   Origin                    Cpy%Sync IntegMismatches
        [test-lv_rimage_0] my_vg gwi-aor--- 256.00m [test-lv_rimage_0_iorig]    100.00                 0

      この例では、整合性はデータの不一致を検出していないため、IntegMismatches カウンターはゼロ (0) を示しています。

    • 以下の例に示すように、/var/log/messages ログファイル内のデータ整合性情報を表示します。

      例8.1 カーネルメッセージログから dm-integrity の不一致の例

      device-mapper: integrity: dm-12: チェックサムがセクター 0x24e7 で失敗しました

      例8.2 カーネルメッセージログからの dm-integrity データ修正の例

      md/raid1:mdX: 読み込みエラーが修正されました (dm-16 の 9448 の 8 セクター)

関連情報

  • システム上の lvcreate(8) および lvmraid(7) man ページ

8.10. RAID 論理ボリュームの別の RAID レベルへの変換

LVM は RAID テイクオーバーをサポートしています。これは、RAID 論理ボリュームの RAID レベルを別の RAID レベルに変換 (たとえば RAID 5 から RAID 6) することを意味します。RAID レベルを変更して、デバイスの障害に対する耐障害性を増減できます。

手順

  1. RAID 論理ボリュームを作成します。

    # lvcreate --type raid5 -i 3 -L 500M -n my_lv my_vg
    Using default stripesize 64.00 KiB.
    Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents).
    Logical volume "my_lv" created.
  2. RAID 論理ボリュームを表示します。

    # lvs -a -o +devices,segtype
      LV               VG            Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices                                                                 Type
      my_lv            my_vg         rwi-a-r--- 504.00m                                    100.00           my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0) raid5
      [my_lv_rimage_0] my_vg         iwi-aor--- 168.00m                                                     /dev/sda(1)                                                             linear
  3. RAID 論理ボリュームを別の RAID レベルに変換します。

    # lvconvert --type raid6 my_vg/my_lv
    Using default stripesize 64.00 KiB.
    Replaced LV type raid6 (same as raid6_zr) with possible type raid6_ls_6.
    Repeat this command to convert to raid6 after an interim conversion has finished.
    Are you sure you want to convert raid5 LV my_vg/my_lv to raid6_ls_6 type? [y/n]: y
    Logical volume my_vg/my_lv successfully converted.
  4. オプション: このコマンドで変換を繰り返すように求められた場合は、次のコマンドを実行します。

    # lvconvert --type raid6 my_vg/my_lv

検証

  1. RAID レベルを変換した RAID 論理ボリュームを表示します。

    # lvs -a -o +devices,segtype
      LV               VG            Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices                                                                                   Type
      my_lv            my_vg         rwi-a-r--- 504.00m                                    100.00           my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0),my_lv_rimage_4(0) raid6
      [my_lv_rimage_0] my_vg         iwi-aor--- 172.00m                                                     /dev/sda(1)                                                                               linear

関連情報

  • システム上の lvconvert(8) および lvmraid(8) man ページ

8.11. リニアデバイスの RAID 論理ボリュームへの変換

既存のリニア論理ボリュームを RAID 論理ボリュームに変換することができます。この操作を行うには、lvconvert コマンドの --type 引数を使用します。

RAID 論理ボリュームは、メタデータとデータのサブボリュームのペアで構成されています。リニアデバイスを RAID1 アレイに変換すると、新しいメタデータサブボリュームが作成され、リニアボリュームと同じ物理ボリューム上の元の論理ボリュームと関連付けられます。追加のイメージは、メタデータ/データサブボリュームのペアに追加されます。複製元の論理ボリュームとペアのメタデータイメージを同じ物理ボリュームに配置できないと、lvconvert は失敗します。

手順

  1. 変換が必要な論理ボリュームデバイスを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV     Copy%  Devices
      my_lv         /dev/sde1(0)
  2. リニア論理ボリュームを RAID デバイスに変換します。以下のコマンドは、ボリュームグループ __my_vg のリニア論理ボリューム my_lv を、2 方向の RAID1 アレイに変換します。

    # lvconvert --type raid1 -m 1 my_vg/my_lv
      Are you sure you want to convert linear LV my_vg/my_lv to raid1 with 2 images enhancing resilience? [y/n]: y
      Logical volume my_vg/my_lv successfully converted.

検証

  • 論理ボリュームが RAID デバイスに変換されているかどうかを確認します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            6.25   my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sde1(0)
      [my_lv_rimage_1]        /dev/sdf1(1)
      [my_lv_rmeta_0]         /dev/sde1(256)
      [my_lv_rmeta_1]         /dev/sdf1(0)

関連情報

  • システム上の lvconvert(8) man ページ

8.12. LVM RAID1 論理ボリュームを LVM リニア論理ボリュームに変換

既存の RAID1 LVM 論理ボリュームを LVM リニア論理ボリュームに変換することができます。この操作を行うには、lvconvert コマンドを使用し、-m0 引数を指定します。これにより、RAID アレイを構成する全 RAID データサブボリュームおよび全 RAID メタデータサブボリュームが削除され、最高レベルの RAID1 イメージがリニア論理ボリュームとして残されます。

手順

  1. 既存の LVM RAID1 論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sde1(1)
      [my_lv_rimage_1]        /dev/sdf1(1)
      [my_lv_rmeta_0]         /dev/sde1(0)
      [my_lv_rmeta_1]         /dev/sdf1(0)
  2. 既存の RAID1 LVM 論理ボリュームを LVM リニア論理ボリュームに変換します。以下のコマンドは、LVM RAID1 論理ボリューム my_vg/my_lv を、LVM リニアデバイスに変換します。

    # lvconvert -m0 my_vg/my_lv
      Are you sure you want to convert raid1 LV my_vg/my_lv to type linear losing all resilience? [y/n]: y
      Logical volume my_vg/my_lv successfully converted.

    LVM RAID1 論理ボリュームを LVM リニアボリュームに変換する場合は、削除する物理ボリュームを指定することもできます。以下の例では、lvconvert コマンドは /dev/sde1 を削除して、/dev/sdf1 をリニアデバイスを構成する物理ボリュームとして残すように指定します。

    # lvconvert -m0 my_vg/my_lv /dev/sde1

検証

  • RAID1 論理ボリュームが LVM リニアデバイスに変換されたかどうかを確認します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV    Copy%  Devices
      my_lv        /dev/sdf1(1)

関連情報

  • システム上の lvconvert(8) man ページ

8.13. ミラーリングされた LVM デバイスの RAID1 論理ボリュームへの変換

セグメントタイプのミラーを持つ既存のミラーリングされた LVM デバイスを RAID1 LVM デバイスに変換できます。この操作を行うには、--type raid1 引数を指定して、lvconvert コマンドを使用します。これにより、mimage という名前のミラーサブボリュームの名前が、rimage という名前の RAID サブボリュームに変更されます。

さらに、ミラーログも削除し、対応するデータサブボリュームと同じ物理ボリューム上に、データサブボリューム用の rmeta という名前のメタデータサブボリュームを作成します。

手順

  1. ミラーリングされた論理ボリューム my_vg/my_lv のレイアウトを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv             15.20 my_lv_mimage_0(0),my_lv_mimage_1(0)
      [my_lv_mimage_0]        /dev/sde1(0)
      [my_lv_mimage_1]        /dev/sdf1(0)
      [my_lv_mlog]            /dev/sdd1(0)
  2. ミラーリングされた論理ボリューム my_vg/my_lv を RAID1 論理ボリュームに変換します。

    # lvconvert --type raid1 my_vg/my_lv
    Are you sure you want to convert mirror LV my_vg/my_lv to raid1 type? [y/n]: y
    Logical volume my_vg/my_lv successfully converted.

検証

  • ミラーリングされた論理ボリュームが RAID1 論理ボリュームに変換されているかどうかを確認します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sde1(0)
      [my_lv_rimage_1]        /dev/sdf1(0)
      [my_lv_rmeta_0]         /dev/sde1(125)
      [my_lv_rmeta_1]         /dev/sdf1(125)

関連情報

  • システム上の lvconvert(8) man ページ

8.14. 既存の RAID1 デバイスのイメージ数を変更

LVM ミラーリングの実装でイメージの数を変更できる方法と同様に、既存の RAID1 アレイのイメージの数を変更できます。

lvconvert コマンドを使用して RAID1 論理ボリュームにイメージを追加すると、次の操作を実行できます。

  • 結果として作成されるデバイス用イメージの総数を指定する
  • デバイスに追加するイメージの数
  • オプションで、新しいメタデータ/データイメージのペアが存在する物理ボリュームを指定する

手順

  1. 2 ウェイ RAID1 アレイである LVM デバイス my_vg/my_lv を表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV                Copy%  Devices
      my_lv             6.25    my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]         /dev/sde1(0)
      [my_lv_rimage_1]         /dev/sdf1(1)
      [my_lv_rmeta_0]          /dev/sde1(256)
      [my_lv_rmeta_1]          /dev/sdf1(0)

    メタデータサブボリューム (rmeta と呼ばれる) は、対応するデータサブボリューム (rimage) と同じ物理デバイスに常に存在します。メタデータ/データのサブボリュームのペアは、--alloc をどこかに指定しない限り、RAID アレイにある別のメタデータ/データサブボリュームのペアと同じ物理ボリュームには作成されません。

  2. 2 ウェイ RAID1 論理ボリューム my_vg/my_lv を 3 ウェイ RAID1 論理ボリュームに変換します。

    # lvconvert -m 2 my_vg/my_lv
    Are you sure you want to convert raid1 LV my_vg/my_lv to 3 images enhancing resilience? [y/n]: y
    Logical volume my_vg/my_lv successfully converted.

    既存の RAID1 デバイスのイメージ数を変更する場合の例を以下に示します。

    • また、RAID にイメージを追加する際に、使用する物理ボリュームを指定することもできます。次のコマンドは、アレイに使用する物理ボリューム /dev/sdd1 を指定することにより、2 方向 RAID1 論理ボリューム my_vg/my_lv を 3 方向 RAID1 論理ボリュームに変換します。

      # lvconvert -m 2 my_vg/my_lv /dev/sdd1
    • 3 方向 RAID1 論理ボリュームを 2 方向 RAID1 論理ボリュームに変換します。

      # lvconvert -m1 my_vg/my_lv
      Are you sure you want to convert raid1 LV my_vg/my_lv to 2 images reducing resilience? [y/n]: y
      Logical volume my_vg/my_lv successfully converted.
    • 削除するイメージを含む物理ボリューム /dev/sde1 を指定して、3 方向 RAID1 論理ボリュームを 2 方向 RAID1 論理ボリュームに変換します。

      # lvconvert -m1 my_vg/my_lv /dev/sde1

      また、イメージとその関連付けられたメタデータのサブボリュームを削除すると、それよりも大きな番号のイメージが下に移動してそのスロットを引き継ぎます。lv_rimage_0lv_rimage_1、および lv_rimage_2 で構成される 3 方向 RAID1 アレイからlv_rimage_1 を削除すると、lv_rimage_0lv_rimage_1 で構成される RAID1 アレイになります。サブボリューム lv_rimage_2 の名前が、空のスロットを引き継いで lv_rimage_1 になります。

検証

  • 既存の RAID1 デバイスのイメージ数を変更した後に、RAID1 デバイスを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV Cpy%Sync Devices
      my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0] /dev/sdd1(1)
      [my_lv_rimage_1] /dev/sde1(1)
      [my_lv_rimage_2] /dev/sdf1(1)
      [my_lv_rmeta_0] /dev/sdd1(0)
      [my_lv_rmeta_1] /dev/sde1(0)
      [my_lv_rmeta_2] /dev/sdf1(0)

関連情報

  • システム上の lvconvert(8) man ページ

8.15. RAID イメージを複数の論理ボリュームに分割

RAID 論理ボリュームのイメージを分割して新しい論理ボリュームを形成できます。既存の RAID1 論理ボリュームから RAID イメージを削除する場合と同様に、RAID データのサブボリューム (およびその関連付けられたメタデータのサブボリューム) をデバイスから削除する場合、それより大きい番号のイメージは、そのスロットを埋めるために番号が変更になります。そのため、RAID アレイを構成する論理ボリューム上のインデックス番号は連続する整数となります。

注記

RAID1 アレイがまだ同期していない場合は、RAID イメージを分割できません。

手順

  1. 2 ウェイ RAID1 アレイである LVM デバイス my_vg/my_lv を表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv             12.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sde1(1)
      [my_lv_rimage_1]        /dev/sdf1(1)
      [my_lv_rmeta_0]         /dev/sde1(0)
      [my_lv_rmeta_1]         /dev/sdf1(0)
  2. RAID イメージを別の論理ボリュームに分割します。

    • 以下の例は、2 方向の RAID1 論理ボリューム my_lv を、my_lvnew の 2 つのリニア論理ボリュームに分割します。

      # lvconvert --splitmirror 1 -n new my_vg/my_lv
      Are you sure you want to split raid1 LV my_vg/my_lv losing all resilience? [y/n]: y
    • 以下の例は、3 方向の RAID1 論理ボリューム my_lv を、2 方向の RAID1 論理ボリューム my_lv と、リニア論理ボリューム new に分割します。

      # lvconvert --splitmirror 1 -n new my_vg/my_lv

検証

  • RAID 論理ボリュームのイメージを分割した後に、論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV      Copy%  Devices
      my_lv          /dev/sde1(1)
      new            /dev/sdf1(1)

関連情報

  • システム上の lvconvert(8) man ページ

8.16. RAID イメージの分割とマージ

lvconvert コマンドで、--splitmirrors 引数とともに --trackchanges 引数を使用すると、すべての変更を追跡しながら、RAID1 アレイのイメージを一時的に読み取り専用に分割できます。この機能を使えば、イメージを分割した後に変更した部分のみを再同期しながら、後でイメージをアレイに統合することができます。

--trackchanges 引数を使用して RAID イメージを分割する場合、分割するイメージを指定することはできますが、分割されるボリューム名を変更することはできません。また、作成されたボリュームには以下の制約があります。

  • 作成された新規ボリュームは読み取り専用です。
  • 新規ボリュームのサイズは変更できません。
  • 残りのアレイの名前は変更できません。
  • 残りのアレイのサイズは変更できません。
  • 新規のボリュームと、残りのアレイを個別にアクティブにすることはできません。

分割されたイメージを結合することができます。イメージをマージすると、イメージが分割されてから変更したアレイの部分のみが再同期されます。

手順

  1. RAID 論理ボリュームを作成します。

    # lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg
      Logical volume "my_lv" created
  2. オプション: 作成された RAID 論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv          100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        /dev/sdb1(1)
      [my_lv_rimage_1]        /dev/sdc1(1)
      [my_lv_rimage_2]        /dev/sdd1(1)
      [my_lv_rmeta_0]         /dev/sdb1(0)
      [my_lv_rmeta_1]         /dev/sdc1(0)
      [my_lv_rmeta_2]         /dev/sdd1(0)
  3. 作成した RAID 論理ボリュームからイメージを分割し、残りのアレイへの変更を追跡します。

    # lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
      my_lv_rimage_2 split from my_lv for read-only purposes.
      Use 'lvconvert --merge my_vg/my_lv_rimage_2' to merge back into my_lv
  4. オプション: イメージを分割した後、論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sdc1(1)
      [my_lv_rimage_1]          /dev/sdd1(1)
      [my_lv_rmeta_0]         /dev/sdc1(0)
      [my_lv_rmeta_1]         /dev/sdd1(0)
  5. ボリュームをアレイにマージして戻します。

    # lvconvert --merge my_vg/my_lv_rimage_1
      my_vg/my_lv_rimage_1 successfully merged back into my_vg/my_lv

検証

  • マージされた論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sdc1(1)
      [my_lv_rimage_1]        /dev/sdd1(1)
      [my_lv_rmeta_0]         /dev/sdc1(0)
      [my_lv_rmeta_1]         /dev/sdd1(0)

関連情報

  • システム上の lvconvert(8) man ページ

8.17. RAID 障害ポリシーを allocate に設定する

/etc/lvm/lvm.conf ファイルで、raid_fault_policy フィールドを allocate パラメーターに設定できます。この設定を使用すると、システムは障害が発生したデバイスをボリュームグループのスペアデバイスと交換しようとします。スペアデバイスがない場合は、システムログにこの情報が追加されます。

手順

  1. RAID 論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
    
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        /dev/sdb1(1)
      [my_lv_rimage_1]        /dev/sdc1(1)
      [my_lv_rimage_2]        /dev/sdd1(1)
      [my_lv_rmeta_0]         /dev/sdb1(0)
      [my_lv_rmeta_1]         /dev/sdc1(0)
      [my_lv_rmeta_2]         /dev/sdd1(0)
  2. /dev/sdb デバイスに障害が発生したら、RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
    
      /dev/sdb: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        [unknown](1)
      [my_lv_rimage_1]        /dev/sdc1(1)
      [...]

    /dev/sdb デバイスに障害が発生した場合は、システムログを表示してエラーメッセージを確認することもできます。

  3. lvm.conf ファイルで、raid_fault_policy フィールドを allocate に設定します。

     # vi /etc/lvm/lvm.conf
     raid_fault_policy = "allocate"
    注記

    raid_fault_policyallocate に設定しても、スペアデバイスがない場合、割り当ては失敗し、論理ボリュームがそのままの状態になります。割り当てが失敗した場合は、lvconvert --repair コマンドを使用して、失敗したデバイスを修復および交換できます。詳細は、論理ボリュームに障害が発生した RAID デバイスの交換 を参照してください。

検証

  • 障害が発生したデバイスがボリュームグループの新しいデバイスに置き換えられたかどうかを確認します。

    # lvs -a -o name,copy_percent,devices my_vg
      Couldn't find device with uuid 3lugiV-3eSP-AFAR-sdrP-H20O-wM2M-qdMANy.
      LV            Copy%  Devices
      lv            100.00 lv_rimage_0(0),lv_rimage_1(0),lv_rimage_2(0)
      [lv_rimage_0]        /dev/sdh1(1)
      [lv_rimage_1]        /dev/sdc1(1)
      [lv_rimage_2]        /dev/sdd1(1)
      [lv_rmeta_0]         /dev/sdh1(0)
      [lv_rmeta_1]         /dev/sdc1(0)
      [lv_rmeta_2]         /dev/sdd1(0)
    注記

    障害が発生したデバイスは交換されたが、デバイスがまだボリュームグループから削除されていないため、LVM によって障害が発生したデバイスが検出されなかったことが表示されます。vgreduce --removemissing my_vg コマンドを実行すると、障害が発生したデバイスをボリュームグループから削除できます。

関連情報

  • システム上の lvm.conf(5) man ページ

8.18. RAID 障害ポリシーを warn に設定する

lvm.conf ファイルで、raid_fault_policy フィールドを warn パラメーターに設定できます。この設定を使用すると、システムは、障害が発生したデバイスを示す警告をシステムログに追加します。警告に基づいて、その後の手順を決定できます。

デフォルトでは、lvm.confraid_fault_policy フィールドの値は warn です。

手順

  1. RAID 論理ボリュームを表示します。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        /dev/sdb1(1)
      [my_lv_rimage_1]        /dev/sdc1(1)
      [my_lv_rimage_2]        /dev/sdd1(1)
      [my_lv_rmeta_0]         /dev/sdb1(0)
      [my_lv_rmeta_1]         /dev/sdc1(0)
      [my_lv_rmeta_2]         /dev/sdd1(0)
  2. lvm.conf ファイルで、raid_fault_policy フィールドを warn に設定します。

    # vi /etc/lvm/lvm.conf
     # This configuration option has an automatic default value.
     raid_fault_policy = "warn"
  3. /dev/sdb デバイスに障害が発生したら、システムログを表示してエラーメッセージを表示します。

    # grep lvm /var/log/messages
    
    Apr 14 18:48:59 virt-506 kernel: sd 25:0:0:0: rejecting I/O to offline device
    Apr 14 18:48:59 virt-506 kernel: I/O error, dev sdb, sector 8200 op 0x1:(WRITE) flags 0x20800 phys_seg 0 prio class 2
    [...]
    Apr 14 18:48:59 virt-506 dmeventd[91060]: WARNING: VG my_vg is missing PV 9R2TVV-bwfn-Bdyj-Gucu-1p4F-qJ2Q-82kCAF (last written to /dev/sdb).
    Apr 14 18:48:59 virt-506 dmeventd[91060]: WARNING: Couldn't find device with uuid 9R2TVV-bwfn-Bdyj-Gucu-1p4F-qJ2Q-82kCAF.
    Apr 14 18:48:59 virt-506 dmeventd[91060]: Use 'lvconvert --repair my_vg/ly_lv' to replace failed device.

    /dev/sdb デバイスに障害が発生すると、システムログにエラーメッセージが表示されます。ただし、この場合、LVM はイメージの 1 つを置き換えて、RAID デバイスを自動的に修復しようとはしません。したがって、デバイスに障害が発生したら、lvconvert コマンドの --repair 引数を使用してデバイスを置き換えることができます。詳細は、論理ボリュームに障害が発生した RAID デバイスの交換 を参照してください。

関連情報

  • システム上の lvm.conf(5) man ページ

8.19. 動作中の RAID デバイスの交換

lvconvert コマンドの --replace 引数を使用して、論理ボリューム内の動作中の RAID デバイスを交換できます。

警告

RAID デバイスに障害が発生した場合、次のコマンドは機能しません。

前提条件

  • RAID デバイスに障害が発生していません。

手順

  1. RAID1 アレイを作成します。

    # lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg
      Logical volume "my_lv" created
  2. 作成した RAID1 アレイを調べます。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        /dev/sdb1(1)
      [my_lv_rimage_1]        /dev/sdb2(1)
      [my_lv_rimage_2]        /dev/sdc1(1)
      [my_lv_rmeta_0]         /dev/sdb1(0)
      [my_lv_rmeta_1]         /dev/sdb2(0)
      [my_lv_rmeta_2]         /dev/sdc1(0)
  3. 要件に応じて、次のいずれかの方法で RAID デバイスを交換します。

    1. 交換する物理ボリュームを指定して、RAID1 デバイスを交換します。

      # lvconvert --replace /dev/sdb2 my_vg/my_lv
    2. 交換に使用する物理ボリュームを指定して、RAID1 デバイスを交換します。

      # lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1
    3. 複数の replace 引数を指定して、一度に複数の RAID デバイスを交換します。

      # lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv

検証

  1. 交換する物理ボリュームを指定した後、RAID1 アレイを調べます。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv             37.50 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        /dev/sdb1(1)
      [my_lv_rimage_1]        /dev/sdc2(1)
      [my_lv_rimage_2]        /dev/sdc1(1)
      [my_lv_rmeta_0]         /dev/sdb1(0)
      [my_lv_rmeta_1]         /dev/sdc2(0)
      [my_lv_rmeta_2]         /dev/sdc1(0)
  2. 交換に使用する物理ボリュームを指定した後、RAID1 アレイを調べます。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv             28.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
      [my_lv_rimage_0]        /dev/sda1(1)
      [my_lv_rimage_1]        /dev/sdd1(1)
      [my_lv_rmeta_0]         /dev/sda1(0)
      [my_lv_rmeta_1]         /dev/sdd1(0)
  3. 一度に複数の RAID デバイスを交換した後、RAID1 アレイを調べます。

    # lvs -a -o name,copy_percent,devices my_vg
      LV               Copy%  Devices
      my_lv             60.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]        /dev/sda1(1)
      [my_lv_rimage_1]        /dev/sdd1(1)
      [my_lv_rimage_2]        /dev/sde1(1)
      [my_lv_rmeta_0]         /dev/sda1(0)
      [my_lv_rmeta_1]         /dev/sdd1(0)
      [my_lv_rmeta_2]         /dev/sde1(0)

関連情報

  • システム上の lvconvert(8) man ページ

8.20. 論理ボリュームに障害が発生した RAID デバイスの交換

RAID は従来の LVM ミラーリングとは異なります。LVM ミラーリングの場合は、障害が発生したデバイスを削除します。そうしないと、障害が発生したデバイスで RAID アレイが動作し続ける間、ミラーリングされた論理ボリュームがハングします。RAID1 以外の RAID レベルの場合、デバイスを削除すると、デバイスはより低いレベルの RAID に変換されます (たとえば、RAID6 から RAID5 へ、または RAID4 または RAID5 から RAID0 への変換)。

LVM では、障害が発生したデバイスを取り外して代替デバイスを割り当てる代わりに、lvconvert コマンドの --repair 引数を使用して、RAID 論理ボリューム内で物理ボリュームとして機能する障害が発生したデバイスを交換できます。

前提条件

  • ボリュームグループには、障害が発生したデバイスを置き換えるのに十分な空き容量を提供する物理ボリュームが含まれています。

    ボリュームグループに十分な空きエクステントがある物理ボリュームがない場合は、vgextend ユーティリティーを使用して、十分なサイズの物理ボリュームを新たに追加します。

手順

  1. RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
      LV               Cpy%Sync Devices
      my_lv            100.00   my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdc1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdc1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)
  2. /dev/sdc デバイスに障害が発生したら、RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
      /dev/sdc: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
      LV               Cpy%Sync Devices
      my_lv            100.00   my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          [unknown](1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           [unknown](0)
      [my_lv_rmeta_2]           /dev/sdd1(0)
  3. 障害が発生したデバイスを交換します。

    # lvconvert --repair my_vg/my_lv
      /dev/sdc: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
    Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
    Faulty devices in my_vg/my_lv successfully replaced.
  4. オプション: 障害が発生したデバイスを置き換える物理ボリュームを手動で指定します。

    # lvconvert --repair my_vg/my_lv replacement_pv
  5. 代替の論理ボリュームを調べます。

    # lvs --all --options name,copy_percent,devices my_vg
    
      /dev/sdc: open failed: No such device or address
      /dev/sdc1: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      LV               Cpy%Sync Devices
      my_lv            43.79    my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdb1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdb1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)

    障害が発生したデバイスをボリュームグループから削除するまで、LVM ユーティリティーは、障害が発生したデバイスが見つけられないことを示しています。

  6. 障害が発生したデバイスをボリュームグループから削除します。

    # vgreduce --removemissing my_vg

検証

  1. 障害が発生したデバイスを取り外した後、利用可能な物理ボリュームを表示します。

    # pvscan
    PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free]
    PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
    PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
    PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
  2. 障害が発生したデバイスを交換した後、論理ボリュームを調べます。

    # lvs --all --options name,copy_percent,devices my_vg
    my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdb1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdb1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)

関連情報

  • システム上の lvconvert(8) および vgreduce(8) man ページ

8.21. RAID 論理ボリュームでのデータ整合性の確認

LVM は、RAID 論理ボリュームのスクラビングに対応します。RAID スクラビングは、アレイ内のデータおよびパリティーブロックをすべて読み込み、それが一貫しているかどうかを確認するプロセスです。lvchange --syncaction repair コマンドは、アレイでバックグラウンドの同期アクションを開始します。

手順

  1. オプション: 次のいずれかのオプションを設定して、RAID 論理ボリュームが初期化される速度を制御します。

    • --maxrecoveryrate Rate[bBsSkKmMgG] は、RAID 論理ボリュームの最大復旧速度を設定し、通常の I/O 操作が排除されないようにします。
    • --minrecoveryrate Rate[bBsSkKmMgG] は、RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、同期操作の I/O が最小スループットを達成できるようにします。

      # lvchange --maxrecoveryrate 4K my_vg/my_lv
      Logical volume _my_vg/my_lv_changed.

      4K は、アレイに含まれる各デバイスの 1 秒あたりの値である復旧速度の値に置き換えます。接尾辞を指定しないと、デバイスごとの 1 秒あたりの kiB が想定されます。

      # lvchange --syncaction repair my_vg/my_lv

      RAID スクラビング操作を実行すると、sync アクションに必要なバックグラウンド I/O が、LVM デバイスへの他の I/O (ボリュームグループメタデータの更新など) よりも優先される可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。

      注記

      これらの最大および最小 I/O 速度は、RAID デバイスを作成するときに使用することもできます。たとえば、lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg を使用すると、ボリュームグループ my_vg 内に、3 ストライプでサイズが 10 G、最大復旧速度が 128 kiB/秒/デバイスの 2 方向の RAID10 アレイ my_lv が作成されます。

  2. アレイ内の不一致数を修復せずに、アレイ内の不一致の数を表示します。

    # lvchange --syncaction check my_vg/my_lv

    このコマンドは、アレイでバックグラウンドの同期アクションを開始します。

  3. オプション: var/log/syslog ファイルでカーネルメッセージを確認します。
  4. アレイ内の不一致を修正します。

    # lvchange --syncaction repair my_vg/my_lv

    このコマンドは、RAID 論理ボリューム内の障害が発生したデバイスを修復または交換します。このコマンドを実行したら、var/log/syslog ファイルでカーネルメッセージを確認できます。

検証

  1. スクラビング操作に関する情報を表示します。

    # lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv
    LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
    my_lv my_vg rwi-a-r--- 500.00m                                    100.00           idle        0

関連情報

8.22. RAID1 論理ボリュームでの I/O 操作

lvchange コマンドの --writemostly パラメーターおよび --writebehind パラメーターを使用して、RAID1 論理ボリュームのデバイスに対する I/O 操作を制御できます。これらのパラメーターを使用する形式は次のとおりです。

--[raid]writemostly PhysicalVolume[:{t|y|n}]

RAID1 論理ボリューム内のデバイスは、write-mostly としてマークして、必要な場合を除き、これらのドライブに対するすべての読み取りアクションを回避します。このパラメーターを設定することにより、ドライブに対する I/O 操作の回数を最小限に抑えることができます。

このパラメーターを設定するには、lvchange --writemostly /dev/sdb my_vg/my_lv コマンドを使用します。

次の方法で writemostly 属性を設定できます。

:y
デフォルトでは、論理ボリューム内の指定された物理ボリュームの writemostly 属性の値は yes です。
:n
writemostly フラグを削除するには、物理ボリュームに :n を追加します。
:t

writemostly 属性の値を切り替えるには、--writemostly 引数を指定します。

この引数は、1 つのコマンドで複数回使用できます (例: lvchange --writemostly /dev/sdd1:n --writemostly /dev/sdb1:t --writemostly /dev/sdc1:y my_vg/my_lv)。これにより、論理ボリュームに含まれるすべての物理ボリュームの writemostly 属性を一度に切り替えることができます。

--[raid]writebehind IOCount

writemostly としてマークされた保留中の書き込みの最大数を指定します。これらは、RAID1 論理ボリューム内のデバイスに適用される書き込み操作の数です。このパラメーターの値を超えると、RAID アレイがすべての書き込みアクションの完了を通知する前に、構成デバイスへのすべての書き込みアクションが同期的に完了します。

このパラメーターは、lvchange --writebehind 100 my_vg/my_lv コマンドを使用して設定できます。writemostly 属性の値をゼロに設定すると、設定がクリアされます。この設定では、システムが値を任意に選択します。

8.23. RAID ボリュームの再形成

RAID の再形成とは、RAID レベルを変更せずに、RAID 論理ボリュームの属性を変更することを意味します。変更できる属性には、RAID レイアウト、ストライプのサイズ、ストライプの数などがあります。

手順

  1. RAID 論理ボリュームを作成します。

    # lvcreate --type raid5 -i 2 -L 500M -n my_lv my_vg
    
    Using default stripesize 64.00 KiB.
    Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents).
    Logical volume "my_lv" created.
  2. RAID 論理ボリュームを表示します。

    # lvs -a -o +devices
    
    LV               VG    Attr       LSize   Pool   Origin Data% Meta% Move Log Cpy%Sync Convert Devices
    my_lv            my_vg rwi-a-r--- 504.00m                                    100.00            my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
    [my_lv_rimage_0] my_vg iwi-aor--- 252.00m                                                      /dev/sda(1)
    [my_lv_rimage_1] my_vg iwi-aor--- 252.00m                                                      /dev/sdb(1)
    [my_lv_rimage_2] my_vg iwi-aor--- 252.00m                                                      /dev/sdc(1)
    [my_lv_rmeta_0]  my_vg ewi-aor---   4.00m                                                      /dev/sda(0)
    [my_lv_rmeta_1]  my_vg ewi-aor---   4.00m                                                      /dev/sdb(0)
    [my_lv_rmeta_2]  my_vg ewi-aor---   4.00m                                                      /dev/sdc(0)
  3. オプション: RAID 論理ボリュームの stripes イメージと stripesize を表示します。

    # lvs -o stripes my_vg/my_lv
      #Str
         3
    # lvs -o stripesize my_vg/my_lv
      Stripe
      64.00k
  4. 要件に応じて次の方法を使用して、RAID 論理ボリュームの属性を変更します。

    1. RAID 論理ボリュームの stripes イメージを変更します。

      # lvconvert --stripes 3 my_vg/my_lv
      Using default stripesize 64.00 KiB.
      WARNING: Adding stripes to active logical volume my_vg/my_lv will grow it from 126 to 189 extents!
      Run "lvresize -l126 my_vg/my_lv" to shrink it or use the additional capacity.
      Are you sure you want to add 1 images to raid5 LV my_vg/my_lv? [y/n]: y
      Logical volume my_vg/my_lv successfully converted.
    2. RAID 論理ボリュームの stripesize を変更します。

      # lvconvert --stripesize 128k my_vg/my_lv
        Converting stripesize 64.00 KiB of raid5 LV my_vg/my_lv to 128.00 KiB.
      Are you sure you want to convert raid5 LV my_vg/my_lv? [y/n]: y
        Logical volume my_vg/my_lv successfully converted.
    3. maxrecoveryrate 属性と minrecoveryrate 属性を変更します。

      # lvchange --maxrecoveryrate 4M my_vg/my_lv
        Logical volume my_vg/my_lv changed.
      # lvchange --minrecoveryrate 1M my_vg/my_lv
        Logical volume my_vg/my_lv changed.
    4. syncaction 属性を変更します。

      # lvchange --syncaction check my_vg/my_lv
    5. writemostly 属性と writebehind 属性を変更します。

      # lvchange --writemostly /dev/sdb my_vg/my_lv
        Logical volume my_vg/my_lv changed.
      # lvchange --writebehind 100 my_vg/my_lv
        Logical volume my_vg/my_lv changed.

検証

  1. RAID 論理ボリュームの stripes イメージと stripesize を表示します。

    # lvs -o stripes my_vg/my_lv
      #Str
         4
    # lvs -o stripesize my_vg/my_lv
      Stripe
      128.00k
  2. maxrecoveryrate 属性を変更した後、RAID 論理ボリュームを表示します。

    # lvs -a -o +raid_max_recovery_rate
      LV               VG       Attr        LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert MaxSync
      my_lv            my_vg    rwi-a-r---  10.00g                                     100.00           4096
      [my_lv_rimage_0] my_vg    iwi-aor---  10.00g
     [...]
  3. minrecoveryrate 属性を変更した後、RAID 論理ボリュームを表示します。

    # lvs -a -o +raid_min_recovery_rate
      LV               VG     Attr        LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert MinSync
      my_lv            my_vg  rwi-a-r---  10.00g                                     100.00           1024
      [my_lv_rimage_0] my_vg  iwi-aor---  10.00g
      [...]
  4. syncaction 属性を変更した後、RAID 論理ボリュームを表示します。

    # lvs -a
      LV               VG      Attr        LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      my_lv            my_vg   rwi-a-r---  10.00g                                     2.66
      [my_lv_rimage_0] my_vg   iwi-aor---  10.00g
      [...]

関連情報

  • システム上の lvconvert(8) および lvmraid(8) man ページ

8.24. RAID 論理ボリュームのリージョンサイズの変更

RAID 論理ボリュームを作成する場合、/etc/lvm/lvm.conf ファイルの raid_region_size パラメーターは、RAID 論理ボリュームのリージョンサイズを表します。RAID 論理ボリュームを作成した後、ボリュームのリージョンサイズを変更できます。このパラメーターは、ダーティーまたはクリーンな状態を追跡する粒度を定義します。ビットマップ内のダーティービットは、システム障害などの RAID ボリュームのダーティーシャットダウン後に同期するワークセットを定義します。

raid_region_size をより高い値に設定すると、ビットマップのサイズと輻輳が軽減されます。ただし、リージョンの同期が完了するまで RAID への書き込みが延期されるため、リージョンの再同期中の write 操作に影響が生じます。

手順

  1. RAID 論理ボリュームを作成します。

    # lvcreate --type raid1 -m 1 -L 10G test
      Logical volume "lvol0" created.
  2. RAID 論理ボリュームを表示します。

    # lvs -a -o +devices,region_size
    
    LV                VG      Attr     LSize Pool Origin Data% Meta% Move Log   Cpy%Sync Convert Devices                              Region
    lvol0             test rwi-a-r--- 10.00g                                    100.00           lvol0_rimage_0(0),lvol0_rimage_1(0)  2.00m
    [lvol0_rimage_0]  test iwi-aor--- 10.00g                                                     /dev/sde1(1)                            0
    [lvol0_rimage_1]  test iwi-aor--- 10.00g                                                     /dev/sdf1(1)                            0
    [lvol0_rmeta_0]   test ewi-aor---  4.00m                                                     /dev/sde1(0)                            0
    [lvol0_rmeta_1]   test ewi-aor---  4.00m

    Region 列は、raid_region_size パラメーターの値を示します。

  3. オプション: raid_region_size パラメーターの値を表示します。

    # cat /etc/lvm/lvm.conf | grep raid_region_size
    
    # Configuration option activation/raid_region_size.
    	# raid_region_size = 2048
  4. RAID 論理ボリュームのリージョンサイズを変更します。

    # lvconvert -R 4096K my_vg/my_lv
    
    Do you really want to change the region_size 512.00 KiB of LV my_vg/my_lv to 4.00 MiB? [y/n]: y
      Changed region size on RAID LV my_vg/my_lv to 4.00 MiB.
  5. RAID 論理ボリュームを再同期します。

    # lvchange --resync my_vg/my_lv
    
    Do you really want to deactivate logical volume my_vg/my_lv to resync it? [y/n]: y

検証

  1. RAID 論理ボリュームを表示します。

    # lvs -a -o +devices,region_size
    
    LV               VG   Attr        LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices                              Region
    lvol0            test rwi-a-r--- 10.00g                                    6.25           lvol0_rimage_0(0),lvol0_rimage_1(0)  4.00m
    [lvol0_rimage_0] test iwi-aor--- 10.00g                                                   /dev/sde1(1)                            0
    [lvol0_rimage_1] test iwi-aor--- 10.00g                                                   /dev/sdf1(1)                            0
    [lvol0_rmeta_0]  test ewi-aor---  4.00m                                                   /dev/sde1(0)                            0

    Region 列には、raid_region_size パラメーターの変更後の値が表示されます。

  2. lvm.conf ファイル内の raid_region_size パラメーターの値を確認します。

    # cat /etc/lvm/lvm.conf | grep raid_region_size
    
    # Configuration option activation/raid_region_size.
    	# raid_region_size = 4096

関連情報

  • システム上の lvconvert(8) man ページ

第9章 LVM デバイスの可視性および使用を制限する

論理ボリュームマネージャー (LVM) がスキャンできるデバイスを制御することにより、LVM で表示および使用できるデバイスを制限できます。

LVM コマンドを使用して、LVM デバイスのスキャンを制御します。LVM コマンドは、system.devices ファイルと呼ばれるファイルとやり取りします。このファイルには、表示可能で使用可能なデバイスがリストされています。この機能は、デフォルトでは Red Hat Enterprise Linux 9 で有効になっています。

デバイスファイル機能を無効にすると、LVM デバイスフィルターが自動的に有効になります。

LVM デバイススキャンの設定を調整するには、/etc/lvm/lvm.conf ファイルで LVM デバイスフィルター設定を編集します。lvm.conf ファイル内のフィルターは、一連の単純な正規表現で構成されています。システムは、これらの式を /dev ディレクトリー内の各デバイス名に適用して、検出された各ブロックデバイスを受け入れるか拒否するかを決定します。

9.1. LVM デバイスファイル

論理ボリュームマネージャー (LVM) の system.devices ファイルは、LVM に対するデバイスの可視性および使いやすさを制御します。デバイスファイルは /etc/lvm/devices/ ディレクトリーにあります。デバイスファイルを管理するには、LVM コマンドを使用します。system.devices ファイルを直接編集しないでください。

Red Hat Enterprise Linux 9 では、デフォルトで system.devices ファイル機能が有効になっています。アクティブな場合、LVM デバイスフィルターを置き換えます。LVM デバイスフィルターを有効にするには、system.devices ファイルを無効にします。詳細は、system.devices ファイルの無効化 を参照してください。

9.1.1. 関連情報

  • システム上の lvmdevices(8) および lvm.conf(5) man ページ

9.1.2. system.devices ファイルへのデバイスの追加

論理ボリュームマネージャー (LVM) でデバイスを使用するには、system.devices ファイルにデバイス ID のリストが含まれている必要があります。含まれていない場合、LVM はデバイス ID を無視します。オペレーティングシステム (OS) インストーラーは、インストール中にデバイスを system.devices ファイルに追加します。新しくインストールされたシステムには、ルートデバイスが自動的にデバイスファイルに含まれます。OS のインストール中にシステムに接続された物理ボリューム (PV) もすべてデバイスファイルに含まれます。デバイスファイルにデバイスを明確に追加することもできます。LVM は、devices ファイルに保存されているデバイスのリストのみを検出して使用します。

手順

次のいずれかの方法を使用して、system.devices ファイルにデバイスを追加します。

  • デバイスの名前をデバイスファイルに含めて、デバイスを追加します。

    $ lvmdevices --adddev <device_name>
  • ボリュームグループ (VG) 内のすべてのデバイスをデバイスファイルに追加します。

    $ vgimportdevices <vg_name>
  • 表示されているすべての VG のすべてのデバイスをデバイスファイルに追加します。

    $ vgimportdevices --all

新しいデバイスを system.devices ファイルに暗黙的に含めるには、次のいずれかのコマンドを使用します。

  • pvcreate コマンドを使用して、新しいデバイスを初期化します。

    $ pvcreate <device_name>
    • このアクションにより、新しい物理ボリューム (PV) が system.devices ファイルに自動的に追加されます。
  • 新しいデバイスを初期化し、新しいデバイス引数をデバイスファイルに自動的に追加します。

    $ vgcreate <vg_name> <device_names>
    • <vg_name> を、デバイスを追加する VG の名前に置き換えます。
    • <device_names> を、追加するデバイスのスペース区切りのリストに置き換えます。
  • vgextend コマンドを使用して、新しいデバイスを初期化します。

    $ vgextend <vg_name> <device_names>
    • <vg_name> を、デバイスを追加する VG の名前に置き換えます。
    • <device_names> を、追加するデバイスの名前に置き換えます。
    • これにより、新しいデバイス引数がデバイスファイルに自動的に追加されます。

検証

次の検証は、system.devices ファイルに新しいデバイスを明示的に追加する必要がある場合にのみ使用してください。

  • system.devices ファイルを表示して、デバイスのリストを確認します。

    $ cat /etc/lvm/devices/system.devices
  • 最新のデバイス情報と一致するように system.devices ファイルを更新します。

    $ lvmdevices --update

関連情報

  • システム上の lvmdevices(8)pvcreate(8)vgcreate(8)、および vgextend(8) man ページ

9.1.3. system.devices ファイルからのデバイスの削除

デバイスを削除して、論理ボリュームマネージャー (LVM) がそのデバイスを検出または使用しないようにします。

手順

  • デバイスに関する情報に応じて、次のいずれかの方法を使用してデバイスを削除します。

    • 名前でデバイスを削除します。

      $ lvmdevices --deldev <device_name>
    • デバイスの物理ボリューム ID (PVID) でデバイスを削除します。

      $ lvmdevices --delpvid <PV_UUID>

検証

次の検証は、system.devices ファイル内のデバイスを明示的に削除する必要がある場合にのみ使用してください。

  • system.devices ファイルを表示して、削除されたデバイスが存在しないことを確認します。

    $ cat /etc/lvm/devices/system.devices
  • 最新のデバイス情報と一致するように system.devices ファイルを更新します。

    $ lvmdevices --update

関連情報

  • システム上の lvmdevices(8) man ページ

9.1.4. カスタムデバイスファイルの作成

Logical Volume Manager (LVM) コマンドは、システムのデフォルトの system.devices ファイルを使用します。LVM コマンドで新しいファイル名を指定することにより、カスタムデバイスファイルを作成して使用することもできます。カスタムデバイスファイルは、特定のアプリケーションだけが特定のデバイスを使用する必要がある場合に役立ちます。

手順

  1. /etc/lvm/devices/ ディレクトリーにカスタムデバイスファイルを作成します。
  2. LVM コマンドに新しいデバイスファイル名を含めます。

    $ lvmdevices --devicesfile <devices_file_name>
  3. オプション: 新しいデバイスファイルを表示して、新しいデバイスの名前が存在することを確認します。

    $ cat /etc/lvm/devices/<devices_file_name>

関連情報

  • システム上の lvmdevices(8) man ページ

9.1.5. システム上のすべてのデバイスへのアクセス

論理ボリュームマネージャー (LVM) を有効にして、システム上のすべてのデバイスにアクセスして使用することができます。これにより、system.devices ファイルにリストされているデバイスによって引き起こされる制限が上書きされます。

手順

  • 空のデバイスファイルを指定します。

    $ lvmdevices --devicesfile ""

関連情報

  • システム上の lvmdevices(8) man ページ

9.1.6. system.devices ファイルの無効化

system.devices ファイルの機能を無効にすることができます。このアクションにより、論理ボリュームマネージャー (LVM) デバイスフィルターが自動的に有効になります。

手順

  1. lvm.conf ファイルを開きます。
  2. devices セクションで次の値を設定します。
use_devicesfile=0
重要

system.devices ファイルを削除すると、このアクションによって効果的に無効になります。これは、devices セクションで use_devicesfile=1 を設定して、lvm.conf 設定ファイルで system.devices ファイルを有効にした場合でも適用されます。デバイスファイルを無効にすると、lvm.conf デバイスフィルターが自動的に有効になります。

関連情報

  • システム上の lvmdevices(8) および lvm.conf(5) man ページ

9.2. LVM フィルタリング用の永続的な識別子

/dev/sda などの従来の Linux デバイス名は、システム変更や再起動中に変更される可能性があります。World Wide Identifier (WWID)、汎用一意識別子 (UUID)、パス名などの永続的な命名属性 (PNA) は、ストレージデバイスの固有の特性に基づいており、ハードウェア設定の変更に対して耐久性があります。そのため、システムの再起動後もストレージデバイスがより安定し、予測可能になります。

LVM フィルタリングに永続的なデバイス識別子を実装すると、LVM 設定の安定性と信頼性が向上します。また、デバイス名が動的な性質を持つことによるシステム起動失敗のリスクも軽減されます。

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

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

9.3.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 設定フィールドは同等のものです。

重要

Red Hat Enterprise Linux 9 では、/etc/lvm/devices/system.devices ファイルがデフォルトで有効になっています。system.devices ファイルが無効になっている場合、システムは LVM デバイスフィルターを自動的に有効にします。

関連情報

  • システム上の lvm.conf(5) man ページ

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

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

注記

コピーまたはクローン作成された物理ボリューム (PV) を処理するときに、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|.*|" ]

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

関連情報

  • システム上の lvm.conf(5) man ページ

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

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

前提条件

  • system.devices ファイル機能が無効になっている。
  • 使用するデバイスフィルターパターンが準備されている。

手順

  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 ファイルシステムを再構築します。

第10章 LVM の割り当ての制御

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

10.1. 指定したデバイスからのエクステントの割り当て

lvcreate コマンドと lvconvert コマンドを使用する際に、コマンドラインの末尾でデバイス引数を使用すると、特定のデバイスからの割り当てに制限できます。より詳細に制御するために、各デバイスの実際のエクステント範囲を指定できます。このコマンドは単に、指定した物理ボリューム (PV) を引数として使用して、新しい論理ボリューム (LV) にエクステントを割り当てます。各 PV から利用可能なエクステントがなくなるまでエクステントを取得し、その後、次にリストされている PV からエクステントを取得します。リストされているすべての PV の領域が、要求された LV サイズに対して不足する場合、コマンドは失敗します。このコマンドは、指定した PV からのみ割り当てを行うことに注意してください。Raid LV は、個別の RAID イメージまたは個別のストライプにシーケンシャル PV を使用します。PV のサイズが RAID イメージ全体に対して十分でない場合、デバイスの使用量を完全に予測することはできません。

手順

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

    # vgcreate <vg_name> <PV> ...

    ここでは、以下のようになります。

    • <vg_name> は VG の名前です。
    • <PV> は PV です。
  2. PV を割り当てて、リニアや RAID などのさまざまなボリュームタイプを作成できます。

    1. エクステントを割り当ててリニアボリュームを作成します。

      # lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]

      ここでは、以下のようになります。

      • <lv_name> は LV の名前です。
      • <lv_size> は LV のサイズです。デフォルトの単位はメガバイトです。
      • <vg_name> は VG の名前です。
      • [ <PV …​> ] は PV です。

        コマンドラインでは、PV の 1 つを指定することも、すべての PV を指定することもできます。何も指定しないことも可能です。

        • 1 つの PV を指定すると、当該 PV から LV のエクステントが割り当てられます。

          注記

          PV に LV 全体に対する十分な空きエクステントがない場合、lvcreate は失敗します。

        • 2 つの PV を指定した場合、LV のエクステントは、当該 PV のうちの 1 つ、または両方の PV の組み合わせから割り当てられます。
        • PV を指定しない場合、エクステントは VG 内の PV の 1 つ、または VG 内のすべての PV の任意の組み合わせから割り当てられます。

          注記

          このような場合、LVM は、指定した PV または使用可能な PV のすべてを使用しない可能性があります。最初の PV に LV 全体に対して十分な空きエクステントがある場合、他の PV はおそらく使用されません。ただし、最初の PV に空きエクステントの割り当てサイズが設定されていない場合、LV の一部は最初の PV から割り当てられ、一部は 2 番目の PV から割り当てられる可能性があります。

          例10.1 1 つの PV からのエクステントの割り当て

          この例では、lv1 エクステントが sda から割り当てられます。

          # lvcreate -n lv1 -L1G vg /dev/sda

          例10.2 2 つの PV からのエクステントの割り当て

          この例では、lv2 エクステントが sdasdb、または両方の組み合わせから割り当てられます。

          # lvcreate -n lv2 L1G vg /dev/sda /dev/sdb

          例10.3 PV を指定しないエクステントの割り当て

          この例では、lv3 エクステントが、VG 内の PV の 1 つ、または VG 内のすべての PV の任意の組み合わせから割り当てられます。

          # lvcreate -n lv3 -L1G vg

          または、以下を実行します。

    2. エクステントを割り当てて RAID ボリュームを作成します。

      # lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]

      ここでは、以下のようになります。

      • <segment_type> は、指定したセグメントタイプ (例: raid5mirrorsnapshot) です。
      • <mirror_images> は、指定した数のイメージを含む、raid1 またはミラーリングされた LV を作成します。たとえば、-m 1 を指定すると、2 つのイメージを含む raid1 LV が作成されます。
      • <lv_name> は LV の名前です。
      • <lv_size> は LV のサイズです。デフォルトの単位はメガバイトです。
      • <vg_name> は VG の名前です。
      • <[PV …​]> は PV です。

        最初の RAID イメージは最初の PV から割り当てられ、2 番目の RAID イメージは 2 番目の PV から割り当てられます。以後も同様です。

        例10.4 2 つの PV からの RAID イメージの割り当て

        この例では、lv4 の最初の RAID イメージは sda から割り当てられ、2 番目のイメージは sdb から割り当てられます。

        # lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdb

        例10.5 3 つの PV からの RAID イメージの割り当て

        この例では、lv5 の最初の RAID イメージは sda から割り当てられ、2 番目のイメージは sdb から割り当てられ、3 番目のイメージは sdc から割り当てられます。

        # lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdc

関連情報

  • システム上の lvcreate(8)lvconvert(8)、および lvmraid(7) man ページ

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

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

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

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

  • contiguous ポリシーでは、LV の最初の論理エクステントを除き、論理エクステントの物理的位置が、直前の論理エクステントの物理的位置に隣接している必要があります。

    LV がストライプ化またはミラーリングされている場合、contiguous の割り当て制限は、領域を必要とする各ストライプまたは RAID イメージに個別に適用されます。

  • cling の割り当てポリシーでは、既存の LV に追加する論理エクステントに使用される PV が、その LV にある少なくとも 1 つの論理エクステントですでに使用されている必要があります。
  • normal の割り当てポリシーでは、並行 LV 内の同じオフセットで、並行 LV (つまり、異なるストライプまたは RAID イメージ) にすでに割り当てられている論理エクステントと同じ PV を共有する物理エクステントは選択されません。
  • 割り当て要求を満たすのに十分な空きエクステントがあっても、normal の割り当てポリシーによって使用されない場合は、たとえ同じ PV に 2 つのストライプを配置することによってパフォーマンスが低下しても、anywhere の割り当てポリシーがその空きエクステントを使用します。

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

注記

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

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

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

手順

  • device_name での物理エクステントの割り当てを無効にするには、次のコマンドを使用します。

    # pvchange -x n /dev/sdk1

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

関連情報

  • システム上の pvchange(8) man ページ

第11章 タグを使用した LVM オブジェクトのグループ化

論理ボリュームマネージャー (LVM) オブジェクトにタグを割り当てて、オブジェクトをグループ化できます。この機能を使用すると、アクティブ化など、LVM の動作の制御をグループごとに自動化できます。LVM オブジェクトの引数の代わりにタグを使用することもできます。

11.1. LVM オブジェクトタグ

論理ボリュームマネージャー (LVM) のタグは、同じタイプの LVM オブジェクトをグループ化するものです。タグは、物理ボリューム、ボリュームグループ、論理ボリュームなどのオブジェクトに割り当てることができます。

曖昧さを避けるために、各タグの先頭に @ を付けます。各タグは、そのタグを所有し、コマンドライン上の位置によって予期されるタイプのすべてのオブジェクトに置き換えることで拡張されます。

LVM タグは、最大 1024 文字の文字列です。LVM タグはハイフンで開始できません。

有効なタグは、限られた範囲の文字のみで構成されます。使用できる文字は、A-Z a-z 0-9 _ + . - / = ! : # & です。

タグを付けることができるのは、ボリュームグループ内のオブジェクトのみです。物理ボリュームは、ボリュームグループから削除されるとタグを失います。これは、タグがボリュームグループメタデータの一部として保存され、物理ボリュームが削除されると削除されるためです。

一部のコマンドは、同じタグを持つすべてのボリュームグループ (VG)、論理ボリューム (LV)、または物理ボリューム (PV) に適用できます。特定のコマンドの man ページには、VG|TagLV|TagPV|Tag など、VG、LV、PV 名の代わりにタグ名を使用できる場合の構文が表示されます。

11.2. LVM オブジェクトへのタグの追加

さまざまなボリューム管理コマンドで --addtag オプションを使用すると、LVM オブジェクトにタグを追加してグループ化できます。

前提条件

  • lvm2 パッケージがインストールされている。

手順

  • 既存の PV にタグを追加するには、次を使用します。

    # pvchange --addtag <@tag> <PV>
  • 既存の VG にタグを追加するには、次を使用します。

    # vgchange --addtag <@tag> <VG>
  • 作成時に VG にタグを追加するには、次を使用します。

    # vgcreate --addtag <@tag> <VG>
  • 既存の LV にタグを追加するには、次を使用します。

    # lvchange --addtag <@tag> <LV>
  • 作成時に LV にタグを追加するには、次を使用します。

    # lvcreate --addtag <@tag> ...

11.3. LVM オブジェクトからのタグの削除

LVM オブジェクトのグループ化が不要になった場合は、さまざまなボリューム管理コマンドで --deltag オプションを使用して、オブジェクトからタグを削除できます。

前提条件

  • lvm2 パッケージがインストールされている。
  • 物理ボリューム (PV)、ボリュームグループ (VG)、または論理ボリューム (LV) にタグが作成されている。

手順

  • 既存の PV からタグを削除するには、次を使用します。

    # pvchange --deltag @tag PV
  • 既存の VG からタグを削除するには、次を使用します。

    # vgchange --deltag @tag VG
  • 既存の LV からタグを削除するには、次を使用します。

    # lvchange --deltag @tag LV

11.4. LVM オブジェクトのタグの表示

次のコマンドを使用して、LVM オブジェクトのタグを表示できます。

前提条件

  • lvm2 パッケージがインストールされている。
  • 物理ボリューム (PV)、ボリュームグループ (VG)、または論理ボリューム (LV) にタグが作成されている。

手順

  • 既存の PV のすべてのタグを表示するには、次を使用します。

    # pvs -o tags <PV>
  • 既存の VG のすべてのタグを表示するには、次を使用します。

    # vgs -o tags <VG>
  • 既存の LV のすべてのタグを表示するには、次を使用します。

    # lvs -o tags <LV>

11.5. タグによる論理ボリュームのアクティブ化の制御

この手順では、設定ファイルで、特定の論理ボリュームのみをそのホストでアクティブにするように指定する方法を説明します。

手順

たとえば、次のエントリーはアクティベーション要求のフィルターとして機能し (vgchange -ay など)、vg1/lvol0 と、そのホストのメタデータにある database タグを持つ論理ボリュームまたはボリュームグループのみをアクティベートします。

activation { volume_list = ["vg1/lvol0", "@database" ] }

メタデータタグがマシンのホストタグと一致する場合にのみ一致する特殊な一致 @*

別の例として、クラスター内のすべてのマシンに、以下のエントリーがる状況を考慮してください。

tags { hosttags = 1 }

ホストの db2 でのみ vg1/lvol2 をアクティベートする場合は、以下の手順を行います。

  1. クラスター内の任意のホストから lvchange --addtag @db2 vg1/lvol2 を実行します。
  2. lvchange -ay vg1/lvol2 を実行します。

このソリューションでは、ボリュームグループのメタデータ内にホスト名を保存します。

第12章 LVM のトラブルシューティング

論理ボリュームマネージャー (LVM) ツールを使用して、LVM ボリュームおよびグループのさまざまな問題のトラブルシューティングを行うことができます。

12.1. LVM での診断データの収集

LVM コマンドが想定どおりに機能しない場合は、以下の方法で診断情報を収集できます。

手順

  • 以下の方法を使用して、さまざまな診断データを収集します。

    • -v 引数を LVM コマンドに追加して、コマンドの出力の詳細レベルを増やします。v を追加すると、詳細度をさらに増やすことができます。v は最大 4 つ許可されます (例:-vvvv)。
    • /etc/lvm/lvm.conf 設定ファイルの log セクションで、level オプションの値を増やします。これにより、LVM がシステムログにより多くの情報を提供します。
    • 問題が論理ボリュームのアクティブ化に関連する場合は、アクティブ化中に LVM がログメッセージをログに記録できるようにします。

      1. /etc/lvm/lvm.conf 設定ファイルの log セクションで activation = 1 オプションを設定します。
      2. LVM コマンドに -vvvv オプションを付けて実行します。
      3. コマンドの出力を確認します。
      4. activation オプションを 0 にリセットします。

        オプションを 0 にリセットしないと、メモリー不足の状況でシステムが応答しなくなる可能性があります。

    • 診断目的で情報ダンプを表示します。

      # lvmdump
    • 追加のシステム情報を表示します。

      # lvs -v
      # pvs --all
      # dmsetup info --columns
    • /etc/lvm/backup/ ディレクトリーの最後の LVM メタデータのバックアップと、/etc/lvm/archive/ ディレクトリー内のアーカイブバージョンを確認します。
    • 現在の設定情報を確認します。

      # lvmconfig
    • /run/lvm/hints キャッシュファイルで、物理ボリュームを持つデバイスを記録します。

関連情報

  • システム上の lvmdump(8) man ページ

12.2. 障害が発生した LVM デバイスに関する情報の表示

障害が発生した論理ボリュームマネージャー (LVM) ボリュームに関するトラブルシューティング情報は、障害の原因を特定するのに役立ちます。最も一般的な LVM ボリューム障害の例を以下に示します。

例12.1 障害が発生したボリュームグループ

この例では、ボリュームグループ myvg を設定するデバイスの 1 つで障害が発生しました。ボリュームグループの使用可能性は、障害の種類によって異なります。たとえば、RAID ボリュームも関係している場合、ボリュームグループは引き続き使用できます。障害が発生したデバイスに関する情報も確認できます。

# vgs --options +devices
 /dev/vdb1: open failed: No such device or address
 /dev/vdb1: open failed: No such device or address
  WARNING: Couldn't find device with uuid 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s.
  WARNING: VG myvg is missing PV 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s (last written to /dev/sdb1).
  WARNING: Couldn't find all devices for LV myvg/mylv while checking used and assumed devices.

VG    #PV #LV #SN Attr   VSize  VFree  Devices
myvg   2   2   0 wz-pn- <3.64t <3.60t [unknown](0)
myvg   2   2   0 wz-pn- <3.64t <3.60t [unknown](5120),/dev/vdb1(0)

例12.2 障害が発生した論理ボリューム

この例では、デバイスの 1 つで障害が発生しました。このような障害が、ボリュームグループ内の論理ボリュームに障害が発生する原因となることがあります。コマンドの出力には、障害が発生した論理ボリュームが表示されます。

# lvs --all --options +devices

  /dev/vdb1: open failed: No such device or address
  /dev/vdb1: open failed: No such device or address
  WARNING: Couldn't find device with uuid 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s.
  WARNING: VG myvg is missing PV 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s (last written to /dev/sdb1).
  WARNING: Couldn't find all devices for LV myvg/mylv while checking used and assumed devices.

  LV    VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  mylv myvg -wi-a---p- 20.00g                                                     [unknown](0)                                                 [unknown](5120),/dev/sdc1(0)

例12.3 RAID 論理ボリュームのイメージの障害

次の例は、RAID 論理ボリュームのイメージに障害が発生した場合の pvs および lvs ユーティリティーからのコマンド出力を示しています。論理ボリュームは引き続き使用できます。

# pvs

  Error reading device /dev/sdc1 at 0 length 4.

  Error reading device /dev/sdc1 at 4096 length 4.

  Couldn't find device with uuid b2J8oD-vdjw-tGCA-ema3-iXob-Jc6M-TC07Rn.

  WARNING: Couldn't find all devices for LV myvg/my_raid1_rimage_1 while checking used and assumed devices.

  WARNING: Couldn't find all devices for LV myvg/my_raid1_rmeta_1 while checking used and assumed devices.

  PV           VG         Fmt  Attr PSize    PFree
  /dev/sda2    rhel_bp-01 lvm2 a--  <464.76g    4.00m
  /dev/sdb1    myvg       lvm2 a--  <836.69g  736.68g
  /dev/sdd1    myvg       lvm2 a--  <836.69g <836.69g
  /dev/sde1    myvg       lvm2 a--  <836.69g <836.69g
  [unknown]    myvg       lvm2 a-m  <836.69g  736.68g
# lvs -a --options name,vgname,attr,size,devices myvg

  Couldn't find device with uuid b2J8oD-vdjw-tGCA-ema3-iXob-Jc6M-TC07Rn.

  WARNING: Couldn't find all devices for LV myvg/my_raid1_rimage_1 while checking used and assumed devices.

  WARNING: Couldn't find all devices for LV myvg/my_raid1_rmeta_1 while checking used and assumed devices.

  LV                  VG   Attr       LSize   Devices
  my_raid1            myvg rwi-a-r-p- 100.00g my_raid1_rimage_0(0),my_raid1_rimage_1(0)
  [my_raid1_rimage_0] myvg iwi-aor--- 100.00g /dev/sdb1(1)
  [my_raid1_rimage_1] myvg Iwi-aor-p- 100.00g [unknown](1)
  [my_raid1_rmeta_0]  myvg ewi-aor---   4.00m /dev/sdb1(0)
  [my_raid1_rmeta_1]  myvg ewi-aor-p-   4.00m [unknown](0)

12.3. ボリュームグループから見つからない LVM 物理ボリュームの削除

物理ボリュームに障害が発生した場合は、ボリュームグループ内の残りの物理ボリュームをアクティブにし、その物理ボリュームを使用していたすべての論理ボリュームをボリュームグループから削除できます。

手順

  1. ボリュームグループ内の残りの物理ボリュームをアクティベートします。

    # vgchange --activate y --partial myvg
  2. 削除する論理ボリュームを確認します。

    # vgreduce --removemissing --test myvg
  3. ボリュームグループから、失われた物理ボリュームを使用していた論理ボリュームをすべて削除します。

    # vgreduce --removemissing --force myvg
  4. 必要に応じて、保持する論理ボリュームを誤って削除した場合には、vgreduce 操作を元に戻すことができます。

    # vgcfgrestore myvg
    警告

    シンプールを削除すると、LVM は操作を元に戻すことができません。

12.4. 見つからない LVM 物理ボリュームのメタデータの検索

物理ボリュームのボリュームグループメタデータ領域が誤って上書きされたり、破棄されたりする場合は、メタデータ領域が正しくないことを示すエラーメッセージか、システムが特定の UUID を持つ物理ボリュームを見つけることができないことを示すエラーメッセージが表示されます。

この手順では、物理ボリュームが見つからないか、破損している、アーカイブされた最新のメタデータを見つけます。

手順

  1. 物理ボリュームを含むボリュームグループのアーカイブされたメタデータファイルを検索します。アーカイブされたメタデータファイルは、/etc/lvm/archive/volume-group-name_backup-number.vg パスにあります。

    # cat /etc/lvm/archive/myvg_00000-1248998876.vg

    00000-1248998876 を backup-number に置き換えます。ボリュームグループの番号が最も高い、既知の有効なメタデータファイルの最後のものを選択します。

  2. 物理ボリュームの UUID を検索します。以下の方法のいずれかを使用します。

    • 論理ボリュームをリスト表示します。

      # lvs --all --options +devices
      
        Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
    • アーカイブされたメタデータファイルを確認します。ボリュームグループ設定の physical_volumes セクションで、id = のラベルが付いた値として UUID を検索します。
    • --partial オプションを使用してボリュームグループを非アクティブにします。

      # vgchange --activate n --partial myvg
      
        PARTIAL MODE. Incomplete logical volumes will be processed.
        WARNING: Couldn't find device with uuid 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s.
        WARNING: VG myvg is missing PV 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s (last written to /dev/vdb1).
        0 logical volume(s) in volume group "myvg" now active

12.5. LVM 物理ボリュームでのメタデータの復元

この手順では、破損したり、新しいデバイスに置き換えたりする物理ボリュームのメタデータを復元します。物理ボリュームのメタデータ領域を書き換えて、物理ボリュームからデータを復旧できる場合があります。

警告

作業用の LVM 論理ボリュームでこの手順を実行しないでください。誤った UUID を指定すると、データが失われることになります。

前提条件

手順

  1. 物理ボリュームでメタデータを復元します。

    # pvcreate --uuid physical-volume-uuid \
               --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \
               block-device
    注記

    コマンドは、LVM メタデータ領域のみを上書きし、既存のデータ領域には影響を与えません。

    例12.4 /dev/vdb1 での物理ボリュームの復元

    以下の例では、以下のプロパティーで /dev/vdb1 デバイスを物理ボリュームとしてラベル付けします。

    • FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk の UUID
    • VG_00050.vg に含まれるメタデータ情報 (ボリュームグループの最新のアーカイブメタデータ)
    # pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" \
               --restorefile /etc/lvm/archive/VG_00050.vg \
               /dev/vdb1
    
      ...
      Physical volume "/dev/vdb1" successfully created
  2. ボリュームグループのメタデータを復元します。

    # vgcfgrestore myvg
    
      Restored volume group myvg
  3. ボリュームグループの論理ボリュームを表示します。

    # lvs --all --options +devices myvg

    現在、論理ボリュームは非アクティブです。以下に例を示します。

      LV     VG   Attr   LSize   Origin Snap%  Move Log Copy%  Devices
      mylv myvg   -wi--- 300.00G                               /dev/vdb1 (0),/dev/vdb1(0)
      mylv myvg   -wi--- 300.00G                               /dev/vdb1 (34728),/dev/vdb1(0)
  4. 論理ボリュームのセグメントタイプが RAID の場合は、論理ボリュームを再同期します。

    # lvchange --resync myvg/mylv
  5. 論理ボリュームを非アクティブにします。

    # lvchange --activate y myvg/mylv
  6. ディスク上の LVM メタデータが、それを上書きしたものと同じかそれ以上のスペースを使用する場合は、この手順で物理ボリュームを回復できます。メタデータを上書きしたものがメタデータ領域を超えると、ボリューム上のデータが影響を受ける可能性があります。そのデータを復元するには、fsck コマンドを使用することができます。

検証

  • アクティブな論理ボリュームを表示します。

    # lvs --all --options +devices
    
      LV     VG   Attr   LSize   Origin Snap%  Move Log Copy%  Devices
     mylv myvg   -wi--- 300.00G                               /dev/vdb1 (0),/dev/vdb1(0)
     mylv myvg   -wi--- 300.00G                               /dev/vdb1 (34728),/dev/vdb1(0)

12.6. LVM 出力の丸めエラー

ボリュームグループの領域使用量を報告する LVM コマンドは、報告された数を 2 進法に切り上げ、人間が判読できる出力を提供します。これには、vgdisplay ユーティリティーおよび vgs ユーティリティーが含まれます。

丸めの結果、報告された空き領域の値は、ボリュームグループが提供する物理エクステントよりも大きくなる可能性があります。報告された空き領域のサイズの論理ボリュームを作成しようとすると、以下のエラーが発生する可能性があります。

Insufficient free extents

エラーを回避するには、ボリュームグループの空き物理エクステントの数を調べる必要があります。これは、空き領域の正確な値です。次に、エクステントの数を使用して、論理ボリュームを正常に作成できます。

12.7. LVM ボリューム作成時の丸めエラーの防止

LVM 論理ボリュームを作成する場合は、丸めエラーを防ぐために論理ボリュームの論理エクステントの数を指定できます。

手順

  1. ボリュームグループの空き物理エクステントの数を検索します。

    # vgdisplay myvg

    例12.5 ボリュームグループの空きエクステント

    たとえば、以下のボリュームグループには 8780 個のの空き物理エクステントがあります。

    --- Volume group ---
     VG Name               myvg
     System ID
     Format                lvm2
     Metadata Areas        4
     Metadata Sequence No  6
     VG Access             read/write
    [...]
    Free  PE / Size       8780 / 34.30 GB
  2. 論理ボリュームを作成します。ボリュームサイズをバイトではなくエクステントに入力します。

    例12.6 エクステントの数を指定して論理ボリュームを作成

    # lvcreate --extents 8780 --name mylv myvg

    例12.7 残りの領域をすべて使用する論理ボリュームの作成

    または、論理ボリュームを拡張して、ボリュームグループ内の残りの空き領域の割合を使用できます。以下に例を示します。

    # lvcreate --extents 100%FREE --name mylv myvg

検証

  • ボリュームグループが使用するエクステントの数を確認します。

    # vgs --options +vg_free_count,vg_extent_count
    
      VG     #PV #LV #SN  Attr   VSize   VFree  Free  #Ext
      myvg   2   1   0   wz--n- 34.30G    0    0     8780

12.8. LVM メタデータとそのディスク上の場所

LVM ヘッダーとメタデータ領域は、さまざまなオフセットとサイズで使用できます。

デフォルトの LVM ディスクヘッダー:

  • label_header 構造と pv_header 構造にあります。
  • ディスクの 2 番目の 512 バイトセクターにあります。なお、物理ボリューム (PV) の作成時にデフォルト以外の場所が指定された場合、ヘッダーは最初のセクターまたは 3 番目のセクターにある可能性があります。

標準の LVM メタデータ領域:

  • ディスクの先頭から 4096 バイトの位置から開始します。
  • ディスクの先頭から 1 MiB の位置で終了します。
  • mda_header 構造を含む 512 バイトのセクターで開始します。

メタデータテキスト領域は、mda_header セクターの後に始まり、メタデータ領域の終わりまで続きます。LVM VG メタデータテキストは、メタデータテキスト領域に循環的に書き込まれます。mda_header は、テキスト領域内の最新の VG メタデータの場所を指します。

# pvck --dump headers /dev/sda コマンドを使用して、ディスクから LVM ヘッダーを出力できます。このコマンドは、label_headerpv_headermda_header、およびメタデータテキストが見つかった場合はその場所を出力します。正常でないフィールドは CHECK 接頭辞を付けて出力されます。

LVM メタデータ領域のオフセットは PV を作成したマシンのページサイズと一致するため、メタデータ領域はディスクの先頭から 8K、16K、または 64K の位置から開始する場合もあります。

PV の作成時に、より大きなメタデータ領域またはより小さなメタデータ領域を指定できます。その場合、メタデータ領域は 1 MiB 以外の位置で終了する可能性があります。pv_header は、メタデータ領域のサイズを指定します。

PV を作成するときに、必要に応じて 2 番目のメタデータ領域をディスクの末尾で有効にすることができます。pv_header にはメタデータ領域の場所が含まれます。

12.9. ディスクからの VG メタデータの抽出

状況に応じて、次のいずれかの手順を選択して、ディスクから VG メタデータを抽出します。抽出したメタデータを保存する方法は、抽出したメタデータのファイルへの保存 を参照してください。

注記

修復には、ディスクからメタデータを抽出せずに /etc/lvm/backup/ にあるバックアップファイルを使用できます。

手順

  • 有効な mda_header から参照される現在のメタデータテキストを出力します。

    # pvck --dump metadata <disk>

    例12.8 有効な mda_header からのメタデータテキスト

    # pvck --dump metadata /dev/sdb
      metadata text at 172032 crc Oxc627522f # vgname test segno 59
      ---
      <raw metadata from disk>
      ---
  • 有効な mda_header の検出に基づいて、メタデータ領域で見つかったすべてのメタデータコピーの場所を出力します。

    # pvck --dump metadata_all <disk>

    例12.9 メタデータ領域内のメタデータコピーの場所

    # pvck --dump metadata_all /dev/sdb
      metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
      metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
      metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
  • たとえば、ヘッダーが欠落しているか破損している場合は、mda_header を使用せずにメタデータ領域内のメタデータのすべてのコピーを検索します。

    # pvck --dump metadata_search <disk>

    例12.10 mda_header を使用しないメタデータ領域内のメタデータコピー

    # pvck --dump metadata_search /dev/sdb
      Searching for metadata at offset 4096 size 1044480
      metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
      metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
      metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
  • メタデータの各コピーの説明を表示するには、dump コマンドに -v オプションを追加します。

    # pvck --dump metadata -v <disk>

    例12.11 各メタデータコピーの説明の表示

    # pvck --dump metadata -v /dev/sdb
      metadata text at 199680 crc 0x628cf243 # vgname my_vg seqno 40
      ---
    my_vg {
    id = "dmEbPi-gsgx-VbvS-Uaia-HczM-iu32-Rb7iOf"
    seqno = 40
    format = "lvm2"
    status = ["RESIZEABLE", "READ", "WRITE"]
    flags = []
    extent_size = 8192
    max_lv = 0
    max_pv = 0
    metadata_copies = 0
    
    physical_volumes {
    
    pv0 {
    id = "8gn0is-Hj8p-njgs-NM19-wuL9-mcB3-kUDiOQ"
    device = "/dev/sda"
    
    device_id_type = "sys_wwid"
    device_id = "naa.6001405e635dbaab125476d88030a196"
    status = ["ALLOCATABLE"]
    flags = []
    dev_size = 125829120
    pe_start = 8192
    pe_count = 15359
    }
    
    pv1 {
    id = "E9qChJ-5ElL-HVEp-rc7d-U5Fg-fHxL-2QLyID"
    device = "/dev/sdb"
    
    device_id_type = "sys_wwid"
    device_id = "naa.6001405f3f9396fddcd4012a50029a90"
    status = ["ALLOCATABLE"]
    flags = []
    dev_size = 125829120
    pe_start = 8192
    pe_count = 15359
    }

このファイルは修復に使用できます。最初のメタデータ領域は、デフォルトでダンプメタデータに使用されます。ディスクの末尾に 2 番目のメタデータ領域がある場合は、--settings "mda_num=2" オプションを使用して、代わりに 2 番目のメタデータ領域をダンプメタデータに使用できます。

12.10. 抽出したメタデータのファイルへの保存

修復のためにダンプされたメタデータを使用する必要がある場合は、-f オプションと --settings オプションを使用して、抽出したメタデータをファイルに保存する必要があります。

手順

  • -f <filename>--dump metadata に追加すると、指定されたファイルに raw メタデータが書き込まれます。このファイルは修復に使用できます。
  • -f <filename>--dump metadata_all または --dump metadata_search に追加すると、すべての場所の raw メタデータが指定されたファイルに書き込まれます。
  • --dump metadata_all|metadata_search からメタデータテキストのインスタンスを 1 つ保存するには、--settings "metadata_offset=<offset>" を追加します。<offset> には、リスト表示された出力の "metadata at <offset>" の値を使用します。

    例12.12 コマンドの出力:

    # pvck --dump metadata_search --settings metadata_offset=5632 -f meta.txt /dev/sdb
      Searching for metadata at offset 4096 size 1044480
      metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
    # head -2 meta.txt
    test {
    id = "FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv"

12.11. pvcreate コマンドと vgcfgrestore コマンドを使用した、LVM ヘッダーとメタデータが破損したディスクの修復

破損した物理ボリューム、または新しいデバイスに置き換えられた物理ボリューム上のメタデータとヘッダーを復元できます。物理ボリュームのメタデータ領域を書き換えて、物理ボリュームからデータを復旧できる場合があります。

警告

これらの手順は、各コマンドの意味、現在のボリュームのレイアウト、実現する必要があるレイアウト、およびバックアップメタデータファイルの内容をよく理解している場合にのみ、細心の注意を払って使用する必要があります。これらのコマンドはデータを破損する可能性があるため、トラブルシューティングについては Red Hat グローバルサポートサービスに問い合わせることを推奨します。

前提条件

手順

  1. pvcreate および vgcfgrestore コマンドに必要な次の情報を収集します。# pvs -o+uuid コマンドを実行すると、ディスクと UUID に関する情報を収集できます。

    • metadata-file は、VG の最新のメタデータバックアップファイルへのパスです (例: /etc/lvm/backup/<vg-name>)。
    • vg-name は、破損または欠落している PV がある VG の名前です。
    • このデバイスの破損した PV の UUID は、# pvs -i+uuid コマンドの出力から取得した値です。
    • disk は、PV が配置されるディスクの名前です (例: /dev/sdb)。これが正しいディスクであることを確認するか、Red Hat サポートにお問い合わせください。正しいディスクでない場合、次の手順に従うとデータが失われる可能性があります。
  2. ディスク上に LVM ヘッダーを再作成します。

    # pvcreate --restorefile <metadata-file> --uuid <UUID> <disk>

    必要に応じて、ヘッダーが有効であることを確認します。

    # pvck --dump headers <disk>
  3. ディスク上に VG メタデータを復元します。

    # vgcfgrestore --file <metadata-file> <vg-name>

    必要に応じて、メタデータが復元されていることを確認します。

    # pvck --dump metadata <disk>

VG のメタデータバックアップファイルがない場合は、抽出したメタデータのファイルへの保存 の手順を使用して取得できます。

検証

  • 新しい物理ボリュームが損傷しておらず、ボリュームグループが正しく機能していることを確認するには、次のコマンドの出力を確認します。
# vgs

12.12. pvck コマンドを使用した、LVM ヘッダーとメタデータが破損したディスクの修復

これは pvcreate コマンドと vgcfgrestore コマンドを使用した、LVM ヘッダーとメタデータが破損したディスクの修復 の代替手段です。pvcreate および vgcfgrestore コマンドが機能しない場合があります。この方法は、損傷したディスクにターゲットを絞っています。

この方法では、pvck --dump で抽出されたメタデータ入力ファイル、または /etc/lvm/backup のバックアップファイルを使用します。可能であれば、同じ VG 内の別の PV から、または PV 上の 2 番目のメタデータ領域から pvck --dump によって保存されたメタデータを使用します。詳細は、抽出したメタデータのファイルへの保存 を参照してください。

手順

  • ディスク上のヘッダーとメタデータを修復します。

    # pvck --repair -f <metadata-file> <disk>

    ここでは、以下のようになります。

    • <metadata-file> は、VG の最新のメタデータを含むファイルです。これは /etc/lvm/backup/vg-name にすることも、pvck --dump metadata_search コマンド出力から取得した、raw メタデータテキストを含むファイルにすることもできます。
    • <disk> は、PV が配置されるディスクの名前です (例: /dev/sdb)。データの損失を防ぐために、それが正しいディスクであることを確認してください。ディスクが正しいかどうかわからない場合は、Red Hat サポートにお問い合わせください。
注記

メタデータファイルがバックアップファイルの場合、VG にメタデータを保持する各 PV で pvck --repair を実行する必要があります。メタデータファイルが別の PV から抽出された raw メタデータである場合、pvck --repair は破損した PV でのみ実行する必要があります。

検証

  • 新しい物理ボリュームが損傷しておらず、ボリュームグループが正しく機能していることを確認するには、次のコマンドの出力を確認します。

    # vgs <vgname>
    # pvs <pvname>
    # lvs <lvname>

12.13. LVM RAID のトラブルシューティング

LVM RAID デバイスのさまざまな問題のトラブルシューティングを実行して、データエラーの修正、デバイスの復旧、障害が発生したデバイスの置き換えを行うことができます。

12.13.1. RAID 論理ボリュームでのデータ整合性の確認

LVM は、RAID 論理ボリュームのスクラビングに対応します。RAID スクラビングは、アレイ内のデータおよびパリティーブロックをすべて読み込み、それが一貫しているかどうかを確認するプロセスです。lvchange --syncaction repair コマンドは、アレイでバックグラウンドの同期アクションを開始します。

手順

  1. オプション: 次のいずれかのオプションを設定して、RAID 論理ボリュームが初期化される速度を制御します。

    • --maxrecoveryrate Rate[bBsSkKmMgG] は、RAID 論理ボリュームの最大復旧速度を設定し、通常の I/O 操作が排除されないようにします。
    • --minrecoveryrate Rate[bBsSkKmMgG] は、RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、同期操作の I/O が最小スループットを達成できるようにします。

      # lvchange --maxrecoveryrate 4K my_vg/my_lv
      Logical volume _my_vg/my_lv_changed.

      4K は、アレイに含まれる各デバイスの 1 秒あたりの値である復旧速度の値に置き換えます。接尾辞を指定しないと、デバイスごとの 1 秒あたりの kiB が想定されます。

      # lvchange --syncaction repair my_vg/my_lv

      RAID スクラビング操作を実行すると、sync アクションに必要なバックグラウンド I/O が、LVM デバイスへの他の I/O (ボリュームグループメタデータの更新など) よりも優先される可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。

      注記

      これらの最大および最小 I/O 速度は、RAID デバイスを作成するときに使用することもできます。たとえば、lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg を使用すると、ボリュームグループ my_vg 内に、3 ストライプでサイズが 10 G、最大復旧速度が 128 kiB/秒/デバイスの 2 方向の RAID10 アレイ my_lv が作成されます。

  2. アレイ内の不一致数を修復せずに、アレイ内の不一致の数を表示します。

    # lvchange --syncaction check my_vg/my_lv

    このコマンドは、アレイでバックグラウンドの同期アクションを開始します。

  3. オプション: var/log/syslog ファイルでカーネルメッセージを確認します。
  4. アレイ内の不一致を修正します。

    # lvchange --syncaction repair my_vg/my_lv

    このコマンドは、RAID 論理ボリューム内の障害が発生したデバイスを修復または交換します。このコマンドを実行したら、var/log/syslog ファイルでカーネルメッセージを確認できます。

検証

  1. スクラビング操作に関する情報を表示します。

    # lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv
    LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
    my_lv my_vg rwi-a-r--- 500.00m                                    100.00           idle        0

関連情報

12.13.2. 論理ボリュームに障害が発生した RAID デバイスの交換

RAID は従来の LVM ミラーリングとは異なります。LVM ミラーリングの場合は、障害が発生したデバイスを削除します。そうしないと、障害が発生したデバイスで RAID アレイが動作し続ける間、ミラーリングされた論理ボリュームがハングします。RAID1 以外の RAID レベルの場合、デバイスを削除すると、デバイスはより低いレベルの RAID に変換されます (たとえば、RAID6 から RAID5 へ、または RAID4 または RAID5 から RAID0 への変換)。

LVM では、障害が発生したデバイスを取り外して代替デバイスを割り当てる代わりに、lvconvert コマンドの --repair 引数を使用して、RAID 論理ボリューム内で物理ボリュームとして機能する障害が発生したデバイスを交換できます。

前提条件

  • ボリュームグループには、障害が発生したデバイスを置き換えるのに十分な空き容量を提供する物理ボリュームが含まれています。

    ボリュームグループに十分な空きエクステントがある物理ボリュームがない場合は、vgextend ユーティリティーを使用して、十分なサイズの物理ボリュームを新たに追加します。

手順

  1. RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
      LV               Cpy%Sync Devices
      my_lv            100.00   my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdc1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdc1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)
  2. /dev/sdc デバイスに障害が発生したら、RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
      /dev/sdc: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
      LV               Cpy%Sync Devices
      my_lv            100.00   my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          [unknown](1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           [unknown](0)
      [my_lv_rmeta_2]           /dev/sdd1(0)
  3. 障害が発生したデバイスを交換します。

    # lvconvert --repair my_vg/my_lv
      /dev/sdc: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
    Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
    Faulty devices in my_vg/my_lv successfully replaced.
  4. オプション: 障害が発生したデバイスを置き換える物理ボリュームを手動で指定します。

    # lvconvert --repair my_vg/my_lv replacement_pv
  5. 代替の論理ボリュームを調べます。

    # lvs --all --options name,copy_percent,devices my_vg
    
      /dev/sdc: open failed: No such device or address
      /dev/sdc1: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      LV               Cpy%Sync Devices
      my_lv            43.79    my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdb1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdb1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)

    障害が発生したデバイスをボリュームグループから削除するまで、LVM ユーティリティーは、障害が発生したデバイスが見つけられないことを示しています。

  6. 障害が発生したデバイスをボリュームグループから削除します。

    # vgreduce --removemissing my_vg

検証

  1. 障害が発生したデバイスを取り外した後、利用可能な物理ボリュームを表示します。

    # pvscan
    PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free]
    PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
    PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
    PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
  2. 障害が発生したデバイスを交換した後、論理ボリュームを調べます。

    # lvs --all --options name,copy_percent,devices my_vg
    my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdb1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdb1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)

関連情報

  • システム上の lvconvert(8) および vgreduce(8) man ページ

12.14. マルチパス化された LVM デバイスに対する重複した物理ボリューム警告のトラブルシューティング

マルチパスストレージで LVM を使用する場合は、ボリュームグループまたは論理ボリュームのリストを表示する LVM コマンドを実行すると、以下のようなメッセージが表示される場合があります。

Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/dm-5 not /dev/sdd
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowerb not /dev/sde
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sddlmab not /dev/sdf

これらの警告のトラブルシューティングにより、LVM が警告を表示する理由を理解し、または警告を非表示にできます。

12.14.1. 重複した PV 警告の原因

Device Mapper Multipath (DM Multipath)、EMC PowerPath、または Hitachi Dynamic Link Manager (HDLM) などのマルチパスソフトウェアがシステム上のストレージデバイスを管理すると、特定の論理ユニット (LUN) への各パスが異なる SCSI デバイスとして登録されます。

マルチパスソフトウェアは、各パスにマップする新しいデバイスを作成します。各 LUN には、同じ基礎となるデータを参照する /dev ディレクトリーに複数のデバイスノードがあるため、すべてのデバイスノードには同じ LVM メタデータが含まれます。

表12.1 異なるマルチパスソフトウェアでのデバイスマッピングの例
マルチパスソフトウェアLUN への SCSI パスマルチパスデバイスパスへのマッピング

DM Multipath

/dev/sdb および /dev/sdc

/dev/mapper/mpath1 または /dev/mapper/mpatha

EMC PowerPath

/dev/emcpowera

HDLM

/dev/sddlmab

複数のデバイスノードが原因で、LVM ツールは同じメタデータを複数回検出し、複製として報告します。

12.14.2. PV の重複警告が発生した場合

LVM は、以下のいずれかのケースで重複した PV 警告を表示します。

同じデバイスへの単一パス

出力に表示される 2 つデバイスは、両方とも同じデバイスへの単一パスです。

以下の例は、重複デバイスが、同じデバイスへの両方の単一パスである、重複した PV の警告を示しています。

Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sdd not /dev/sdf

multipath -ll コマンドを使用して現在の DM Multipath トポロジーをリスト表示すると、同じマルチパスマップの下に /dev/sdd/dev/sdf の両方を確認できます。

これらの重複メッセージは警告のみで、LVM 操作が失敗しているわけではありません。代わりに、LVM が物理ボリュームとしてデバイスのいずれかのみを使用して他を無視していることを警告します。

メッセージは、LVM が誤ったデバイスを選択するか、ユーザーが警告を中断していることを示す場合は、フィルターを適用できます。フィルターは、物理ボリュームに必要なデバイスのみを検索し、マルチパスデバイスへの基礎となるパスを省略するように LVM を設定します。その結果、警告が表示されなくなりました。

マルチパスマップ

出力に表示される 2 つのデバイスは、両方ともマルチパスマップです。

以下の例は、両方のマルチパスマップである 2 つのデバイスに対する重複した物理ボリューム警告を示しています。重複した物理ボリュームは、同じデバイスへの異なるパスではなく、2 つのデバイスに置かれます。

Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/mapper/mpatha not /dev/mapper/mpathc

Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowera not /dev/emcpowerh

この状況は、同じデバイスへの両方の単一パスであるデバイスに対する重複する警告よりも複雑です。これらの警告は、多くの場合、マシンがアクセスできないデバイス (LUN クローンやミラーなど) にアクセスしていることを意味します。

マシンから削除するデバイスが分からないと、この状況は復旧できない可能性があります。Red Hat は、この問題に対処するために Red Hat テクニカルサポートにお問い合わせください。

12.14.3. PV の重複警告を防ぐ LVM デバイスフィルターの例

以下の例は、1 つの論理ユニット (LUN) への複数のストレージパスによって引き起こされる、重複した物理ボリュームの警告を回避する LVM デバイスフィルターを示しています。

論理ボリュームマネージャー (LVM) のフィルターを設定して、すべてのデバイスのメタデータをチェックできます。メタデータには、ルートボリュームグループを含むローカルハードディスクドライブとマルチパスデバイスが含まれます。マルチパスデバイスへの基礎となるパス (/dev/sdb/dev/sdd など) を拒否すると、マルチパスデバイス自体で一意の各メタデータ領域が一度検出されるため、重複した物理ボリュームの警告を回避できます。

  • 最初のハードディスクドライブ上の 2 番目のパーティションとデバイスマッパー (DM) マルチパスデバイスを許可し、それ以外をすべて拒否するには、次のように入力します。

    filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
  • すべての HP SmartArray コントローラーと EMC PowerPath デバイスを許可するには、次のように入力します。

    filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]
  • 最初の IDE ドライブおよびマルチパスデバイス上のパーティションを許可するには、次のように入力します。

    filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]

12.14.4. 関連情報

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.