Red Hat Training
A Red Hat training course is available for RHEL 8
論理ボリュームの設定および管理
RHEL での LVM の設定および管理
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
特定の文章に関するコメントの送信
- Multi-page HTML 形式でドキュメントを表示し、ページが完全にロードされてから右上隅に Feedback ボタンが表示されていることを確認します。
- カーソルを使用して、コメントを追加するテキスト部分を強調表示します。
- 強調表示されたテキストの近くに表示される Add Feedback ボタンをクリックします。
- フィードバックを追加し、Submit をクリックします。
Bugzilla からのフィードバック送信 (アカウントが必要)
- Bugzilla の Web サイトにログインします。
- Version メニューから正しいバージョンを選択します。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- Submit Bug をクリックします。
第1章 論理ボリューム管理の概要
論理ボリューム管理 (LVM) により、物理ストレージに抽象化レイヤーが作成され、論理ストレージボリュームを作成するのに役立ちます。様々な面で、物理ストレージを直接使用するよりも柔軟性が高くなります。
また、ハードウェアストレージ設定がソフトウェアから見えなくなるため、アプリケーションを停止したりファイルシステムをアンマウントしたりせずに、サイズ変更や移動が可能になります。したがって、運用コストが削減できます。
1.1. LVM のアーキテクチャー
以下は、LVM のコンポーネントです。
- 物理ボリューム
- 物理ボリューム (PV) は、LVM 使用用に指定されたパーティションまたはディスク全体です。詳細は、LVM 物理ボリュームの管理 を参照してください。
- ボリュームグループ
- ボリュームグループ (VG) は、物理ボリューム (PV) の集合です。これにより、論理ボリュームに割り当て可能なディスク領域のプールが作成されます。詳細は、LVM ボリュームグループの管理 を参照してください。
- 論理ボリューム
- 論理ボリュームは、マウント可能なストレージデバイスを表します。詳細は、LVM 論理ボリュームの管理 を参照してください。
以下の図は、LVM のコンポーネントを示しています。
図1.1 LVM 論理ボリュームのコンポーネント

1.2. LVM の利点
物理ストレージを直接使用する場合と比較して、論理ボリュームには、以下のような利点があります。
- 容量の柔軟性
- 論理ボリュームを使用すると、ディスクとパーティションを 1 つの論理ボリュームに集約できます。この機能を使用すると、ファイルシステムを複数のデバイスにまたがって拡張でき、1 つの大きなファイルシステムとして扱うことができます。
- サイズ変更可能なストレージボリューム
- 基になるデバイスを再フォーマットしたり、パーティションを再作成したりせずに、簡単なソフトウェアコマンドを使用して論理ボリュームのサイズを拡大または縮小できます。
- オンラインデータ移動
- より新しく、迅速で、障害耐性の高いストレージサブシステムを導入するために、システムがアクティブな状態でもデータを移動できます。データは、ディスクが使用中の場合でもディスクに再配置できます。たとえば、ホットスワップ可能なディスクを削除する前に空にできます。
- 便利なデバイスの命名
- 論理ストレージボリュームは、ユーザー定義のカスタマイズした名前で管理できます。
- ストライプ化ボリューム
- 2 つ以上のデバイスにまたがってデータをストライプ化する論理ボリュームを作成できます。これにより、スループットが大幅に向上します。
- RAID ボリューム
- 論理ボリュームは、データの RAID を設定する際に便利な方法を提供します。これにより、デバイス障害に対する保護が可能になり、パフォーマンスが向上します。
- ボリュームスナップショット
- 論理ボリュームの特定の時点のコピーであるスナップショットを作成して、一貫性のあるバックアップを作成したり、実際のデータに影響を与えずに変更の影響をテストしたりすることができます。
- シンボリューム
- 論理ボリュームは、シンプロビジョニングにできます。これにより、利用可能な物理容量よりも大きな論理ボリュームを作成できます。
- キャッシュボリューム
- キャッシュ論理ボリュームは、SSD ドライブなどの高速なブロックデバイスを使用して、大規模で低速なブロックデバイスのパフォーマンスを向上させます。
第2章 RHEL システムロールを使用したローカルストレージの管理
Ansible を使用して LVM とローカルファイルシステム (FS) を管理するには、RHEL 8 で使用可能な RHEL システムロールの 1 つである storage
ロールを使用できます。
storage
ロールを使用すると、ディスク上のファイルシステム、複数のマシンにある論理ボリューム、および RHEL 7.7 以降の全バージョンでのファイルシステムの管理を自動化できます。
RHEL システムロールと、その適用方法の詳細は、RHEL システムロールの概要 を参照してください。
2.1. storage
RHEL システムロールの概要
storage
ロールは以下を管理できます。
- パーティションが分割されていないディスクのファイルシステム
- 論理ボリュームとファイルシステムを含む完全な LVM ボリュームグループ
- MD RAID ボリュームとそのファイルシステム
storage
ロールを使用すると、次のタスクを実行できます。
- ファイルシステムを作成する
- ファイルシステムを削除する
- ファイルシステムをマウントする
- ファイルシステムをアンマウントする
- LVM ボリュームグループを作成する
- LVM ボリュームグループを削除する
- 論理ボリュームを作成する
- 論理ボリュームを削除する
- RAID ボリュームを作成する
- RAID ボリュームを削除する
- RAID で LVM ボリュームグループを作成する
- RAID で LVM ボリュームグループを削除する
- 暗号化された LVM ボリュームグループを作成する
- RAID で LVM 論理ボリュームを作成する
2.2. storage
システムロールでストレージデバイスを識別するパラメーター
storage
ロールの設定は、以下の変数に記載されているファイルシステム、ボリューム、およびプールにのみ影響します。
storage_volumes
管理対象のパーティションが分割されていない全ディスク上のファイルシステムの一覧
storage_volumes
にはraid
ボリュームを含めることもできます。現在、パーティションはサポートされていません。
storage_pools
管理するプールの一覧
現在、サポートされている唯一のプールタイプは LVM です。LVM では、プールはボリュームグループ (VG) を表します。各プールの下には、ロールで管理されるボリュームの一覧があります。LVM では、各ボリュームは、ファイルシステムを持つ論理ボリューム (LV) に対応します。
2.3. ブロックデバイスに XFS ファイルシステムを作成する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook では、storage
ロールを適用し、デフォルトパラメーターを使用してブロックデバイスに XFS ファイルシステムを作成します。
storage
ロールは、パーティションが分割されていないディスク全体または論理ボリューム (LV) でのみファイルシステムを作成できます。パーティションにファイルシステムを作成することはできません。
例2.1 /dev/sdb に XFS を作成する Playbook
--- - hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: xfs roles: - rhel-system-roles.storage
-
現在、ボリューム名 (この例では
barefs
) は任意です。storage
ロールは、disks:
属性に一覧表示されているディスクデバイスでボリュームを特定します。 -
XFS は RHEL 8 のデフォルトファイルシステムであるため、
fs_type: xfs
行を省略することができます。 論理ボリュームにファイルシステムを作成するには、エンクロージングボリュームグループを含む
disks:
属性の下に LVM 設定を指定します。詳細は、Example Ansible playbook to manage logical volumes を参照してください。LV デバイスへのパスを指定しないでください。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.4. ファイルシステムを永続的にマウントする Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールをすぐに適用して、XFS ファイルシステムを永続的にマウントします。
例2.2 /dev/sdb のファイルシステムを /mnt/data にマウントする Playbook
--- - hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: xfs mount_point: /mnt/data roles: - rhel-system-roles.storage
-
この Playbook では、ファイルシステムが
/etc/fstab
ファイルに追加され、すぐにファイルシステムをマウントします。 -
/dev/sdb
デバイス上のファイルシステム、またはマウントポイントのディレクトリーが存在しない場合は、Playbook により作成されます。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.5. 論理ボリュームを管理する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、ボリュームグループに LVM 論理ボリュームを作成します。
例2.3 myvg ボリュームグループに mylv 論理ボリュームを作成する Playbook
- hosts: all vars: storage_pools: - name: myvg disks: - sda - sdb - sdc volumes: - name: mylv size: 2G fs_type: ext4 mount_point: /mnt/data roles: - rhel-system-roles.storage
myvg
ボリュームグループは、次のディスクで設定されます。-
/dev/sda
-
/dev/sdb
-
/dev/sdc
-
-
myvg
ボリュームグループがすでに存在する場合は、Playbook により論理ボリュームがボリュームグループに追加されます。 -
myvg
ボリュームグループが存在しない場合は、Playbook により作成されます。 -
Playbook は、
mylv
論理ボリューム上に Ext4 ファイルシステムを作成し、/mnt
ファイルシステムを永続的にマウントします。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.6. オンラインのブロック破棄を有効にする Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook では、storage
ロールを適用して、オンラインのブロック破棄を有効にして XFS ファイルシステムをマウントします。
例2.4 /mnt/data/ でのオンラインのブロック破棄を有効にする Playbook
--- - hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: xfs mount_point: /mnt/data mount_options: discard roles: - rhel-system-roles.storage
関連情報
- ファイルシステムを永続的にマウントする Ansible Playbook の例
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.7. Ext4 ファイルシステムを作成してマウントする Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、Ext4 ファイルシステムを作成してマウントします。
例2.5 /dev/sdb に Ext4 を作成し、/mnt/data にマウントする Playbook
--- - hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: ext4 fs_label: label-name mount_point: /mnt/data roles: - rhel-system-roles.storage
-
Playbook は、
/dev/sdb
ディスクにファイルシステムを作成します。 -
Playbook は、
/mnt/data
ディレクトリーにファイルシステムを永続的にマウントします。 -
ファイルシステムのラベルは
label-name
です。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.8. ext3 ファイルシステムを作成してマウントする Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、Ext3 ファイルシステムを作成してマウントします。
例2.6 /dev/sdb
に Ext3 を作成し、/mnt/data
にマウントする Playbook
--- - hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: ext3 fs_label: label-name mount_point: /mnt/data roles: - rhel-system-roles.storage
-
Playbook は、
/dev/sdb
ディスクにファイルシステムを作成します。 -
Playbook は、
/mnt/data
ディレクトリーにファイルシステムを永続的にマウントします。 -
ファイルシステムのラベルは
label-name
です。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.9. storage
RHEL システムロールを使用して既存の Ext4 または Ext3 ファイルシステムのサイズを変更する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、ブロックデバイスにある既存の Ext4 または Ext3 ファイルシステムのサイズを変更します。
例2.7 ディスクに単一ボリュームを設定する Playbook
---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
vars:
storage_volumes:
- name: barefs
type: disk
disks:
- /dev/sdb
size: 12 GiB
fs_type: ext4
mount_point: /opt/barefs
roles:
- rhel-system-roles.storage
-
直前の例のボリュームがすでに存在する場合に、ボリュームサイズを変更するには、異なるパラメーター
size
の値で、同じ Playbook を実行する必要があります。以下に例を示します。
例2.8 /dev/sdb
で ext4
のサイズを変更する Playbook
---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
vars:
storage_volumes:
- name: barefs
type: disk
disks:
- /dev/sdb
size: 10 GiB
fs_type: ext4
mount_point: /opt/barefs
roles:
- rhel-system-roles.storage
- 現在、ボリューム名 (この例では barefs) は任意です。Storage ロールは、disks: 属性に一覧表示されているディスクデバイスでボリュームを特定します。
他のファイルシステムで Resizing
アクションを使用すると、作業しているデバイスのデータを破棄する可能性があります。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.10. storage
RHEL システムロールを使用して LVM 上の既存のファイルシステムのサイズを変更する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
RHEL システムロールを適用して、ファイルシステムを使用して LVM 論理ボリュームのサイズを変更します。
他のファイルシステムで Resizing
アクションを使用すると、作業しているデバイスのデータを破棄する可能性があります。
例2.9 myvg ボリュームグループの既存の mylv1 および myvl2 論理ボリュームのサイズを変更する Playbook
--- - hosts: all vars: storage_pools: - name: myvg disks: - /dev/sda - /dev/sdb - /dev/sdc volumes: - name: mylv1 size: 10 GiB fs_type: ext4 mount_point: /opt/mount1 - name: mylv2 size: 50 GiB fs_type: ext4 mount_point: /opt/mount2 - name: Create LVM pool over three disks include_role: name: rhel-system-roles.storage
この Playbook は、以下の既存のファイルシステムのサイズを変更します。
-
/opt/mount1
にマウントされるmylv1
ボリュームの Ext4 ファイルシステムは、そのサイズを 10 GiB に変更します。 -
/opt/mount2
にマウントされるmylv2
ボリュームの Ext4 ファイルシステムは、そのサイズを 50 GiB に変更します。
-
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.11. storage
RHEL System Role を使用してスワップボリュームを作成する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、スワップボリュームが存在しない場合は作成し、スワップボリュームが既に存在する場合は、デフォルトのパラメーターを使用してブロックデバイスに変更します。
例2.10 /dev/sdb で既存の XFS を作成または変更する Playbook
--- - name: Create a disk device with swap - hosts: all vars: storage_volumes: - name: swap_fs type: disk disks: - /dev/sdb size: 15 GiB fs_type: swap roles: - rhel-system-roles.storage
-
現在、ボリューム名 (この例では
swap_fs
) は任意です。storage
ロールは、disks:
属性に一覧表示されているディスクデバイスでボリュームを特定します。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.12. Storage システムロールを使用した RAID ボリュームの設定
storage
システムロールを使用すると、Red Hat Ansible Automation Platform と Ansible-Core を使用して RHEL に RAID ボリュームを設定できます。要件に合わせて RAID ボリュームを設定するためのパラメーターを使用して、Ansible Playbook を作成します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
Playbook を実行するシステムに
rhel-system-roles
パッケージがインストールされている。 -
storage
システムロールを使用して、RAID ボリュームをデプロイするシステムの詳細を記録したインベントリーファイルがある。
手順
以下のコンテンツを含む新しい playbook.yml ファイルを作成します。
--- - name: Configure the storage hosts: managed-node-01.example.com tasks: - name: Create a RAID on sdd, sde, sdf, and sdg include_role: name: rhel-system-roles.storage vars: storage_safe_mode: false storage_volumes: - name: data type: raid disks: [sdd, sde, sdf, sdg] raid_level: raid0 raid_chunk_size: 32 KiB mount_point: /mnt/data state: present
警告特定の状況でデバイス名が変更する場合があります。たとえば、新しいディスクをシステムに追加するときなどです。したがって、データの損失を防ぐために、Playbook で特定のディスク名を使用しないでください。
オプション: Playbook の構文を確認します。
# ansible-playbook --syntax-check playbook.yml
Playbook を実行します。
# ansible-playbook -i inventory.file /path/to/file/playbook.yml
関連情報
- RAID の管理
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル - RHEL System Roles を使用するための制御ノードと管理対象ノードの準備
2.13. storage
RHEL System Role を使用して RAID で LVM プールを設定する
storage
システムロールを使用すると、Red Hat Ansible Automation Platform を使用して RHEL に LVM pool with RAID を設定できます。本セクションでは、利用可能なパラメーターを使用して Ansible Playbook を設定し、LVM pool with RAID を設定する方法を説明します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
Playbook を実行するシステムに
rhel-system-roles
パッケージがインストールされている。 -
storage
システムロールを使用して、LVM pool with RAID を設定するシステムの詳細を記録したインベントリーファイルがある。
手順
以下の内容を含む新しい
playbook.yml
ファイルを作成します。- hosts: all vars: storage_safe_mode: false storage_pools: - name: my_pool type: lvm disks: [sdh, sdi] raid_level: raid1 volumes: - name: my_pool size: "1 GiB" mount_point: "/mnt/app/shared" fs_type: xfs state: present roles: - name: rhel-system-roles.storage
注記LVM pool with RAID を作成するには、
raid_level
パラメーターを使用して RAID タイプを指定する必要があります。オプション:Playbook の構文を確認します。
# ansible-playbook --syntax-check playbook.yml
インベントリーファイルで Playbook を実行します。
# ansible-playbook -i inventory.file /path/to/file/playbook.yml
関連情報
- RAID の管理
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
2.14. storage
RHEL システムロールを使用し、LVM 上の VDO ボリュームを圧縮および重複排除する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は storage
RHEL System Role を適用して、Virtual Data Optimizer (VDO) を使用して論理ボリューム (LVM) の圧縮および重複排除を有効にします。
例2.11 myvg
ボリュームグループに、mylv1
LVM VDO ボリュームを作成する Playbook
--- - name: Create LVM VDO volume under volume group 'myvg' hosts: all roles: -rhel-system-roles.storage vars: storage_pools: - name: myvg disks: - /dev/sdb volumes: - name: mylv1 compression: true deduplication: true vdo_pool_size: 10 GiB size: 30 GiB mount_point: /mnt/app/shared
この例では、compression
プールおよび deduplication
プールを true に設定します。これは、VDO が使用されることを指定します。以下では、このパラメーターの使用方法を説明します。
-
deduplication
は、ストレージボリュームに保存されている重複データの重複排除に使用されます。 - 圧縮は、ストレージボリュームに保存されているデータを圧縮するために使用されます。これにより、より大きなストレージ容量が得られます。
-
vdo_pool_size は、ボリュームがデバイスで使用する実際のサイズを指定します。VDO ボリュームの仮想サイズは、
size
パラメーターで設定します。注記: LVM VDO はストレージロールで使用されるため、プールごとに圧縮と重複排除を使用できるボリュームは 1 つだけです。
2.15. storage
RHEL システムロールを使用した LUKS2 暗号化ボリュームの作成
storage
ロールを使用し、Ansible Playbook を実行して、LUKS で暗号化されたボリュームを作成および設定できます。
前提条件
-
crypto_policies
システムロールで設定するシステムである 1 つ以上の管理対象ノードへのアクセスとパーミッションがある。 - 管理対象ノードが記載されているインベントリーファイルがある。
-
コントロールノード (このシステムから Red Hat Ansible Core は他のシステムを設定) へのアクセスおよびパーミッション。
ansible-core
パッケージおよびrhel-system-roles
パッケージがコントロールノードにインストールされている。
RHEL 8.0-8.5 では、別の Ansible リポジトリーへのアクセス権を指定されており、Ansible をベースにする自動化用の Ansible Engine 2.9 が含まれています。Ansible Engine には、ansible
、ansible-playbook
などのコマンドラインユーティリティー、docker
や podman
などのコネクター、プラグインとモジュールが多く含まれています。Ansible Engine を入手してインストールする方法の詳細は、ナレッジベースのアーティクル記事 How to download and install Red Hat Ansible Engine を参照してください。
RHEL 8.6 および 9.0 では、Ansible Core (ansible-core
パッケージとして提供) が導入されました。これには、Ansible コマンドラインユーティリティー、コマンド、およびビルトイン Ansible プラグインのセットが含まれています。RHEL は、AppStream リポジトリーを介してこのパッケージを提供し、サポート範囲は限定的です。詳細については、ナレッジベースの Scope of support for the Ansible Core package included in the RHEL 9 and RHEL 8.6 and later AppStream repositories を参照してください。
手順
以下の内容を含む新しい
playbook.yml
ファイルを作成します。- hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: xfs fs_label: label-name mount_point: /mnt/data encryption: true encryption_password: your-password roles: - rhel-system-roles.storage
playbook.yml ファイルに、
encryption_key
、encryption_cipher
、encryption_key_size
、およびencryption_luks
バージョンなどの他の暗号化パラメーターを追加することもできます。オプション: Playbook の構文を確認します。
# ansible-playbook --syntax-check playbook.yml
インベントリーファイルで Playbook を実行します。
# ansible-playbook -i inventory.file /path/to/file/playbook.yml
検証
暗号化ステータスを表示します。
# cryptsetup status sdb /dev/mapper/sdb is active and is in use. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/sdb [...]
作成された LUKS 暗号化ボリュームを確認します。
# cryptsetup luksDump /dev/sdb Version: 2 Epoch: 6 Metadata area: 16384 [bytes] Keyslots area: 33521664 [bytes] UUID: a4c6be82-7347-4a91-a8ad-9479b72c9426 Label: (no label) Subsystem: (no subsystem) Flags: allow-discards Data segments: 0: crypt offset: 33554432 [bytes] length: (whole device) cipher: aes-xts-plain64 sector: 4096 [bytes] [...]
storage
ロールがサポートするplaybook.yml
ファイル内のcryptsetup
パラメーターを表示します。# cat ~/playbook.yml - hosts: all vars: storage_volumes: - name: foo type: disk disks: - nvme0n1 fs_type: xfs fs_label: label-name mount_point: /mnt/data encryption: true #encryption_password: passwdpasswd encryption_key: /home/passwd_key encryption_cipher: aes-xts-plain64 encryption_key_size: 512 encryption_luks_version: luks2 roles: - rhel-system-roles.storage
関連情報
- LUKS を使用したブロックデバイスの暗号化
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
file
2.16. storage
RHEL システムロールを使用し、プールのボリュームサイズをパーセンテージで表す Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook では、storage
システムロールを適用して、論理マネージャーボリューム (LVM) ボリュームのサイズをプールの合計サイズのパーセンテージで表現できるようにします。
例2.12 ボリュームのサイズをプールの合計サイズのパーセンテージで表現する Playbook
--- - name: Express volume sizes as a percentage of the pool's total size hosts: all roles - rhel-system-roles.storage vars: storage_pools: - name: myvg disks: - /dev/sdb volumes: - name: data size: 60% mount_point: /opt/mount/data - name: web size: 30% mount_point: /opt/mount/web - name: cache size: 10% mount_point: /opt/cache/mount
この例では、LVM ボリュームのサイズを、プールサイズのパーセンテージで指定します (例: "60%")。また、LVM ボリュームのサイズを、人間が判読できるファイルシステムのサイズ ("10g" や "50 GiB" など) で、プールサイズのパーセンテージで指定することもできます。
2.17. 関連情報
-
/usr/share/doc/rhel-system-roles/storage/
-
/usr/share/ansible/roles/rhel-system-roles.storage/
第3章 LVM 物理ボリュームの管理
物理ボリューム (PV) は、LVM 使用用に指定されたパーティションまたはディスク全体です。LVM 論理ボリューム用にデバイスを使用する場合は、デバイスを物理ボリュームとして初期化する必要があります。
ディスクデバイス全体を物理ボリュームに使用している場合は、そのディスクにはパーティションテーブルを含めないでください。ディスクパーティションが DOS の場合は、fdisk
、cfdisk
などのコマンドを使用して、パーティション ID を 0x8e に設定している必要があります。ディスクデバイス全体を物理ボリュームに使用している場合は、そのディスクにはパーティションテーブルを含めないでください。既存のパーティションテーブルはすべて消去する必要があります。これにより、そのディスク上のすべてのデータが効果的に破壊されます。root として、wipefs -a <PhysicalVolume>
コマンドを使用して、既存のパーティションテーブルを削除できます。
3.1. 物理ボリュームの概要
ブロックデバイスを物理ボリュームとして初期化すると、デバイスの先頭位置にラベルが付けられます。以下は、LVM ラベルについて説明しています。
- LVM ラベルにより物理デバイスの正しい識別とデバイスの順序付けが行われます。ラベルが付けられていない、LVM 以外のデバイスは、起動時にシステムが検出した順序に応じて、再起動後に名前が変更される場合があります。LVM ラベルは、再起動してもクラスター全体で維持されます。
- LVM ラベルは、デバイスを LVM 物理ボリュームとして識別するものです。これには、物理ボリューム用のランダムな一意識別子 (UUID) が含まれます。また、ブロックデバイスのサイズもバイト単位で保存し、LVM メタデータがデバイスのどこに保存されているかも記録します。
- LVM ラベルは、デフォルトでは 2 番目の 512 バイトセクターに配置されます。物理ボリュームを作成する場合は、先頭の 4 つのセクターのいずれかにラベルを配置することにより、このデフォルト設定を書き換えることができます。これにより、必要に応じて LVM ボリュームを、このセクターを利用する他のユーザーと併用できるようになります。
以下は、LVM メタデータについて説明しています。
- LVM メタデータには、システムにある LVM ボリュームグループの設定詳細が含まれています。デフォルトでは、メタデータの複製コピーが、ボリュームグループ内で、すべての物理ボリュームの、すべてのメタデータ領域に保存されています。LVM メタデータのサイズは小さく、ASCII 形式が使用されます。
- 現在、LVM では、各物理ボリュームにメタデータのコピーを 1 つまたは 2 つ保存できます。コピーをゼロにすることもできます。デフォルトでは 1 つ保存されます。物理ボリューム上に保存するメタデータのコピー数を一度設定したら、その数を後で変更することはできません。最初のコピーはデバイスの先頭にあるラベルの後に保存されます。2 つ目のコピーがある場合は、デバイスの最後に配置されます。意図したものとは別のディスクに誤って書き込みを行い、ディスクの先頭領域を上書きしてしまった場合でも、デバイス後部にある 2 つ目のコピーでメタデータを復元できます。
次の図は、LVM 物理ボリュームのレイアウトを示しています。LVM ラベルが 2 番目のセクターにあり、その後にメタデータ領域、使用可能なデバイス領域と続きます。
Linux カーネルおよび本書では、セクターのサイズを 512 バイトとしています。
図3.1 物理ボリュームのレイアウト

関連情報
3.2. ディスク上の複数パーティション
LVM を使用して、ディスクパーティションから物理ボリューム (PV) を作成できます。
Red Hat では、以下のような理由により、ディスク全体に対応するパーティションを 1 つ作成し、1 つの LVM 物理ボリュームとしてラベルを付けることを推奨しています。
- 管理上の利便性
- 各ディスクが一度だけ表示されると、システムのハードウェアの追跡が簡単になります。これは、特にディスクに障害が発生した場合に役に立ちます。
- ストライピングのパフォーマンス
- LVM は、2 つの物理ボリュームが同じ物理ディスクにあるかどうかを認識しません。2 つの物理ボリュームが同じ物理ディスクにあるときに、ストライプ化された論理ボリュームを作成すると、作成されたボリュームのディスクは同じでも、パーティションは異なる可能性があります。このとき、パフォーマンスは、改善ではなく低下します。
- RAID の冗長性
- LVM は、2 つの物理ボリュームが同じデバイスにあるかどうかを判断できません。2 つの物理ボリュームが同じデバイスにある場合に RAID 論理ボリュームを作成すると、パフォーマンスとフォールトトレランスが失われる可能性があります。
1 つのディスクを、複数の LVM 物理ボリュームに分割しないといけない場合があります (推奨はされません)。たとえば、ディスクがほとんどないシステムで、既存システムを LVM ボリュームに移行する場合に、パーティション間でデータを移動しなければならない場合があります。さらに、大容量のディスクが存在し、管理目的で複数のボリュームグループを必要とする場合は、そのディスクにパーティションを設定する必要があります。ディスクに複数のパーティションがあり、そのパーティションがいずれも同じボリュームグループにある場合に、ボリュームを作成するときは、論理ボリュームに追加するパーティションを注意して指定してください。
LVM は、パーティション化していないディスクを物理ボリュームとして使用することをサポートしますが、パーティションなしで PV を作成すると、混合オペレーティングシステム環境で問題が発生する可能性があるため、ディスク全体を単一のパーティションとして作成することが推奨されます。他のオペレーティングシステムはデバイスを空き状態として解釈し、ドライブの先頭にある PV ラベルを上書きする可能性があります。
3.3. LVM 物理ボリュームの作成
この手順では、LVM 物理ボリューム (PV) を作成し、ラベルを付ける方法を説明します。
この手順では、/dev/vdb1、/dev/vdb2、および /dev/vdb3 を、システムで利用可能なストレージデバイスに置き換えます。
前提条件
-
lvm2
パッケージがインストールされている。
手順
pvcreate
コマンドに、スペースで区切られたデバイス名を引数として使用して、複数の物理ボリュームを作成します。# pvcreate /dev/vdb1 /dev/vdb2 /dev/vdb3 Physical volume "/dev/vdb1" successfully created. Physical volume "/dev/vdb2" successfully created. Physical volume "/dev/vdb3" successfully created.
これにより、ラベルが /dev/vdb1、/dev/vdb2、および /dev/vdb3 に配置され、それらが LVM に属する物理ボリュームとしてマークされます。
要件に応じて、以下のコマンドのいずれかを使用して、作成した物理ボリュームを表示します。
pvdisplay
コマンド: 各物理ボリュームの詳細をそれぞれ複数行出力します。物理プロパティー (サイズ、エクステント、ボリュームグループなど) および他のオプションが、決められた形式で表示されます。# pvdisplay --- NEW Physical volume --- PV Name /dev/vdb1 VG Name PV Size 1.00 GiB [..] --- NEW Physical volume --- PV Name /dev/vdb2 VG Name PV Size 1.00 GiB [..] --- NEW Physical volume --- PV Name /dev/vdb3 VG Name PV Size 1.00 GiB [..]
pvs
コマンド: 物理ボリュームの情報を設定可能な形式で出力します。# pvs PV VG Fmt Attr PSize PFree /dev/vdb1 lvm2 1020.00m 0 /dev/vdb2 lvm2 1020.00m 0 /dev/vdb3 lvm2 1020.00m 0
pvscan
コマンド: システムにある物理ボリュームで対応している LVM ブロックデバイスをすべてスキャンします。このコマンドで、特定の物理ボリュームがスキャンされないように、lvm.conf
ファイルでフィルターを定義することができます。# pvscan PV /dev/vdb1 lvm2 [1.00 GiB] PV /dev/vdb2 lvm2 [1.00 GiB] PV /dev/vdb3 lvm2 [1.00 GiB]
関連情報
-
pvcreate (8)
、pvdisplay (8)
、pvs (8)
、pvscan (8)
、およびlvm (8)
の man ページ
3.4. LVM 物理ボリュームの削除
デバイスを LVM で使用する必要がなくなった場合、pvremove
コマンドを使用して LVM ラベルを削除できます。pvremove
コマンドを実行すると、空の物理ボリュームにある LVM メタデータをゼロにします。
手順
物理ボリュームを削除します。
# pvremove /dev/vdb3 Labels on physical volume "/dev/vdb3" successfully wiped.
既存の物理ボリュームを表示し、必要なボリュームが削除されているかどうかを確認します。
# pvs PV VG Fmt Attr PSize PFree /dev/vdb1 lvm2 1020.00m 0 /dev/vdb2 lvm2 1020.00m 0
削除する物理ボリュームがボリュームグループの一部になっている場合は、vgreduce
コマンドで、ボリュームグループから物理ボリュームを取り除く必要があります。詳細は、ボリュームグループからの物理ボリュームの削除 を参照してください。
関連情報
-
pvremove(8)
の man ページ
3.5. 関連情報
- parted でディスクにパーティションテーブルを作成
-
parted(8)
man ページ
第4章 LVM ボリュームグループの管理
ボリュームグループ (VG) は、物理ボリューム (PV) の集合です。これにより、論理ボリューム (LV) に割り当て可能なディスク領域のプールが作成されます。
ボリュームグループ内で、割り当て可能なディスク領域は、エクステントと呼ばれる固定サイズの単位に分割されます。割り当て可能な領域の最小単位は、1 エクステントです。エクステントは、物理ボリュームでは物理エクステントと呼ばれます。
論理ボリュームには、物理エクステントと同じサイズの論理エクステントが割り当てられます。そのため、エクステントのサイズは、ボリュームグループ内のすべての論理ボリュームで同じになります。ボリュームグループは、論理エクステントを物理エクステントにマッピングします。
4.1. LVM ボリュームグループの作成
/dev/vdb1 および /dev/vdb2 物理ボリューム (PV) を使用して、LVM ボリュームグループ (VG) myvg を作成できます。デフォルトでは、物理ボリュームを使用してボリュームグループを作成すると、そのディスク領域は 4 MB のエクステントに分割されます。このエクステントサイズは、論理ボリュームのサイズを増減する際の最小単位です。エクステントサイズは、vgcreate
コマンドの -s
引数を使用して変更できます。エクステントの数が多くても、論理ボリュームの I/O パフォーマンスに影響を与えることはありません。vgcreate
コマンドに -p
引数と -l
引数を使用すると、ボリュームグループに追加可能な物理ボリュームまたは論理ボリュームの数に制限をかけることができます。
前提条件
-
lvm2
パッケージがインストールされている。 - 物理ボリュームが作成されます。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
手順
次のいずれかの方法を使用して、myvg VG を作成します。
オプションを指定しない場合:
# vgcreate myvg /dev/vdb1 /dev/vdb2 Volume group "myvg" successfully created.
-s
引数を使用してボリュームグループのエクステントサイズを指定する方法:# vgcreate -s 2 /dev/myvg /dev/vdb1 /dev/vdb2 Volume group "myvg" successfully created.
-p
および-l
引数を使用して、VG に追加可能な物理ボリュームまたは論理ボリュームの数に制限をかける方法:# vgcreate -l 1 /dev/myvg /dev/vdb1 /dev/vdb2 Volume group "myvg" successfully created.
要件に応じて、以下のコマンドのいずれかを使用して、作成したボリュームグループを表示します。
vgs
コマンド: ボリュームグループの情報を設定可能な形式で提供し、1 ボリュームグループにつき 1 行ずつ表示します。# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz-n 159.99g 159.99g
vgdisplay
コマンド: 決められた形式でボリュームグループのプロパティー (サイズ、エクステント、物理ボリュームの数など) およびその他のオプションを表示します。以下の例は、ボリュームグループ myvg に関するvgdisplay
コマンドの出力を示しています。既存のすべてのボリュームグループを表示するには、ボリュームグループを指定しないでください。# vgdisplay myvg --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 6 VG Access read/write [..]
vgscan
コマンド: ボリュームグループ用に、システムにあるサポートされるすべての LVM ブロックデバイスをスキャンします。# vgscan Found volume group "myvg" using metadata type lvm2
オプション: 空き物理ボリュームを 1 つまたは複数追加して、ボリュームグループの容量を増やします。
# vgextend myvg /dev/vdb3 Physical volume "/dev/vdb3" successfully created. Volume group "myvg" successfully extended
オプション: 既存のボリュームグループの名前を変更します。
# vgrename myvg myvg1 Volume group "myvg" successfully renamed to "myvg1"
関連情報
-
vgcreate (8)
、vgextend (8)
、vgdisplay (8)
、vgs (8)
、vgscan (8)
、vgrename (8)
、およびlvm (8)
の man ページ
4.2. LVM ボリュームグループの統合
2 つのボリュームグループを統合して 1 つのボリュームグループにするには、vgmerge
コマンドを使用します。ボリュームの物理エクステントサイズが同じで、かつ両ボリュームグループの物理ボリュームおよび論理ボリュームのサマリーがマージ先ボリュームグループの制限内に収まる場合は、非アクティブなマージ元のボリュームを、アクティブまたは非アクティブのマージ先ボリュームにマージができます。
手順
非アクティブなボリュームグループ databases をアクティブまたは非アクティブなボリュームグループ myvg にマージして、詳細なランタイム情報を提供します。
# vgmerge -v myvg databases
関連情報
-
vgmerge(8)
の man ページ
4.3. ボリュームグループからの物理ボリュームの削除
ボリュームグループ (VG) から未使用の物理ボリューム (PV) を削除するには、vgreduce
コマンドを使用します。vgreduce
コマンドは、空の物理ボリュームを 1 つまたは複数削除して、ボリュームグループの容量を縮小します。これにより、物理ボリュームが解放され、異なるボリュームグループで使用したり、システムから削除できるようになります。
手順
物理ボリュームがまだ使用中の場合は、データを同じボリュームグループから別の物理ボリュームに移行します。
# pvmove /dev/vdb3 /dev/vdb3: Moved: 2.0% ... /dev/vdb3: Moved: 79.2% ... /dev/vdb3: Moved: 100.0%
既存のボリュームグループ内の他の物理ボリュームに空きエクステントが十分にない場合は、以下を行います。
/dev/vdb4 から、物理ボリュームを新規作成します。
# pvcreate /dev/vdb4 Physical volume "/dev/vdb4" successfully created
新規作成した物理ボリュームを myvg ボリュームグループに追加します。
# vgextend myvg /dev/vdb4 Volume group "myvg" successfully extended
データを /dev/vdb3 から /dev/vdb4 に移動します。
# pvmove /dev/vdb3 /dev/vdb4 /dev/vdb3: Moved: 33.33% /dev/vdb3: Moved: 100.00%
ボリュームグループから物理ボリューム /dev/vdb3 を削除します。
# vgreduce myvg /dev/vdb3 Removed "/dev/vdb3" from volume group "myvg"
検証
/dev/vdb3 物理ボリュームが myvg ボリュームグループから削除されていることを確認します。
# pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 lvm2 a-- 1020.00m 1008.00m 12.00m
関連情報
-
vgreduce(8)
、pvmove(8)
、およびpvs(8)
の man ページ
4.4. LVM ボリュームグループの分割
この物理ボリュームに未使用領域が十分にあれば、新たにディスクを追加しなくてもボリュームグループを作成できます。
初期設定では、ボリュームグループ myvg は/dev/vdb1、/dev/vdb2、および /dev/vdb3 で設定されます。この手順を完了すると、ボリュームグループ myvg は /dev/vdb1 および /dev/vdb2 で設定され、2 番目のボリュームグループ yourvg は /dev/vdb3 で設定されます。
前提条件
-
ボリュームグループに十分な空き領域がある。
vgscan
コマンドを使用すると、現在ボリュームグループで利用可能な空き領域の容量を確認できます。 -
既存の物理ボリュームの空き容量に応じて、
pvmove
コマンドを使用して、使用されている物理エクステントをすべて他の物理ボリュームに移動します。詳細は、ボリュームグループからの物理ボリュームの削除 を参照してください。
手順
既存のボリュームグループ myvg を新しいボリュームグループ yourvg に分割します。
# vgsplit myvg yourvg /dev/vdb3 Volume group "yourvg" successfully split from "myvg"
注記既存のボリュームグループを使用して論理ボリュームを作成した場合は、次のコマンドを実行して論理ボリュームを非アクティブにします。
# lvchange -a n /dev/myvg/mylv
論理ボリュームを作成する方法は、LVM 論理ボリュームの管理 を参照してください。
2 つのボリュームグループの属性を表示します。
# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 34.30G 10.80G yourvg 1 0 0 wz--n- 17.15G 17.15G
検証
新規作成したボリュームグループ yourvg が、/dev/vdb3 物理ボリュームで設定されていることを確認します。
# pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 yourvg lvm2 a-- 1020.00m 1008.00m 12.00m
関連情報
-
vgsplit(8)
、vgs(8)
、およびpvs(8)
の man ページ
4.5. ボリュームグループを別のシステムへ移動
次のコマンドを使用して、LVM ボリュームグループ (VG) 全体を別のシステムに移動できます。
vgexport
- 既存のシステムでこのコマンドを使用して、システムから非アクティブな VG にアクセスできないようにします。VG にアクセスできなくなったら、その物理ボリューム (PV) の接続を解除できます。
vgimport
- 他のシステムでこのコマンドを使用して、新しいシステムで、古いシステムで非アクティブだった VG にアクセスできるようにします。
前提条件
- 移動するボリュームグループ内のアクティブなボリュームのファイルにアクセスしているユーザーがいない。
手順
mylv 論理ボリュームをアンマウントします。
# umount /dev/mnt/mylv
ボリュームグループ内のすべての論理ボリュームを非アクティブ化します。これにより、ボリュームグループでこれ以上の動作が発生しないようにします。
# vgchange -an myvg vgchange -- volume group "myvg" successfully deactivated
ボリュームグループをエクスポートして、削除元のシステムがボリュームグループにアクセスできないようにします。
# vgexport myvg vgexport -- volume group "myvg" successfully exported
エクスポートされたボリュームグループを表示します。
# pvscan PV /dev/sda1 is in exported VG myvg [17.15 GB / 7.15 GB free] PV /dev/sdc1 is in exported VG myvg [17.15 GB / 15.15 GB free] PV /dev/sdd1 is in exported VG myvg [17.15 GB / 15.15 GB free] ...
- システムをシャットダウンし、ボリュームグループを構成するディスクを取り外し、新しいシステムに接続します。
ディスクを新しいシステムに接続し、ボリュームグループをインポートして、新しいシステムからアクセスできるようにします。
# vgimport myvg
注記vgimport
コマンドの--force
引数を使用すると、物理ボリュームがないボリュームグループをインポートし、その後vgreduce --removemissing
コマンドを実行できます。ボリュームグループをアクティブ化します。
# vgchange -ay myvg
ファイルシステムをマウントして使用できるようにします。
# mkdir -p /mnt/myvg/users # mount /dev/myvg/users /mnt/myvg/users
関連情報
-
vgimport(8)
、vgexport(8)
、およびvgchange(8)
man ページ
4.6. LVM ボリュームグループの削除
vgremove
コマンドを使用して、既存のボリュームグループを削除できます。
前提条件
- ボリュームグループには論理ボリュームがありません。ボリュームグループから論理ボリュームを削除するには、LVM 論理ボリュームの削除 を参照してください。
手順
クラスター環境にボリュームグループが存在する場合は、その他のすべてのノードで、ボリュームグループの
lockspace
を停止します。削除を実行しているノードを除くすべてのノードで次のコマンドを使用します。# vgchange --lockstop vg-name
ロックが停止するのを待ちます。
ボリュームグループを削除します。
# vgremove vg-name Volume group "vg-name" successfully removed
関連情報
-
vgremove(8)
の man ページ
第5章 LVM 論理ボリュームの管理
論理ボリュームは、ファイルシステム、データベース、またはアプリケーションが使用できる仮想のブロックストレージデバイスです。LVM 論理ボリュームを作成する場合は、物理ボリューム (PV) をボリュームグループ (Volume Group: VG) に統合します。これによりディスク領域のプールが作成され、そこから LVM 論理ボリューム (Logical Volume: LV) を割り当てます。
5.1. 論理ボリュームの概要
管理者は、標準のディスクパーティションとは異なり、データを破棄せずに論理ボリュームを拡大または縮小できます。ボリュームグループの物理ボリュームが別のドライブまたは RAID アレイにある場合は、ストレージデバイスに論理ボリュームを分散することもできます。
論理ボリュームを、ボリュームに必要なデータよりも小さい容量に縮小すると、データが失われる可能性があります。さらに、ファイルシステムの中には縮小できないものもあります。柔軟性を最大限にするために、現在のニーズに合わせて論理ボリュームを作成し、過剰なストレージ容量を未割り当ての状態にします。必要に応じて、未割り当ての領域を使用するように、論理ボリュームを安全に拡張できます。
AMD システム、Intel システム、ARM システム、および IBM Power Systems サーバーで、ブートローダーは LVM ボリュームを読み取ることができません。このため、/boot
パーティションは、LVM ではなく標準のパーティションで作成してください。IBM Z の場合は、zipl
ブートローダーによりリニアマッピングを使用した LVM 論理ボリューム上の /boot
に対応しています。デフォルトのインストールプロセスでは、/
パーティションと swap パーティションは常に LVM ボリューム内に、/boot
パーティションは別途、物理ボリューム上に作成されます。
以下は、論理ボリュームの種類になります。
- リニアボリューム
- リニアボリュームは、複数の物理ボリュームの領域を 1 つの論理ボリュームに統合します。たとえば、60GB ディスクが 2 つある場合は、120GB の論理ボリュームを作成できます。物理ストレージは連結されます。
- ストライプ化論理ボリューム
LVM 論理ボリュームにデータを書き込む際に、ファイルシステムは、基になる物理ボリューム全体にデータを分配します。このとき、ストライプ化論理ボリュームを作成すると、データを物理ボリュームに書き込む方法を制御できます。順次の読み取りおよび書き込みが大量に行われる場合には、これによりデータ I/O の効率を向上できます。
ストライピングは、ラウンドロビン式で、指定した数の物理ボリュームにデータを書き込んでいくことで、パフォーマンスを向上させます。I/O は、ストライピングでは並行して実行されます。これにより、ストライプで追加される各物理ボリュームでは、ほぼ直線的なパフォーマンスの向上が期待できます。
- RAID 論理ボリューム
- LVM は、RAID レベル 0、1、4、5、6、10 に対応します。RAID 論理ボリュームはクラスターには対応していません。RAID 論理ボリュームを作成するとき、LVM は、データまたはアレイ内のパリティーサブボリュームごとに、サイズが 1 エクステントのメタデータサブボリュームを作成します。
- シンプロビジョニングされた論理ボリューム (シンボリューム)
- シンプロビジョニングされた論理ボリュームを使用すると、利用可能な物理ストレージよりも大きな論理ボリュームを作成できます。シンプロビジョニングされたボリュームセットを作成すると、システムは要求されるストレージの全量を割り当てる代わりに、実際に使用する容量を割り当てることができます。
- スナップショットボリューム
- LVM スナップショット機能により、サービスを中断せずに任意の時点でデバイスの仮想イメージを作成できます。スナップショットの取得後に作成元のデバイスに変更が加えられると、データが変更する前に、これから変更する部分のコピーがスナップショット機能により作成されるため、このコピーを使用して、デバイスの状態を再構築できます。
- シンプロビジョニングされたスナップショットボリューム
- シンプロビジョニングされたスナップショットボリュームを使用すると、同じデータボリュームにより多くの仮想デバイスを格納できます。シンプロビジョニングされたスナップショットは、特定のタイミングでキャプチャーする際にすべてのデータをコピーしていないため、便利です。
- キャッシュボリューム
- LVM は、高速ブロックデバイス (SSD ドライブなど) を、大規模で低速なブロックデバイスのライトバックまたはライトスルーのキャッシュとして使用することに対応します。既存の論理ボリュームのパフォーマンスを改善するためにキャッシュ論理ボリュームを作成したり、大規模で低速なデバイスと共に小規模で高速なデバイスで設定される新規のキャッシュ論理ボリュームを作成したりできます。
5.2. CLI コマンドの使用
以下のセクションでは、LVM CLI コマンドの一般的な操作機能を説明します。
コマンドラインの引数で単位の指定
コマンドラインの引数でサイズが必要な場合は、常に単位を明示的に指定できます。単位を指定しないと、デフォルトで KB または MB が指定されます。LVM CLI コマンドでは、分数を使用できません。
コマンドライン引数で単位を指定する場合は、LVM が大文字と小文字を区別しません。たとえば、M と m は同じで、2 の累乗 (1024 の倍数) が使用されます。ただし、コマンドで --units
引数を指定すると、小文字は、単位が 1024 の倍数であることを示し、その単位は 1000 の倍数であることを示します。
ボリュームグループおよび論理ボリュームの指定
LVM CLI コマンドでボリュームグループまたは論理ボリュームを指定する場合は、以下の点に留意してください。
-
ここで、コマンドではボリュームグループまたは論理ボリューム名を引数として取り、完全パス名はオプションになります。ボリュームグループ
vg0
内のlvol0
という論理ボリュームは、vg0/lvol0
として指定できます。 - ボリュームグループの一覧は必須ですが、空の場合は、ボリュームグループの一覧が置き換えられます。
-
論理ボリュームの一覧が必要ですが、ボリュームグループを指定すると、そのボリュームグループにある論理ボリュームがすべて置き換えられます。たとえば、
lvdisplay vg0
コマンドは、ボリュームグループvg0
の論理ボリュームをすべて表示します。
出力の詳細レベルを上げる
すべての LVM コマンドは、出力の詳細レベルを上げるために複数回入力できる -v
引数を受け入れます。以下の例は、lvcreate
コマンドのデフォルト出力を示しています。
# lvcreate -L 50MB new_vg
Rounding up size to full physical extent 52.00 MB
Logical volume "lvol0" created
以下のコマンドは、lvcreate
コマンドの出力と、-v
引数を表示します。
# lvcreate -v -L 50MB new_vg
Rounding up size to full physical extent 52.00 MB
Archiving volume group "new_vg" metadata (seqno 1).
Creating logical volume lvol0
Creating volume group backup "/etc/lvm/backup/new_vg" (seqno 2).
Activating logical volume new_vg/lvol0.
activation/volume_list configuration setting not defined: Checking only host tags for new_vg/lvol0.
Creating new_vg-lvol0
Loading table for new_vg-lvol0 (253:0).
Resuming new_vg-lvol0 (253:0).
Wiping known signatures on logical volume "new_vg/lvol0"
Initializing 4.00 KiB of logical volume "new_vg/lvol0" with value 0.
Logical volume "lvol0" created
引数の -vv
、-vvv
、および -vvvv
を使用すると、表示されるコマンド実行がより詳細になります。-vvvv
引数は、この時点で情報の最大数を提供します。以下の例は、lvcreate
コマンドで -vvvv
引数を指定して、出力の最初の行を示しています。
# lvcreate -vvvv -L 50MB new_vg
#lvmcmdline.c:913 Processing: lvcreate -vvvv -L 50MB new_vg
#lvmcmdline.c:916 O_DIRECT will be used
#config/config.c:864 Setting global/locking_type to 1
#locking/locking.c:138 File-based locking selected.
#config/config.c:841 Setting global/locking_dir to /var/lock/lvm
#activate/activate.c:358 Getting target version for linear
#ioctl/libdm-iface.c:1569 dm version OF [16384]
#ioctl/libdm-iface.c:1569 dm versions OF [16384]
#activate/activate.c:358 Getting target version for striped
#ioctl/libdm-iface.c:1569 dm versions OF [16384]
#config/config.c:864 Setting activation/mirror_region_size to 512
...
LVM CLI コマンドのヘルプの表示
コマンドの --help
引数を使用して、LVM CLI コマンドのヘルプを表示できます。
# commandname --help
コマンドの man ページを表示するには、man
コマンドを実行します。
# man commandname
man lvm
コマンドは、LVM に関する一般的なオンライン情報を提供します。
5.3. LVM 論理ボリュームの作成
前提条件
-
lvm2
パッケージがインストールされている。 - ボリュームグループが作成されます。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
論理ボリュームを作成します。
# lvcreate -n mylv -L 500M myvg Logical volume "mylv" successfully created.
-n
オプションを使用して LV 名を mylv に設定し、-L
オプションを使用して、Mb 単位で LV のサイズを設定しますが、他の単位を使用することもできます。デフォルトでは、論理ボリュームのタイプはリニアですが、--type
オプションを使用して必要なタイプを指定できます。重要ボリュームグループに要求されるサイズとタイプの空き物理エクステントが十分にない場合、このコマンドは失敗します。
要件に応じて、以下のコマンドのいずれかを使用して、作成した論理ボリュームを表示します。
lvs
コマンド: 論理ボリューム情報を設定可能な形式で提供して、1 つの論理ボリュームにつき 1 行ずつ表示します。# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 500.00m
lvdisplay
コマンド: 決められた形式で、論理ボリュームのプロパティー (サイズ、レイアウト、マッピングなど) を表示します。# lvdisplay -v /dev/myvg/mylv --- Logical volume --- LV Path /dev/myvg/mylv LV Name mylv VG Name myvg LV UUID YTnAk6-kMlT-c4pG-HBFZ-Bx7t-ePMk-7YjhaM LV Write Access read/write [..]
lvscan
コマンド: システム内のすべての論理ボリュームをスキャンし、それらを一覧表示します。# lvscan ACTIVE '/dev/myvg/mylv' [500.00 MiB] inherit
論理ボリュームにファイルシステムを作成します。以下のコマンドを使用すると、論理ボリュームに
xfs
ファイルシステムが作成されます。# mkfs.xfs /dev/myvg/mylv meta-data=/dev/myvg/mylv isize=512 agcount=4, agsize=32000 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=128000, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=1368, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Discarding blocks...Done.
論理ボリュームをマウントして、ファイルシステムのディスクの領域使用率を報告します。
# mount /dev/myvg/mylv /mnt # df -h Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/myvg-mylv 506528 29388 477140 6% /mnt
関連情報
-
lvcreate(8)
、lvdisplay(8)
、lvs(8)
、lvscan(8)
、lvm(8)
、およびmkfs.xfs(8)
の man ページ
5.4. RAID0 ストライピング 論理ボリュームの作成
RAID0 論理ボリュームは、論理ボリュームデータをストライプサイズ単位で複数のデータサブボリューム全体に分散します。以下の手順では、ディスク間でデータをストライピングする mylv という LVM RAID0 論理ボリュームを作成します。
前提条件
- 3 つ以上の物理ボリュームを作成している。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
- ボリュームグループを作成している。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
既存のボリュームグループから 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.
RAID0 論理ボリュームにファイルシステムを作成します。以下のコマンドを使用すると、論理ボリュームに ext4 ファイルシステムが作成されます。
# mkfs.ext4 /dev/my_vg/mylv
論理ボリュームをマウントして、ファイルシステムのディスクの領域使用率を報告します。
# 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
5.5. LVM 論理ボリュームの名前の変更
この手順では、既存の論理ボリューム mylv の名前を mylv1 に変更する方法を説明します。
手順
論理ボリュームが現在マウントされている場合は、ボリュームをアンマウントします。
# umount /mnt
/mnt は、マウントポイントに置き換えます。
既存の論理ボリュームの名前を変更します。
# lvrename myvg mylv mylv1 Renamed "mylv" to "mylv1" in volume group "myvg"
また、デバイスへの完全パスを指定して、論理ボリュームの名前を変更することもできます。
# lvrename /dev/myvg/mylv /dev/myvg/mylv1
関連情報
-
lvrename(8)
の man ページ
5.6. 論理ボリュームからのディスクの削除
この手順では、ディスクを交換するか、または別のボリュームで使用するために、既存の論理ボリュームからディスクを削除する方法を説明します。
ディスクを削除する前に、LVM 物理ボリュームのエクステントを、別のディスクまたはディスクセットに移動する必要があります。
手順
LV を使用する際に、物理ボリュームの使用済み容量と空き容量を表示します。
# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/vdb1 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 myvg lvm2 a-- 1020.00m 1008.00m 12.00m
データを他の物理ボリュームに移動します。
既存のボリュームグループ内の他の物理ボリュームに空きエクステントが十分にある場合は、以下のコマンドを使用してデータを移動します。
# pvmove /dev/vdb3 /dev/vdb3: Moved: 2.0% ... /dev/vdb3: Moved: 79.2% ... /dev/vdb3: Moved: 100.0%
既存のボリュームグループ内の他の物理ボリュームに空きエクステントが十分にない場合は、以下のコマンドを使用して新しい物理ボリュームを追加し、新たに作成した物理ボリュームを使用してボリュームグループを拡張し、この物理ボリュームにデータを移動します。
# pvcreate /dev/vdb4 Physical volume "/dev/vdb4" successfully created # vgextend myvg /dev/vdb4 Volume group "myvg" successfully extended # pvmove /dev/vdb3 /dev/vdb4 /dev/vdb3: Moved: 33.33% /dev/vdb3: Moved: 100.00%
物理ボリュームを削除します。
# vgreduce myvg /dev/vdb3 Removed "/dev/vdb3" from volume group "myvg"
論理ボリュームに、障害のある物理ボリュームが含まれる場合は、その論理ボリュームを使用することはできません。見つからない物理ボリュームをボリュームグループから削除します。その物理ボリュームに論理ボリュームが割り当てられていない場合は、
vgreduce
コマンドの--removemissing
パラメーターを使用できます。# vgreduce --removemissing myvg
関連情報
-
pvmove(8)
、vgextend(8)
、vereduce(8)
、およびpvs(8)
の man ページ
5.7. LVM 論理ボリュームの削除
この手順では、既存の論理ボリューム /dev/myvg/mylv1 をボリュームグループ myvg から削除する方法を説明します。
手順
論理ボリュームが現在マウントされている場合は、ボリュームをアンマウントします。
# umount /mnt
クラスター環境に論理ボリュームが存在する場合は、アクティブになっているすべてのノードで、論理ボリュームを非アクティブにします。アクティブになっている各ノードで、次のコマンドを実行します。
# lvchange --activate n vg-name/lv-name
lvremove
ユーティリティーを使用して、論理ボリュームを削除します。# lvremove /dev/myvg/mylv1 Do you really want to remove active logical volume "mylv1"? [y/n]: y Logical volume "mylv1" successfully removed
注記この場合は、論理ボリュームが非アクティブになっていません。削除する前に論理ボリュームを明示的に非アクティブにした場合は、アクティブな論理ボリュームを削除するかどうかを確認するプロンプトが表示されません。
関連情報
-
lvremove(8)
の man ページ
5.8. RHEL システムロールを使用した LVM 論理ボリュームの管理
storage
ロールを使用して、次のタスクを実行します。
- 複数のディスクで設定されるボリュームグループに LVM 論理ボリュームを作成します。
- 論理ボリューム上に特定のラベルを付けて ext4 ファイルシステムを作成します。
- ext4 ファイルシステムを永続的にマウントします。
前提条件
-
storage
ロールを含む Ansible Playbook がある。
5.8.1. 論理ボリュームを管理する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、ボリュームグループに LVM 論理ボリュームを作成します。
例5.1 myvg ボリュームグループに mylv 論理ボリュームを作成する Playbook
- hosts: all vars: storage_pools: - name: myvg disks: - sda - sdb - sdc volumes: - name: mylv size: 2G fs_type: ext4 mount_point: /mnt/data roles: - rhel-system-roles.storage
myvg
ボリュームグループは、次のディスクで設定されます。-
/dev/sda
-
/dev/sdb
-
/dev/sdc
-
-
myvg
ボリュームグループがすでに存在する場合は、Playbook により論理ボリュームがボリュームグループに追加されます。 -
myvg
ボリュームグループが存在しない場合は、Playbook により作成されます。 -
Playbook は、
mylv
論理ボリューム上に Ext4 ファイルシステムを作成し、/mnt
ファイルシステムを永続的にマウントします。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
5.8.2. 関連情報
-
storage
ロールの詳細は、RHEL システムロールを使用したローカルストレージの管理 を参照してください。
5.9. LVM ボリュームグループの削除
vgremove
コマンドを使用して、既存のボリュームグループを削除できます。
前提条件
- ボリュームグループには論理ボリュームがありません。ボリュームグループから論理ボリュームを削除するには、LVM 論理ボリュームの削除 を参照してください。
手順
クラスター環境にボリュームグループが存在する場合は、その他のすべてのノードで、ボリュームグループの
lockspace
を停止します。削除を実行しているノードを除くすべてのノードで次のコマンドを使用します。# vgchange --lockstop vg-name
ロックが停止するのを待ちます。
ボリュームグループを削除します。
# vgremove vg-name Volume group "vg-name" successfully removed
関連情報
-
vgremove(8)
の man ページ
第6章 論理ボリュームのサイズ変更
論理ボリュームを作成したら、ボリュームのサイズを変更できます。
6.1. 論理ボリュームとファイルシステムの拡張
lvextend
コマンドを使用して、論理ボリューム (LV) を拡張できます。追加する LV の容量、または拡張後の LV のサイズを指定できます。LV とともに基礎となるファイルシステムを拡張するには、lvextend
コマンドの -r
オプションを使用します。
lvresize
コマンドを使用して論理ボリュームを拡張することもできますが、このコマンドでは、誤って縮小されない保証はありません。
前提条件
-
ファイルシステムを持つ既存の論理ボリューム (LV) がある。
df -Th
コマンドを使用して、ファイルシステムのタイプとサイズを確認します。論理ボリュームおよびファイルシステムの作成に関する詳細は、LVM 論理ボリュームの作成 を参照してください。 -
LV およびファイルシステムを拡張するのに十分な領域がボリュームグループにある。
vgs -o name,vgfree
コマンドを使用して、利用可能な領域を確認します。ボリュームグループの作成の詳細は、LVM ボリュームグループの作成 を参照してください。
手順
ボリュームグループに LV を拡張するのに十分な領域がない場合は、ボリュームグループに新しい物理ボリュームを追加します。
# vgextend myvg /dev/vdb3 Physical volume "/dev/vdb3" successfully created. Volume group "myvg" successfully extended.
LV とファイルシステムを拡張します。
注記-r
引数を指定せずにlvextend
コマンドを使用すると、LV のみが拡張されます。基礎となる XFS ファイルシステムを拡張するには、XFS ファイルシステムのサイズの拡大 を参照してください。GFS2 ファイルシステムの場合は、GFS2 ファイルシステムの拡張 を、ext4 ファイルシステムの場合は、ext4 ファイルシステムのサイズ変更 を参照してください。注記-L
オプションを使用して、LV を新しいサイズに拡張します。-l
オプションを使用して、増やす論理ボリュームのサイズに応じてエクステントの数を指定します。# lvextend -r -L 3G /dev/myvg/mylv fsck from util-linux 2.32.1 /dev/mapper/myvg-mylv: clean, 11/131072 files, 26156/524288 blocks Size of logical volume myvg/mylv changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents). Logical volume myvg/mylv successfully resized. resize2fs 1.45.6 (20-Mar-2020) Resizing the filesystem on /dev/mapper/myvg-mylv to 786432 (4k) blocks. The filesystem on /dev/mapper/myvg-mylv is now 786432 (4k) blocks long.
また、mylv 論理ボリュームを拡張して、myvg ボリュームグループの未割り当て領域をすべて埋めることもできます。
# lvextend -l +100%FREE /dev/myvg/mylv Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 6.35 TiB (1665465 extents). Logical volume myvg/mylv successfully resized.
検証
ファイルシステムと LV が拡張されたことを確認します。
# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/rhel-root xfs 45G 3.7G 42G 9% / /dev/vda1 xfs 1014M 369M 646M 37% /boot tmpfs tmpfs 374M 0 374M 0% /run/user/0 /dev/mapper/myvg-mylv xfs 2.0G 47M 2.0G 3% /mnt/mnt1
関連情報
-
vgextend(8)
、lvextend(8)
、およびxfs_growfs(8)
の man ページ
6.2. 論理ボリュームの縮小
lvreduce
コマンドとその sizefs
オプションを使用すると、論理ボリュームとそのファイルシステムのサイズを削減できます。
縮小する論理ボリュームにファイルシステムが含まれている場合は、データの損失を防ぐため、ファイルシステムが、縮小する論理ボリュームにある領域を使用しないようにしてください。そのため、論理ボリュームにファイルシステムが含まれている場合は、lvreduce
コマンドの --resizefs
オプションを使用してください。
--resizefs
を使用すると、lvreduce
は論理ボリュームを縮小する前にファイルシステムの縮小しようとします。ファイルシステムがいっぱいであるか、圧縮をサポートしていないためにファイルシステムの圧縮が失敗した場合、lvreduce
コマンドは失敗し、論理ボリュームの圧縮は試行されません。
ほとんどの場合、lvreduce
コマンドはデータ損失の可能性を警告し、確認を要求します。しかし、論理ボリュームが非アクティブな状態であったり、--resizefs
オプションが使用されなかった場合など、警告が表示されない場合があるため、データの損失を防ぐのに確認プロンプトのみを信頼しないようにしてください。
lvreduce
コマンドの --test
オプションを使用しても、このオプションはファイルシステムのチェックやファイルシステムのサイズ変更のテストを行わないため、操作が安全かどうかは示されないことに注意してください。
前提条件
論理ボリュームのファイルシステムが縮小をサポートしている。
df -Th
コマンドを使用して、ファイルシステムのタイプとサイズを確認します。注記たとえば、GFS2 および XFS ファイルシステムは縮小をサポートしていません。
- 基礎となるファイルシステムが、削減する LV 内の領域を使用していない。
手順
次のオプションのいずれかを使用して、myvg ボリュームグループ内の mylv 論理ボリュームとそのファイルシステムを縮小します。
LV とそのファイルシステムを希望の値まで縮小します。
# lvreduce --resizefs -L 500M myvg/mylv File system ext4 found on myvg/mylv. File system size (2.00 GiB) is larger than the requested size (500.00 MiB). File system reduce is required using resize2fs. [...] Logical volume myvg/mylv successfully resized.
サイズ変更値の前に
-
記号を使用して、LV の実際のサイズから値を減算して、LV とそのファイルシステムを縮小します。# lvreduce --resizefs -L -64M myvg/mylv File system ext4 found on myvg/mylv. File system size (500.00 MiB) is larger than the requested size (436.00 MiB). File system reduce is required using resize2fs. File system fsck will be run before reduce. Reducing file system ext4 to 436.00 MiB (457179136 bytes) on myvg/mylv... e2fsck /dev/myvg/mylv /dev/myvg/mylv: 11/32768 files (0.0% non-contiguous), 19217/128000 blocks e2fsck done resize2fs /dev/myvg/mylv 446464k resize2fs 1.46.5 (30-Dec-2021) Resizing the filesystem on /dev/myvg/mylv to 111616 (4k) blocks. The filesystem on /dev/myvg/mylv is now 111616 (4k) blocks long. resize2fs done Reduced file system ext4 on myvg/mylv. Size of logical volume myvg/mylv changed from 500.00 MiB (125 extents) to 436.00 MiB (109 extents). Logical volume myvg/mylv successfully resized
関連情報
-
lvreduce(8)
の man ページ
6.3. ストライプ化論理ボリュームの拡張
lvextend
コマンドを使用して必要なサイズを指定すると、ストライプ化論理ボリューム (LV) を拡張できます。
前提条件
- ボリュームグループ (VG) を構成する基礎となる物理ボリューム (PV) に、ストライプをサポートするのに十分な空き領域がある。
手順
オプション: ボリュームグループを表示します。
# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 271.31G 271.31G
ボリュームグループの全領域を使用して、ストライプを作成できます。
# lvcreate -n stripe1 -L 271.31G -i 2 myvg Using default stripesize 64.00 KB Rounding up size to full physical extent 271.31 GiB
新しい物理ボリュームを追加して、myvg ボリュームグループを拡張します。
# vgextend myvg /dev/sdc1 Volume group "myvg" successfully extended
この手順を繰り返して、ストライプのタイプと使用する領域の量に応じて、十分な物理ボリュームを追加します。たとえば、ボリュームグループ全体を使用する双方向ストライプの場合、少なくとも 2 つの物理ボリュームを追加する必要があります。
myvg VG の一部であるストライプ論理ボリューム stripe1 を拡張します。
# lvextend myvg/stripe1 -L 542G Using stripesize of last segment 64.00 KB Extending logical volume stripe1 to 542.00 GB Logical volume stripe1 successfully resized
また、stripe1 論理ボリュームを拡張して、myvg ボリュームグループの未割り当て領域をすべて埋めることもできます。
# lvextend -l+100%FREE myvg/stripe1 Size of logical volume myvg/stripe1 changed from 1020.00 MiB (255 extents) to <2.00 GiB (511 extents). Logical volume myvg/stripe1 successfully resized.
検証
拡張したストライプ LV の新しいサイズを確認します。
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert stripe1 myvg wi-ao---- 542.00 GB
第7章 LVM 用のカスタム報告
LVM では、カスタマイズされたレポートを生成したり、レポートの出力をフィルターリングしたりするための様々な設定およびコマンドラインオプションが提供されます。LVM レポート機能の完全な説明は、man ページの lvmreport
(7) を参照してください。
コマンドの pvs
、lvs
、および vgs
を使用して、LVM オブジェクトについて簡潔でカスタマイズ可能なレポートを作成できます。このコマンドが生成するレポートには、オブジェクトごとに 1 行の出力が含まれます。各行には、オブジェクトに関連するプロパティーのフィールドについて、順序付けられた一覧が含まれます。レポートするオブジェクトを選択する方法には、物理ボリューム別、ボリュームグループ別、論理ボリューム別、物理ボリュームセグメント別、および論理ボリュームセグメント別の 5 つの方法があります。
lvm fullreport
コマンドを使用して、物理ボリューム、ボリュームグループ、論理ボリューム、物理ボリュームセグメント、および論理ボリュームセグメントに関する情報を一度に報告できます。このコマンドとその機能の詳細は、man ページの lvm-fullreport
(8) を参照してください。
LVM は、LVM コマンドの実行中に収集された操作、メッセージ、および各オブジェクトのステータス (完全なオブジェクト ID 付き) のログが含まれるログレポートをサポートします。LVM ログレポートの詳細は、man ページの lvmreport
(7) を参照してください。
7.1. LVM 表示の形式の制御
コマンドの pvs
、lvs
、または vgs
のどれを使用するかによって、表示されるデフォルトのフィールドセットとソート順序が決定します。このコマンドの出力は、以下の引数を使用して制御できます。
-o
引数を使用すると、表示するフィールドをデフォルト以外に変更できます。たとえば、以下のコマンドは、物理ボリュームの名前とサイズのみを表示します。#
pvs -o pv_name,pv_size
PV PSize /dev/sdb1 17.14G /dev/sdc1 17.14G /dev/sdd1 17.14G-o 引数との組み合わせで使用するプラス記号 (+) を使用して、出力にフィールドを追加できます。
以下の例は、デフォルトフィールドに加えて、物理ボリュームの UUID を表示しています。
#
pvs -o +pv_uuid
PV VG Fmt Attr PSize PFree PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G Joqlch-yWSj-kuEn-IdwM-01S9-X08M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-UqkCSコマンドに
-v
引数を追加すると、追加のフィールドが含まれます。たとえば、pvs -v
コマンドは、デフォルトフィールドに加えて、DevSize
フィールドとPV UUID
フィールドも表示します。#
pvs -v
Scanning for physical volume names PV VG Fmt Attr PSize PFree DevSize PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G 17.14G Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS--noheadings
引数は、見出し行を表示しません。これはスクリプトを作成する際に便利です。以下の例は、
pv_name
引数と共に--noheadings
引数を使用して、すべての物理ボリュームの一覧を生成しています。#
pvs --noheadings -o pv_name
/dev/sdb1 /dev/sdc1 /dev/sdd1--separator separator
引数は、区切り文字 を使用して、各フィールドを区切ります。次の例は、
pvs
コマンドのデフォルト出力フィールドを等号 (=) で分割しています。#
pvs --separator =
PV=VG=Fmt=Attr=PSize=PFree /dev/sdb1=new_vg=lvm2=a-=17.14G=17.14G /dev/sdc1=new_vg=lvm2=a-=17.14G=17.09G /dev/sdd1=new_vg=lvm2=a-=17.14G=17.14Gseparator
引数の使用時にフィールドを配置するには、--aligned
引数とともにseparator
引数を使用します。#
pvs --separator = --aligned
PV =VG =Fmt =Attr=PSize =PFree /dev/sdb1 =new_vg=lvm2=a- =17.14G=17.14G /dev/sdc1 =new_vg=lvm2=a- =17.14G=17.09G /dev/sdd1 =new_vg=lvm2=a- =17.14G=17.14G
lvs
コマンドまたは vgs
コマンドの -P
引数を使用して、通常の出力では表示されない、障害が発生したボリュームの情報を表示します
表示引数の一覧は、man ページの pvs
(8)、vgs
(8)、および lvs
(8) を参照してください。
ボリュームグループフィールドは、物理ボリューム (および物理ボリュームセグメント) フィールド、または論理ボリューム (および論理ボリュームセグメント) フィールドと混在させることができますが、物理ボリュームフィールドと論理ボリュームフィールドは混在させることができません。たとえば、以下のコマンドは、1 つの物理ボリュームつき 1 行の出力を表示します。
# vgs -o +pv_name
VG #PV #LV #SN Attr VSize VFree PV
new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdc1
new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdd1
new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdb1
7.2. LVM オブジェクト表示フィールド
pvs
、vgs
、および lvs
コマンドを使用して、LVM オブジェクトに関する追加情報を表示できます。
フィールド名の接頭辞は、コマンドのデフォルトと一致する場合は省略できます。たとえば、pvs
コマンドでは、name
は pv_name
、vgs
コマンドでは、name
は vg_name
と解釈されます。
以下のコマンドの実行は、pvs -o pv_free
の実行に相当します。
# pvs -o free PFree 17.14G 17.09G 17.14G
pvs
、vgs
、および lvs
出力の属性フィールドにある文字数は、以降のリリースで増える可能性があります。既存の文字フィールドの位置は変更しませんが、新しいフィールドが末尾に追加される可能性があります。相対的な位置を使用して特定の属性文字を検索するスクリプトを作成する場合は、このことを考慮して、フィールドの終点ではなく、フィールドの始点を基点として文字検索を行います。たとえば、lv_attr
フィールドの 9 番目のビットの文字 p
を検索する場合は、文字列^/……..p/で指定できます。/*p$/は使用しないでください。
表7.1「pvs コマンド表示フィールド」 は、pvs
コマンドの表示引数、ヘッダーに表示されるフィールド名、フィールドの説明を一覧にまとめています。
表7.1 pvs コマンド表示フィールド
引数 | ヘッダー | 説明 |
---|---|---|
| DevSize | 物理ボリュームを作成する基となるデバイスのサイズ |
| 1st PE | 基となるデバイス内の最初の物理エクステントの開始点までのオフセット |
| Attr | 物理ボリュームのステータス - (a)llocatable または e(x)ported |
| Fmt |
物理ボリュームのメタデータ形式 ( |
| PFree | 物理ボリュームにある残りの空き領域 |
| PV | 物理ボリュームの名前 |
| Alloc | 使用される物理エクステントの数 |
| PE | 物理エクステントの数 |
| SSize | 物理ボリュームのセグメントサイズ |
| Start | 物理ボリュームセグメントの最初の物理エクステント |
| PSize | 物理ボリュームのサイズ |
| PV Tags | 物理ボリュームに割り当てられた LVM タグ |
| Used | 物理ボリュームで現在使用中の領域の量 |
| PV UUID | 物理ボリュームの UUID |
デフォルトでは、pvs
コマンドは pv_name
、vg_name
、pv_fmt
、pv_attr
、pv_size
、および pv_free
フィールドを表示します。この表示は、pv_name
でソートされています。
# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd1 new_vg lvm2 a- 17.14G 17.13G
pvs
コマンドに -v
引数を使用すると、デフォルトの表示に、dev_size
フィールドおよび pv_uuid
フィールドが追加されます。
# pvs -v Scanning for physical volume names PV VG Fmt Attr PSize PFree DevSize PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G 17.14G Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.13G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS
pvs
コマンドに --segments
引数を使用すると、各物理ボリュームセグメントの情報を表示します。セグメントはエクステントの集合です。セグメントの表示は、論理ボリュームがフラグメント化 (断片化) しているかどうかを確認するのに役立ちます。
デフォルトで pvs --segments
コマンドが表示するフィールドは、pv_name
、vg_name
、pv_fmt
、pv_attr
、pv_size
、pv_free
、pvseg_start
、および pvseg_size
です。この表示は、物理ボリューム内では pv_name
および pvseg_size
でソートされています。
# pvs --segments PV VG Fmt Attr PSize PFree Start SSize /dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 0 1172 /dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 1172 16 /dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 1188 1 /dev/sda1 vg lvm2 a- 17.14G 16.75G 0 26 /dev/sda1 vg lvm2 a- 17.14G 16.75G 26 24 /dev/sda1 vg lvm2 a- 17.14G 16.75G 50 26 /dev/sda1 vg lvm2 a- 17.14G 16.75G 76 24 /dev/sda1 vg lvm2 a- 17.14G 16.75G 100 26 /dev/sda1 vg lvm2 a- 17.14G 16.75G 126 24 /dev/sda1 vg lvm2 a- 17.14G 16.75G 150 22 /dev/sda1 vg lvm2 a- 17.14G 16.75G 172 4217 /dev/sdb1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdc1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdd1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sde1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdf1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdg1 vg lvm2 a- 17.14G 17.14G 0 4389
pvs -a
コマンドを使用して、LVM が検出した、LVM 物理ボリュームとして初期化していないデバイスを確認できます。
# pvs -a PV VG Fmt Attr PSize PFree /dev/VolGroup00/LogVol01 -- 0 0 /dev/new_vg/lvol0 -- 0 0 /dev/ram -- 0 0 /dev/ram0 -- 0 0 /dev/ram2 -- 0 0 /dev/ram3 -- 0 0 /dev/ram4 -- 0 0 /dev/ram5 -- 0 0 /dev/ram6 -- 0 0 /dev/root -- 0 0 /dev/sda -- 0 0 /dev/sdb -- 0 0 /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc -- 0 0 /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd -- 0 0 /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G
表7.2「vgs 表示フィールド」 は、vgs
コマンドの表示引数、ヘッダーに表示されるフィールド名、およびフィールドの説明を一覧にまとめています。
表7.2 vgs 表示フィールド
引数 | ヘッダー | 説明 |
---|---|---|
| #LV | ボリュームグループに含まれる論理ボリュームの数 |
| MaxLV | ボリュームグループで許容される論理ボリュームの最大数 (無制限の場合は 0) |
| MaxPV | ボリュームグループで許容される物理ボリュームの最大数 (無制限の場合は 0) |
| #PV | ボリュームグループを定義する物理ボリューム数 |
| #SN | ボリュームグループに含まれるスナップショット数 |
| Attr | ボリュームグループのステータス - (w)riteable (書き込み可能)、(r)eadonly (読み取りのみ)、resi(z)eable (サイズ変更可能)、e(x)ported (エクスポート済)、(p)artial (部分的)、および (c)lustered (クラスター化) |
| #Ext | ボリュームグループの物理エクステントの数 |
| Ext | ボリュームグループの物理エクステントのサイズ |
| Fmt |
ボリュームグループのメタデータ形式 ( |
| VFree | ボリュームグループの残りの空き領域のサイズ |
| Free | ボリュームグループの空き物理エクステントの数 |
| VG | ボリュームグループ名 |
| Seq | ボリュームグループの改訂を示す番号 |
| VSize | ボリュームグループのサイズ |
| SYS ID | LVM1 システム ID |
| VG Tags | ボリュームグループに割り当てられた LVM タグ |
| VG UUID | ボリュームグループの UUID |
デフォルトで vgs
コマンドが表示するフィールドは、vg_name
、pv_count
、lv_count
、snap_count
、vg_attr
、vg_size
、および vg_free
です。この表示は、vg_name
でソートされています。
# vgs VG #PV #LV #SN Attr VSize VFree new_vg 3 1 1 wz--n- 51.42G 51.36G
vgs
コマンドに -v
引数を使用すると、デフォルトの表示に vg_extent_size
および vg_uuid
フィールドが追加されます。
# vgs -v Finding all volume groups Finding volume group "new_vg" VG Attr Ext #PV #LV #SN VSize VFree VG UUID new_vg wz--n- 4.00M 3 1 1 51.42G 51.36G jxQJ0a-ZKk0-OpMO-0118-nlwO-wwqd-fD5D32
表7.3「lvs 表示フィールド」 は、lvs
コマンドの表示引数、ヘッダーに表示されるフィールド名、およびフィールドの説明を一覧にまとめています。
Red Hat Enterprise Linux の最近のリリースでは、lvs
コマンドの出力にフィールドが追加されている場合があります。ただし、フィールドの順序は同じで、追加のフィールドは出力の最後に表示されます。
表7.3 lvs 表示フィールド
引数 | ヘッダー | 説明 |
---|---|---|
*
* | Chunk | スナップショットボリュームのユニットサイズ |
| Copy% |
ミラー化論理ボリュームの同期のパーセンテージ。さらに |
| Devices | 論理ボリュームを設定するデバイス - 物理ボリューム、論理ボリューム、および物理エクステントと論理エクステントの開始点 |
| Ancestors | シンプールスナップショットにおける、論理ボリュームの先祖 (ancestor) |
| Descendants | シンプールスナップショットにおける、論理ボリュームの子孫 (descendant) |
| Attr | 論理ボリュームのステータス。論理ボリュームの属性ビットは以下のようになります。 * ビット 1 - ボリュームタイプ - (m)irrored (ミラー化)、(M)irrored without initial sync (初期同期なしのミラー化)、(o)rigin (作成元)、(O)rigin with merging snapshot (マージするスナップショットがある作成元)、(r)aid (RAID)、(R)aid without initial sync (初期同期なしの RAID)、(s)napshot (スナップショット)、merging (S)napshot (マージするスナップショット)、(p)vmove (物理ボリュームの移動)、(v)irtual (仮想)、mirror or raid (i)mage (ミラーまたは RAID イメージ)、mirror or raid (I)mage out-of-sync (ミラーまたは RAID イメージの非同期)、mirror (l)og device (ミラーログデバイス)、under (c)onversion (変換中)、thin (V)olume (シンボリューム)、(t)hin pool (シンプール)、(T)hin pool data (シンプールデータ)、raid or thin pool m(e)tadata or pool metadata spare (RAID またはシンプールメタデータもしくはプールメタデータのスペア) * ビット 2 - パーミッション - (w)riteable (書き込み可能)、(r)ead-only (読み取り専用)、(R)ead-only activation of non-read-only volume (読み取り専用でないボリュームを読み取り専用にアクティブ化)
* ビット 3 - 割り当てポリシー - (a)nywhere (どこでも)、(c)ontiguous (連続的)、(i)nherited (継承)、c(l)ing (膠着)、(n)ormal (通常)。これは、たとえば * ビット 4 - 固定されたマイナー番号 * ビット 5 - ステータス - (a)ctive (アクティブ)、(s)uspended (サスペンド)、(I)nvalid snapshot (無効なスナップショット)、invalid (S)uspended snapshot (無効なサスペンドされたスナップショット)、snapshot (m)erge failed (スナップショットのマージが失敗)、suspended snapshot (M)erge failed (サスペンドされたスナップショットのマージが失敗)、mapped (d)evice present without tables (テーブルのないマッピングされたデバイス)、mapped device present with (i)nactive table (非アクティブのテーブルを持つマッピングされたデバイス) * ビット 6 - デバイス開放 (o) * ビット 7 - ターゲットタイプ - (m)irror (ミラー)、(r)aid (RAID)、(s)napshot (スナップショット)、(t)hin (シン)、(u)nknown (不明)、(v)irtual (仮想)。これは、同じカーネルターゲットに関連する論理ボリュームをまとめます。たとえば、ミラーイメージ、ミラーログ、ミラー自体が、元のデバイスマッパーのミラーカーネルドライバーを使用する場合は、(m) と表示されます。md raid カーネルドライバーを使用する同等の RAID はすべて (r) と表示されます。元のデバイスマッパードライバーを使用するスナップショットは (s) と表示され、シンプロビジョニングドライバーを使用するシンボリュームのスナップショットは (t) と表示されます。 * ビット 8 - 新しく割り当てられたデータブロックは使用前に、ゼロ (z) のブロックで上書きされます。
* ビット 9 - ボリュームの正常性 - (p)artial (部分的)、(r)efresh needed (更新が必要)、(m)ismatches exist (不一致が存在)、(w)ritemostly (書き込み多発)。部分的 (p) は、この論理ボリュームが使用する 1 つ以上の物理ボリュームがシステムから欠落していることを表します。更新 (r) は、この RAID 論理ボリュームが使用する 1 つ以上の物理ボリュームで書き込みエラーが発生したことを表します。書き込みエラーは、その物理ボリュームの一時的な障害により引き起こされたか、または物理ボリュームに障害があることを示すかのいずれかの可能性があります。デバイスは更新するか、または置き換える必要があります。不一致 (m) は、RAID 論理ボリュームのアレイに一貫していない部分があることを表します。不整合は、RAID 論理ボリュームで * ビット 10 - s(k)ip activation (アクティブ化のスキップ - このボリュームには、アクティブ化の実行時にスキップされるようにフラグが設定されます。 |
| KMaj | 論理ボリュームの実際のメジャーデバイス番号 (非アクティブの場合は -1) |
| KMIN | 論理ボリュームの実際のマイナーデバイス番号 (非アクティブの場合は -1) |
| Maj | 論理ボリュームの永続的なメジャーデバイス番号 (未指定の場合は -1) |
| Min | 論理ボリュームの永続的なマイナーデバイス番号 (未指定の場合は -1) |
| LV | 論理ボリュームの名前 |
| LSize | 論理ボリュームのサイズ |
| LV Tags | 論理ボリュームに割り当てられた LVM タグ |
| LV UUID | 論理ボリュームの UUID |
| Log | ミラーログが存在するデバイス |
| Modules | この論理ボリュームを使用するのに必要な、対応するカーネルデバイスマッパーターゲット |
| Move |
|
| Origin | スナップショットボリュームの作成元のデバイス |
*
* | Region | ミラー化論理ボリュームのユニットサイズ |
| #Seg | 論理ボリュームのセグメント数 |
| SSize | 論理ボリュームのセグメントサイズ |
| Start | 論理ボリュームのセグメントのオフセット |
| Seg Tags | 論理ボリュームのセグメントに割り当てられた LVM タグ |
| タイプ | 論理ボリュームのセグメントタイプ (例: ミラー、ストライプ、リニア) |
| Snap% | 使用中スナップショットボリュームの現在のパーセンテージ |
| #Str | 論理ボリュームのストライプ、またはミラーの数 |
*
* | Stripe | ストライプ化論理ボリュームのストライプのユニットサイズ |
デフォルトで lvs
コマンドが表示するのは以下になります。デフォルトの表示は、ボリュームグループ内では vg_name
および lv_name
でソートされます。
# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert origin VG owi-a-s--- 1.00g snap VG swi-a-s--- 100.00m origin 0.00
lvs
コマンドの一般的な用途は、論理ボリュームを設定するデバイスを表示するコマンドに、devices
を追加することです。また、この例では、-a
オプションを指定して、RAID ミラーなどの論理ボリュームのコンポーネントである内部ボリュームを、括弧で囲んで表示します。この例には、RAID ボリューム、ストライプのボリューム、シンプールのボリュームが含まれます。
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices raid1 VG rwi-a-r--- 1.00g 100.00 raid1_rimage_0(0),raid1_rimage_1(0) [raid1_rimage_0] VG iwi-aor--- 1.00g /dev/sde1(7041) [raid1_rimage_1] VG iwi-aor--- 1.00g /dev/sdf1(7041) [raid1_rmeta_0] VG ewi-aor--- 4.00m /dev/sde1(7040) [raid1_rmeta_1] VG ewi-aor--- 4.00m /dev/sdf1(7040) stripe1 VG -wi-a----- 99.95g /dev/sde1(0),/dev/sdf1(0) stripe1 VG -wi-a----- 99.95g /dev/sdd1(0) stripe1 VG -wi-a----- 99.95g /dev/sdc1(0) [lvol0_pmspare] rhel_host-083 ewi------- 4.00m /dev/vda2(0) pool00 rhel_host-083 twi-aotz-- <4.79g 72.90 54.69 pool00_tdata(0) [pool00_tdata] rhel_host-083 Twi-ao---- <4.79g /dev/vda2(1) [pool00_tmeta] rhel_host-083 ewi-ao---- 4.00m /dev/vda2(1226) root rhel_host-083 Vwi-aotz-- <4.79g pool00 72.90 swap rhel_host-083 -wi-ao---- 820.00m /dev/vda2(1227)
lvs
コマンドで -v
引数を使用して、デフォルトの表示に、seg_count
、lv_major
、lv_minor
、lv_kernel_major
、lv_kernel_minor
、lv_uuid
のフィールドを追加します。
# lvs -v Finding all logical volumes LV VG #Seg Attr LSize Maj Min KMaj KMin Origin Snap% Move Copy% Log Convert LV UUID lvol0 new_vg 1 owi-a- 52.00M -1 -1 253 3 LBy1Tz-sr23-OjsI-LT03-nHLC-y8XW-EhCl78 newvgsnap1 new_vg 1 swi-a- 8.00M -1 -1 253 5 lvol0 0.20 1ye1OU-1cIu-o79k-20h2-ZGF0-qCJm-CfbsIx
lvs
コマンドの --segments
引数を使用して、セグメント情報を強調するデフォルトの列で情報を表示できます。segments
引数を使用する場合、seg
接頭辞は必要に応じて使用します。デフォルトで lvs --segments
コマンドが表示するフィールドは、lv_name
、vg_name
、lv_attr
、stripes
、segtype
、seg_size
です。デフォルトの表示は、ボリュームグループ内では vg_name
、lv_name
でソートされ、論理ボリュームでは seg_start
でソートされます。論理ボリュームが断片化されると、このコマンドの出力が表示されます。
# lvs --segments LV VG Attr #Str Type SSize LogVol00 VolGroup00 -wi-ao 1 linear 36.62G LogVol01 VolGroup00 -wi-ao 1 linear 512.00M lv vg -wi-a- 1 linear 104.00M lv vg -wi-a- 1 linear 104.00M lv vg -wi-a- 1 linear 104.00M lv vg -wi-a- 1 linear 88.00M
lvs --segments
コマンドで -v
引数を使用すると、デフォルトの表示に seg_start
、stripsize
、および chunksize
フィールドが追加されます。
# lvs -v --segments Finding all logical volumes LV VG Attr Start SSize #Str Type Stripe Chunk lvol0 new_vg owi-a- 0 52.00M 1 linear 0 0 newvgsnap1 new_vg swi-a- 0 8.00M 1 linear 0 8.00K
以下の 1 つ目の例は、設定された論理ボリュームが 1 つあるシステムで実行した lvs
コマンドのデフォルト出力を示しています。その次の例は、segments
引数を指定した lvs
コマンドのデフォルト出力を表示しています。
# lvs LV VG Attr LSize Origin Snap% Move Log Copy% lvol0 new_vg -wi-a- 52.00M # lvs --segments LV VG Attr #Str Type SSize lvol0 new_vg -wi-a- 1 linear 52.00M
7.3. LVM 報告のソート
通常、lvs
コマンド、vgs
コマンド、または pvs
コマンドの出力全体をソートして、コラムを正しく配置する場合は、出力を生成して内部に保管する必要があります。--unbuffered
引数を指定すると、生成直後にソートされていないままの出力で表示できます。
別の順列のコラム一覧のソートを指定するには、報告コマンドのいずれかと一緒に -O
引数を使用します。出力自体に、このフィールドを含める必要はありません。
以下の例では、物理ボリュームの名前、サイズ、および空き領域を表示する pvs
コマンドの出力を示しています。
# pvs -o pv_name,pv_size,pv_free
PV PSize PFree
/dev/sdb1 17.14G 17.14G
/dev/sdc1 17.14G 17.09G
/dev/sdd1 17.14G 17.14G
以下の例では、空き領域のフィールドでソートされた同じ出力を示しています。
# pvs -o pv_name,pv_size,pv_free -O pv_free
PV PSize PFree
/dev/sdc1 17.14G 17.09G
/dev/sdd1 17.14G 17.14G
/dev/sdb1 17.14G 17.14G
以下の例では、ソートするフィールドを表示する必要がないことを示しています。
# pvs -o pv_name,pv_size -O pv_free
PV PSize
/dev/sdc1 17.14G
/dev/sdd1 17.14G
/dev/sdb1 17.14G
逆順でソートするには、-O
引数の後で指定するフィールドの先頭に -
印を付けます。
# pvs -o pv_name,pv_size,pv_free -O -pv_free
PV PSize PFree
/dev/sdd1 17.14G 17.14G
/dev/sdb1 17.14G 17.14G
/dev/sdc1 17.14G 17.09G
7.4. LVM レポート表示への単位の指定
LVM 報告表示用の単位を指定するには、報告コマンドに --units
引数を使用します。
- ベース 2 ユニット
2 の累乗 (1024 の倍数) で表示される既定の単位。以下を指定できます。
-
人間が判読できる (
r
)<
丸めインジケータ付き -
バイト (
b
) -
セクター (
秒
) -
キロバイト (
k
) -
メガバイト (
m
) -
ギガバイト (
g
) -
テラバイト (
t
) -
ペタバイト (
p
) -
エクサバイト (
e
) -
デフォルトの単位である人間が読める形式 (
h
)
-
人間が判読できる (
デフォルトの表示は r
で、人間が判読できます。このデフォルト設定を上書きするには、/etc/lvm/lvm.conf
ファイルの global セクションに units パラメーターを設定します。
- 基本 10 単位
-
単位指定 (
R
、B
、S
、K
、M
、G
、T
、P
、E
、H
) を大文字にすることで、表示する単位を 1000 の倍数で指定できます。
次の例では、pvs
、vgs
、および lvs
コマンドの出力を基数 2 のギガバイト単位で指定します。
# pvs --units g /dev/sdb
PV VG Fmt Attr PSize PFree
/dev/sdb test lvm2 a-- 931.00g 930.00g
# vgs --units g test VG #PV #LV #SN Attr VSize VFree test 1 1 0 wz-n 931.00g 931.00g
# lvs --units g test LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lvol0 test wi-a---- 1.OOg
次の例では、pvs
、vgs
、および lvs
コマンドの出力をベース 10 ギガバイト単位で指定します。
# pvs --units G /dev/sdb
PV VG Fmt Attr PSize PFree
/dev/sdb test lvm2 a-- 999.65G 998.58G
# vgs --units G test VG #PV #LV #SN Attr VSize VFree test 1 1 0 wz-n 999.65G 998.58G
# lvs --units G test LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lvol0 test wi-a---- 1.07G
512 バイトとして定義されたセクター (s
) またはカスタム単位を指定できます。次の例は、pvs
コマンドの出力を複数のセクターとして表示します。
# pvs --units s PV VG Fmt Attr PSize PFree /dev/sdb test lvm2 a-- 1952440320S 1950343168S
以下の例は、pvs
コマンドの出力を 4 MB 単位で表示しています。
# pvs --units 4m PV VG Fmt Attr PSize PFree /dev/sdb test lvm2 a-- 238335.00U 238079.00U
r
単位の目的は、h
(人間が読める形式) と同様に機能することですが、さらに、報告される値に <
または >
の接頭辞を付けて、実際のサイズが表示サイズよりわずかに大きいまたは小さいことを示します。r
設定は、LVM コマンドのデフォルトです。LVM は 10 進数値を四捨五入するため、正確でないサイズが報告されます。次の点に注意してください。
# vgs --units g test VG #PV #LV #SN Attr VSize VFree test 1 1 0 wz-n 931.00g 930.00g
# vgs --units r test VG #PV #LV #SN Attr VSize VFree test 1 1 0 wz-n <931.00g <930.00
# vgs test VG #PV #LV #SN Attr VSize VFree test 1 1 0 wz-n <931.00g <930.00g
--units
が指定されていない場合は、r
がデフォルトの単位であることに注意してください。また、--units g
(または他の --units
) が常に正確なサイズを表示するとは限らないことも示しています。また、表示されたサイズが正確でないことを示す <
である r
の主な目的も示しています。この例では、VG サイズがギガバイトの正確な倍数ではなく、.01 も分数の正確な表現ではないため、値は正確ではありません。
7.5. JSON 形式で LVM コマンド結果の表示
LVM 表示コマンドで --reportformat
オプションを使用して、JSON 形式で出力を表示できます。
以下の例では、標準的なデフォルト形式の lvs
の出力を示しています。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
my_raid my_vg Rwi-a-r--- 12.00m 100.00
root rhel_host-075 -wi-ao---- 6.67g
swap rhel_host-075 -wi-ao---- 820.00m
以下のコマンドは、JSON 形式を指定する場合と同じ LVM 設定の出力を表示します。
# lvs --reportformat json
{
"report": [
{
"lv": [
{"lv_name":"my_raid", "vg_name":"my_vg", "lv_attr":"Rwi-a-r---", "lv_size":"12.00m", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"100.00", "convert_lv":""},
{"lv_name":"root", "vg_name":"rhel_host-075", "lv_attr":"-wi-ao----", "lv_size":"6.67g", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":""},
{"lv_name":"swap", "vg_name":"rhel_host-075", "lv_attr":"-wi-ao----", "lv_size":"820.00m", "pool_lv":"", "origin":"", "data_percent":"", "metadata_percent":"", "move_pv":"", "mirror_log":"", "copy_percent":"", "convert_lv":""}
]
}
]
}
また、/etc/lvm/lvm.conf
ファイルで output_format
設定を使用して、レポート形式を設定オプションとして設定することもできます。ただし、コマンドラインの --reportformat
設定は、この設定よりも優先されます。
7.6. LVM コマンドログの表示
レポート指向および処理指向の LVM コマンドを使用して、コマンドログを報告できます (これが log/report_command_log
設定で有効になっている場合)。このレポートで表示およびソートするフィールドセットを決定できます。
以下の例では、LVM コマンド向けの完全なログレポートを生成するように LVM を設定します。この例では、論理ボリューム lvol0
と lvol1
の両方が、それらの論理ボリュームを含むボリュームグループ VG
とともに正常に処理されたことを確認できます。
#lvmconfig --type full log/command_log_selection
command_log_selection="all" #lvs
Logical Volume ============== LV LSize Cpy%Sync lvol1 4.00m 100.00 lvol0 4.00m Command Log =========== Seq LogType Context ObjType ObjName ObjGrp Msg Errno RetCode 1 status processing lv lvol0 vg success 0 1 2 status processing lv lvol1 vg success 0 1 3 status processing vg vg success 0 1 #lvchange -an vg/lvol1
Command Log =========== Seq LogType Context ObjType ObjName ObjGrp Msg Errno RetCode 1 status processing lv lvol1 vg success 0 1 2 status processing vg vg success 0 1
LVM レポートおよびコマンドログの設定の詳細については、lvmreport
の man ページを参照してください。
第8章 RAID 論理ボリュームの設定
VM Redundant Array of Independent Disks (RAID) ボリュームの作成、有効化、変更、削除、表示、および使用が可能です。
8.1. RAID 論理ボリューム
論理ボリュームマネージャー (LVM) は、Redundant Array of Independent Disks (RAID) レベル 0、1、4、5、6、10 をサポートします。LVM RAID ボリュームには以下の特徴があります。
- LVM は、Multiple Devices (MD) カーネルドライバーを活用した RAID 論理ボリュームを作成して管理する
- アレイから RAID1 イメージを一時的に分割し、後でアレイにマージし直すことが可能
- LVM RAID ボリュームはスナップショットに対応
その他にも、以下のような特徴があります。
- クラスター
RAID 論理ボリュームはクラスターには対応していません。
RAID 論理ボリュームは 1 台のマシンに排他的に作成およびアクティブ化できますが、複数のマシンで同時にアクティブにすることはできません。
- Subvolumes
RAID 論理ボリューム (LV) を作成するとき、LVM は、データまたはアレイ内のパリティーサブボリュームごとに、サイズが 1 エクステントのメタデータサブボリュームを作成します。
たとえば、2 方向の RAID1 アレイを作成すると、メタデータサブボリュームが 2 つ (
lv_rmeta_0
およびlv_rmeta_1
) と、データサブボリュームが 2 つ (lv_rimage_0
およびlv_rimage_1
) 作成されます。同様に、3 方向ストライプ (および暗黙的なパリティーデバイスが 1 つ) の RAID4 を作成すると、メタデータサブボリュームが 4 つ (lv_rmeta_0
、lv_rmeta_1
、lv_rmeta_2
、lv_rmeta_3
)、データサブボリュームが 4 つ (lv_rimage_0
、lv_rimage_1
、lv_rimage_2
、lv_rimage_3
) 作成されます。- インテグリティー
- RAID デバイスに障害が発生したり、ソフト破損が発生したときにデータが失われる場合があります。データストレージにおけるソフト破損は、ストレージデバイスから取得したデータが、そのデバイスに書き込まれるデータとは異なることを意味します。RAID LV に整合性を追加すると、ソフト破損が軽減または防止します。詳しくは、DM 整合性を備えた RAID LV の作成 を参照してください。
8.2. 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.3. LVM RAID のセグメントタイプ
RAID 論理ボリュームを作成するには、RAID タイプを lvcreate
コマンドの --type
引数として指定します。ほとんどのユーザーの場合、raid1
、raid4
、raid5
、raid6
、raid10
の 5 つの使用可能なプライマリータイプのいずれかを指定するだけで十分です。
以下の表は、考えられる RAID セグメントタイプを示しています。
表8.1 LVM RAID のセグメントタイプ
セグメントタイプ | 説明 |
---|---|
|
RAID1 ミラーリング。 |
| RAID4 専用パリティーディスク |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ストライピング。RAID0 では、ストライプサイズの単位で、複数のデータサブボリュームに論理ボリュームデータが分散されます。これは、パフォーマンスを向上させるために使用します。論理ボリュームのデータは、いずれかのデータサブボリュームで障害が発生すると失われます。 |
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. RAID0 ストライピング 論理ボリュームの作成
RAID0 論理ボリュームは、論理ボリュームデータをストライプサイズ単位で複数のデータサブボリューム全体に分散します。以下の手順では、ディスク間でデータをストライピングする mylv という LVM RAID0 論理ボリュームを作成します。
前提条件
- 3 つ以上の物理ボリュームを作成している。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
- ボリュームグループを作成している。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
既存のボリュームグループから 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.
RAID0 論理ボリュームにファイルシステムを作成します。以下のコマンドを使用すると、論理ボリュームに ext4 ファイルシステムが作成されます。
# mkfs.ext4 /dev/my_vg/mylv
論理ボリュームをマウントして、ファイルシステムのディスクの領域使用率を報告します。
# 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.6. RAID0 を作成するためのパラメーター
RAID0 ストライピング論理ボリュームは、lvcreate --type raid0[meta] --stripes _Stripes --stripesize StripeSize VolumeGroup [PhysicalVolumePath]
コマンドを使用して作成することができます。
次の表は、RAID0 ストライピング論理ボリュームを作成するときに使用できるさまざまなパラメーターを説明しています。
表8.2 RAID0 ストライピング論理ボリュームを作成するためのパラメーター
パラメーター | 説明 |
---|---|
|
|
| 論理ボリュームを分散するデバイスの数を指定します。 |
| 各ストライプのサイズをキロバイト単位で指定します。これは、次のデバイスに移動する前にデバイスに書き込まれるデータの量です。 |
| 使用するボリュームグループを指定します。 |
| 使用するデバイスを指定します。指定しない場合は、LVM により、Stripes オプションに指定されているデバイスの数が、各ストライプに 1 つずつ選択されます。 |
8.7. ソフトデータの破損
データストレージにおけるソフト破損は、ストレージデバイスから取得したデータが、そのデバイスに書き込まれるデータとは異なることを意味します。破損したデータは、ストレージデバイスで無期限に存在する可能性があります。破損したデータは、このデータを取得および使用するまで、検出されない可能性があります。
設定のタイプに応じて、Redundant Array of Independent Disks (RAID) 論理ボリューム (LV) は、デバイスに障害が発生した場合のデータ損失を防ぎます。RAID アレイで構成されているデバイスに障害が発生した場合、その RAID LV の一部である他のデバイスからデータを回復できます。ただし、RAID 設定により、データの一貫性は確保されません。ソフト破損、無兆候破損、ソフトエラー、およびサイレントエラーでは、システム設計やソフトウェアが想定どおりに機能し続けている場合でも、破損するデータを示す用語です。
デバイスマッパー (DM) 整合性は、RAID レベル 1、4、5、6、10 で使用され、ソフト破損によるデータ損失を軽減または防止します。RAID レイヤーでは、データの結合のないコピーが、ソフト破損エラーを修正できるようになります。整合性層は、各 RAID イメージの上にありますが、追加のサブ LV が、各 RAID イメージの整合性メタデータまたはデータチェックサムを格納します。整合性のある RAID LV からデータを取得すると、整合性データのチェックサムが破損のデータを分析します。破損が検出されると、整合性レイヤーはエラーメッセージを返し、RAID 層は、別の RAID イメージからデータの破損していないコピーを取得します。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.8. DM 整合性での RAID LV の作成
デバイスマッパー (DM) 整合性を持つ RAID LV を作成したり、既存の RAID LV に整合性を追加したりすると、ソフト破損によるデータ損失のリスクが軽減されます。LV を使用する前に、整合性の同期と RAID メタデータが完了するのを待ちます。そうしないと、バックグラウンドの初期化が LV のパフォーマンスに影響する可能性があります。
手順
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 で実行可能な操作の数が制限されます。
オプション: 特定の操作を実行する前に整合性を削除します。
# 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.9. 最小/最大 I/O レートオプション
RAID10 論理ボリュームを作成する際に、sync 操作で論理ボリュームを初期化するのに必要なバックグラウンド I/O は、特に RAID 論理ボリュームを多数作成している場合に、他の I/O 操作 (ボリュームグループメタデータへの更新など) を LVM デバイスに押し出す可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。
RAID 論理ボリュームが初期化される速度は、復旧スロットルを実装することで制御できます。sync
操作が実行される速度を制御するには、lvcreate
コマンドの --minrecoveryrate
および --maxrecoveryrate
オプションを使用して、これらの操作の最小および最大 I/O 速度を設定します。
これらのオプションは次のように指定できます。
--maxrecoveryrate Rate[bBsSkKmMgG]
- RAID 論理ボリュームの最大復旧速度を設定し、通常の I/O 操作が押し出されないようにします。Rate は、アレイ内の各デバイスに対する 1 秒あたりの量を指定します。接尾辞を指定しない場合は、kiB/sec/device とみなします。復旧速度を 0 に設定すると無制限になります。
--minrecoveryrate Rate[bBsSkKmMgG]
- RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、同期操作の I/O が最小スループットを達成できるようにします。Rate は、アレイ内の各デバイスに対する 1 秒あたりの量を指定します。接尾辞を指定しない場合は、kiB/sec/device とみなします。
たとえば、lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg
コマンドを使用して、ボリュームグループ my_vg 内に 3 ストライプでサイズ 10G、最大回復速度 128 kiB/sec/device の 2 方向の RAID10 アレイ my_lv を作成します。RAID のスクラブ操作の最小および最大復旧速度を指定することもできます。
8.10. リニアデバイスの RAID 論理ボリュームへの変換
既存のリニア論理ボリュームを RAID 論理ボリュームに変換することができます。この操作を行うには、lvconvert
コマンドの --type
引数を使用します。
RAID 論理ボリュームは、メタデータとデータのサブボリュームのペアで構成されています。リニアデバイスを RAID1 アレイに変換すると、新しいメタデータサブボリュームが作成され、リニアボリュームと同じ物理ボリューム上の元の論理ボリュームと関連付けられます。追加のイメージは、メタデータ/データ サブボリュームのペアに追加されます。複製元の論理ボリュームとペアのメタデータイメージを同じ物理ボリュームに配置できないと、lvconvert
は失敗します。
手順
変換が必要な論理ボリュームデバイスを表示します。
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(0)
リニア論理ボリュームを 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.11. LVM RAID1 論理ボリュームを LVM リニア論理ボリュームに変換
既存の RAID1 LVM 論理ボリュームを LVM リニア論理ボリュームに変換することができます。この操作を行うには、lvconvert
コマンドを使用し、-m0
引数を指定します。これにより、RAID アレイを構成する全 RAID データサブボリュームおよび全 RAID メタデータサブボリュームが削除され、最高レベルの RAID1 イメージがリニア論理ボリュームとして残されます。
手順
既存の 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)
既存の 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.12. ミラーリングされた LVM デバイスの RAID1 論理ボリュームへの変換
セグメントタイプのミラーを持つ既存のミラーリングされた LVM デバイスを RAID1 LVM デバイスに変換できます。この操作を行うには、--type
raid1 引数を指定して、lvconvert
コマンドを使用します。これにより、mimage
という名前のミラーサブボリュームの名前が、rimage
という名前の RAID サブボリュームに変更されます。
さらに、ミラーログも削除し、対応するデータサブボリュームと同じ物理ボリューム上に、データサブボリューム用の rmeta
という名前のメタデータサブボリュームを作成します。
手順
ミラーリングされた論理ボリューム 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)
ミラーリングされた論理ボリューム 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.13. RAID 論理ボリュームのサイズ変更
RAID 論理ボリュームのサイズは、以下の方法で変更できます。
-
いずれのタイプの RAID 論理ボリュームのサイズも、
lvresize
コマンドまたはlvextend
コマンドで増やすことができます。これは、RAID イメージの数を変更するものではありません。ストライプ化 RAID 論理ボリュームでは、ストライプ化 RAID 論理ボリュームの作成時と同じ、ストライプを丸める制約が適用されます。
-
いずれのタイプの RAID 論理ボリュームのサイズも、
lvresize
コマンドまたはlvreduce
コマンドで減らすことができます。これは、RAID イメージの数を変更するものではありません。lvextend
コマンドでは、ストライプ化 RAID 論理ボリュームの作成時と同じストライプを丸める制約が適用されます。
-
lvconvert
コマンドで--stripes N
パラメーターを使用すると、ストライプ化 RAID 論理ボリューム (raid4/5/6/10
) のストライプの数を変更できます。このように、ストライプを追加または削除することで、RAID 論理ボリュームのサイズを増減できます。raid10
ボリュームにはストライプを追加することしかできないため注意してください。この機能は、同じ RAID レベルを維持しながら、RAID 論理ボリュームの属性を変更できる、RAID の 再成形 機能の一部になります。RAID 再成形と、lvconvert
コマンドを使用して RAID 論理ボリュームを再生成する例は、lvmraid
(7) の man ページを参照してください。
8.14. 既存の RAID1 デバイスのイメージ数を変更
LVM ミラーリングの実装でイメージの数を変更できる方法と同様に、既存の RAID1 アレイのイメージの数を変更できます。
lvconvert
コマンドを使用して RAID1 論理ボリュームにイメージを追加すると、次の操作を実行できます。
- 結果として作成されるデバイス用イメージの総数を指定する
- デバイスに追加するイメージの数
- オプションで、新しいメタデータ/データイメージのペアが存在する物理ボリュームを指定する
手順
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 ウェイ 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 にイメージを追加する際に、使用する物理ボリュームを指定することもできます。次のコマンドは、2 方向 RAID1 論理ボリューム my_vg/my_lv を 3 方向 RAID1 論理ボリュームに変換し、物理ボリューム /dev/sdd1 がアレイに使用されるように指定します。
# 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_0
、lv_rimage_1
、およびlv_rimage_2
で構成される 3 方向 RAID1 アレイからlv_rimage_1
を削除すると、lv_rimage_0
とlv_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 イメージを分割できません。
手順
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)
RAID イメージを別の論理ボリュームに分割します。以下の例は、2 方向の RAID1 論理ボリューム my_lv を、my_lv と new の 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 イメージを分割する場合、分割するイメージを指定することはできますが、分割されるボリューム名を変更することはできません。また、作成されたボリュームには以下の制約があります。
- 作成された新規ボリュームは読み取り専用です。
- 新規ボリュームのサイズは変更できません。
- 残りのアレイの名前は変更できません。
- 残りのアレイのサイズは変更できません。
- 新規のボリュームと、残りのアレイを個別にアクティブにすることはできません。
分割されたイメージを結合することができます。イメージをマージすると、イメージが分割されてから変更したアレイの部分のみが再同期されます。
手順
RAID 論理ボリュームを作成します。
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" created
オプション: 作成された 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)
作成した 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
オプション: イメージを分割した後、論理ボリュームを表示します。
# 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 --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 障害ポリシーの設定
LVM RAID は、lvm.conf
ファイルの raid_fault_policy
フィールドで定義されている詳細設定に基づいて、デバイス障害を自動で処理します。
-
raid_fault_policy
フィールドがallocate
に設定されている場合、システムは障害が発生したデバイスをボリュームグループの予備のデバイスに置き換えようとします。予備のデバイスがないと、システムログにレポートが送信されます。 -
raid_fault_policy
フィールドがwarn
に設定されている場合、システムは警告を生成して、デバイスが失敗したことがログに示されます。これにより、ユーザーは実施する一連の動作を確認できます。
残りのデバイスで該当するポリシーに対応できる限り、RAID 論理ボリュームは操作を続行します。
8.17.1. allocateRAID 障害ポリシー
以下の例では、raid_fault_policy
フィールドは lvm.conf
ファイルで allocate
に設定されています。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/sde1(1)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rimage_2] /dev/sdg1(1)
[my_lv_rmeta_0] /dev/sde1(0)
[my_lv_rmeta_1] /dev/sdf1(0)
[my_lv_rmeta_2] /dev/sdg1(0)
/dev/sde
デバイスが失敗すると、システムログはエラーメッセージを表示します。
# grep lvm /var/log/messages
Jan 17 15:57:18 bp-01 lvm[8599]: Device #0 of raid1 array, my_vg-my_lv, has failed.
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
250994294784: Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
250994376704: Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at 0:
Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
4096: Input/output error
Jan 17 15:57:19 bp-01 lvm[8599]: Couldn't find device with uuid
3lugiV-3eSP-AFAR-sdrP-H20O-wM2M-qdMANy.
Jan 17 15:57:27 bp-01 lvm[8599]: raid1 array, my_vg-my_lv, is not in-sync.
Jan 17 15:57:36 bp-01 lvm[8599]: raid1 array, my_vg-my_lv, is now in-sync.
raid_fault_policy
フィールドが allocate
に設定されているため、障害が発生したデバイスは、ボリュームグループの新しいデバイスに置き換わります。
# lvs -a -o name,copy_percent,devices 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/sdf1(1)
[lv_rimage_2] /dev/sdg1(1)
[lv_rmeta_0] /dev/sdh1(0)
[lv_rmeta_1] /dev/sdf1(0)
[lv_rmeta_2] /dev/sdg1(0)
障害が発生したデバイスを交換しても、LVM は、障害が発生したデバイスが見つけられないと示すことに注意してください。これは、障害が発生したデバイスが、RAID 論理ボリュームからは削除されても、ボリュームグループからは削除されていないためです。vgreduce --removemissing VG
を実行すると、障害が発生したデバイスをボリュームグループから削除できます。
raid_fault_policy
を allocate
に設定したにもかかわらず、予備のデバイスがない場合は、割り当てが失敗し、論理ボリュームがそのままの状態になります。割り当てに失敗すると、ドライブが修復され、lvchange
コマンドの --refresh
オプションで、障害が発生したデバイスの復元を開始できます。もしくは、障害が発生したデバイスを交換することもできます。
8.17.2. warnRAID 障害ポリシー
以下の例では、raid_fault_policy
フィールドは、lvm.conf
ファイルで warn
に設定されています。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/sdh1(1)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rimage_2] /dev/sdg1(1)
[my_lv_rmeta_0] /dev/sdh1(0)
[my_lv_rmeta_1] /dev/sdf1(0)
[my_lv_rmeta_2] /dev/sdg1(0)
/dev/sdh
デバイスに障害が発生すると、システムログはエラーメッセージを表示します。ただし、この場合、LVM はイメージの 1 つを置き換えて、RAID デバイスを自動的に修復しようとはしません。したがって、デバイスに障害が発生したら、lvconvert
コマンドの --repair
引数を使用してデバイスを置き換えることができます。
8.18. 論理ボリュームで RAID デバイスの交換
論理ボリュームの RAID デバイスは置き換えることができます。
- RAID デバイスに障害がない場合は、「障害のない RAID デバイスの交換」 を参照してください。
- RAID デバイスに障害が発生した場合は、「論理ボリュームに障害が発生した RAID デバイスの交換」 を参照してください。
8.18.1. 障害のない RAID デバイスの交換
論理ボリュームの RAID デバイスを交換するには、lvconvert
コマンドの --replace
引数を使用します。
前提条件
- RAID デバイスに障害が発生していません。以下のコマンドを使用すると、RAID デバイスが失敗しても動作しません。
手順
RAID デバイスを置き換えます。
# lvconvert --replace dev_to_remove vg/lv possible_replacements
- dev_to_remove を、置き換える物理ボリュームへのパスに置き換えます。
- vg/lv を、RAID アレイのボリュームグループおよび論理ボリューム名に置き換えます。
- possible_replacements を、交換する物理ボリュームへのパスに置き換えます。
例8.3 RAID1 デバイスの置き換え
以下の例では、RAID1 論理ボリュームを作成した後に、そのボリューム内のデバイスを交換しています。
RAID1 アレイを作成します。
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" created
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)
/dev/sdb2
物理ボリュームを置き換えます。# lvconvert --replace /dev/sdb2 my_vg/my_lv
代替の 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)
例8.4 代替の物理ボリュームの指定
以下の例では、RAID1 論理ボリュームを作成した後に、そのボリュームのデバイスを交換し、交換したデバイスに使用する物理ボリュームを指定しています。
RAID1 アレイを作成します。
# lvcreate --type raid1 -m 1 -L 100 -n my_lv my_vg Logical volume "my_lv" created
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/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0)
物理ボリュームを確認します。
# pvs PV VG Fmt Attr PSize PFree /dev/sda1 my_vg lvm2 a-- 1020.00m 916.00m /dev/sdb1 my_vg lvm2 a-- 1020.00m 916.00m /dev/sdc1 my_vg lvm2 a-- 1020.00m 1020.00m /dev/sdd1 my_vg lvm2 a-- 1020.00m 1020.00m
/dev/sdb1
物理ボリュームを/dev/sdd1
に置き換えます。# lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1
代替の 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)
例8.5 複数の RAID デバイスの置き換え
一度に 2 つ以上の RAID デバイスを交換するには、以下の例のように複数の replace
引数を指定します。
RAID1 アレイを作成します。
# lvcreate --type raid1 -m 2 -L 100 -n my_lv my_vg Logical volume "my_lv" created
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/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdc1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdc1(0)
/dev/sdb1
および/dev/sdc1
の物理ボリュームを置き換えます。# lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv
代替の 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)
8.18.2. LVM RAID のデバイスに障害が発生しました。
RAID は従来の LVM ミラーリングとは異なります。LVM ミラーリングでは、障害が発生したデバイスを削除する必要がありました。削除しないと、ミラー化論理ボリュームがハングします。RAID アレイは、障害があるデバイスがあっても稼働し続けることができます。RAID1 以外の RAID タイプでデバイスを削除すると、レベルが低い RAID に変換されます (たとえば、RAID6 から RAID5、もしくは RAID4 または RAID5 から RAID0)。
そのため、障害のあるデバイスを無条件に削除してから交換するのではなく、lvconvert
コマンドで --repair
引数を使用して、RAID ボリュームのデバイスを 1 回で置き換えることができます。
8.18.3. 論理ボリュームの障害が発生した RAID デバイスの交換
LVM RAID デバイス障害が一時的な障害であったり、障害が発生したデバイスの修復が可能な場合は、障害が発生したデバイスの復旧を開始できます。
前提条件
- 以前に不具合を起こしたデバイスが機能するようになりました。
手順
RAID デバイスが含まれる論理ボリュームを更新します。
# lvchange --refresh my_vg/my_lv
検証手順
復元されたデバイスで論理ボリュームを調べます。
# lvs --all --options name,devices,lv_attr,lv_health_status my_vg
8.18.4. 論理ボリュームに障害が発生した RAID デバイスの交換
この手順では、LVM RAID 論理ボリュームで物理ボリュームとして機能する障害のあるデバイスを置き換えます。
前提条件
ボリュームグループには、障害が発生したデバイスを置き換えるのに十分な空き容量を提供する物理ボリュームが含まれています。
ボリュームグループに十分な空きエクステントがある物理ボリュームがない場合は、
vgextend
ユーティリティーを使用して、十分なサイズの物理ボリュームを新たに追加します。
手順
以下の例では、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)
/dev/sdc
デバイスに障害が発生した場合、lvs
コマンドの出力は以下のようになります。# 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)
障害が発生したデバイスを交換して、論理ボリュームを表示します。
# 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.
(必要に応じて) 障害が発生したデバイスを交換する物理ボリュームを手動で指定するには、コマンドの最後に物理ボリュームを追加します。
# lvconvert --repair my_vg/my_lv replacement_pv
代替の論理ボリュームを調べます。
# 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 ユーティリティーは、障害が発生したデバイスが見つけられないことを示しています。
障害が発生したデバイスをボリュームグループから削除します。
# vgreduce --removemissing VG
8.19. RAID 論理ボリュームでのデータ整合性の確認 (RAID スクラビング)
LVM は、RAID 論理ボリュームのスクラビングに対応します。RAID スクラビングは、アレイ内のデータおよびパリティーブロックをすべて読み込み、それが一貫しているかどうかを確認するプロセスです。
手順
オプション: スクラビングプロセスが使用する I/O 帯域幅を制限します。
RAID スクラビング操作を実行する際に、
sync
操作で必要になるバックグラウンド I/O は、その他の I/O (ボリュームグループメタデータへの更新など) を LVM デバイスに押し出す可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。リカバリースロットルを実装してスクラビング操作のレートを制御できます。次の手順で、
lvchange --syncaction
コマンドに以下のオプションを追加します。--maxrecoveryrate Rate[bBsSkKmMgG]
- 操作が通常の I/O 操作に押し出すように、最大復旧速度を設定します。復旧速度を 0 に設定すると、操作がバインド解除されることを意味します。
--minrecoveryrate Rate[bBsSkKmMgG]
-
最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、
sync
操作の I/O が最小スループットを達成できるようにします。
Rate 値は、アレイ内の各デバイスに対する 1 秒あたりのデータ通信量を指定します。接尾辞を指定しないと、オプションはデバイスごとの 1 秒あたらりの kiB を想定します。
アレイ内の不一致数を修復せずに、アレイ内の不一致の数を表示します。
# lvchange --syncaction check vg/raid_lv
アレイ内の不一致を修正します。
# lvchange --syncaction repair vg/raid_lv
注記lvchange --syncaction repair
操作は、lvconvert --repair
操作と同じ機能を実行しません。-
lvchange --syncaction repair
操作は、アレイでバックグラウンドの同期操作を開始します。 -
lvconvert --repair
操作は、ミラーまたは RAID 論理ボリュームの障害が発生したデバイスを修復するか、または置き換えます。
-
オプション: スクラビング操作に関する情報を表示します。
# lvs -o +raid_sync_action,raid_mismatch_count vg/lv
raid_sync_action
フィールドは、RAID ボリュームが現在実行している同期操作を表示します。これには、以下のいずれかの値を使用できます。idle
- すべての同期操作が完了している (何も実行していません)。
resync
- アレイを初期化、またはマシン障害後の復旧を実行する。
recover
- アレイ内のデバイスを置き換える。
check
- アレイの不一致を検索する。
repair
- 不一致を検索し、修復する。
-
raid_mismatch_count
フィールドは、check
操作時に検出された不一致の数を表示します。 -
Cpy%Sync
フィールドは、sync
操作の進捗を表示します。 lv_attr
フィールドは、追加のインジケーターを提供します。このフィールドのビット 9 は、論理ボリュームの正常性を示し、以下のインジケーターに対応しています。-
(
m
) (不一致) は、RAID 論理ボリュームに不一致があることを示します。この文字は、スクラビング操作で RAID に一貫性がない部分があることを検出した後に表示されます。 -
(
r
) (更新) は、LVM がデバイスラベルを読み取り、デバイスを稼働できると認識した場合でも、RAID アレイのデバイスに障害が発生し、カーネルがこれを障害と認識していることを示します。デバイスが利用可能になったことをカーネルに通知するように論理ボリュームを更新するか、デバイスに障害が発生したと思われる場合はデバイスを交換します。
-
(
関連情報
-
詳細は、
lvchange(8)
およびlvmraid(7)
の man ページを参照してください。
8.20. RAID レベルの変更 (RAID テイクオーバー)
LVM は、Raid テイクオーバー をサポートします。これは、RAID 論理ボリュームの RAID レベルを別のレベル (たとえば RAID 5 から RAID 6) へ変えることを意味します。RAID レベルの変更は、通常、デバイスの耐障害性を増減したり、論理ボリュームのストライプ化をやり直すために行われます。RAID テイクオーバーには lvconvert
を使用します。RAID テイクオーバーの詳細と、lvconvert
を使用して RAID 論理ボリュームを変換する例は、man ページの lvmraid
(7) を参照してください。
8.21. RAID ボリュームの属性の変更 (RAID 再成形)
RAID 再成形 とは、同じ RAID レベルを維持しつつ、RAID 論理ボリュームの属性を変更することを指します。変更できる属性には、RAID レイアウト、ストライプのサイズ、ストライプの数などがあります。RAID 再成形と、lvconvert
コマンドを使用して RAID 論理ボリュームを再生成する例は、lvmraid
(7) の man ページを参照してください。
8.22. RAID1 論理ボリュームでの I/O 操作の制御
lvchange
コマンドの --writemostly
パラメーターおよび --writebehind
パラメーターを使用して、RAID1 論理ボリュームのデバイスに対する I/O 操作を制御できます。これらのパラメーターを使用する書式は以下のとおりです。
--[raid]writemostly PhysicalVolume[:{t|y|n}]
RAID1 論理ボリュームのデバイスを
write-mostly
とマークします。これらのドライブのすべての読み取りは、必要でない限り回避されます。このパラメーターを設定することにより、ドライブに対する I/O 操作の回数を最小限に抑えることができます。デフォルトでは、論理ボリュームに指定した物理ボリュームのwrite-mostly
属性を yes に設定します。:n
を物理ボリュームに追加してwrite-mostly
フラグを削除したり、:t
を指定して値を切り替えたりできます。--writemostly
引数は、1 つのコマンドで複数回指定できるため、1 回で論理ボリュームのすべての物理ボリュームで、write-mostly 属性を切り替えることができます。--[raid]writebehind IOCount
write-mostly
というマークが付いている RAID1 論理ボリュームのデバイスに許可される、未処理の書き込みの最大数を指定します。この値を上回ると書き込みは同期され、設定要素になっているデバイスへの書き込みがすべて、アレイが書き込みの完了を知らせる前に完了してしまいます。この値をゼロに設定すると、設定はクリアになり、システムが値を任意に選択できるようになります。
8.23. RAID 論理ボリュームのリージョンサイズの変更
RAID 論理ボリュームを作成すると、論理ボリュームのリージョンサイズは、/etc/lvm/lvm.conf
ファイルの raid_region_size
パラメーターの値になります。このデフォルト値は、lvcreate
コマンドの -R
オプションで上書きできます。
RAID 論理ボリュームを作成したら、lvconvert
コマンドの -R
オプションで、ボリュームのリージョンサイズを変更できます。以下の例では、論理ボリューム vg/raidlv
のリージョンサイズを 4096K に変更します。リージョンサイズを変更する場合は、RAID ボリュームを同期する必要があります。
#lvconvert -R 4096K vg/raid1
Do you really want to change the region_size 512.00 KiB of LV vg/raid1 to 4.00 MiB? [y/n]:y
Changed region size on RAID LV vg/raid1 to 4.00 MiB.
第9章 論理ボリュームのスナップショット
LVM スナップショット機能を使用すると、サービスを中断することなく、ある時点でのボリュームの仮想イメージ (/dev/sda など) を作成できます。
9.1. スナップショットボリュームの概要
スナップショットを作成した後で元のボリューム (スナップショットの元になるボリューム) を変更すると、スナップショット機能は、ボリュームの状態を再構築できるように、変更前の変更されたデータ領域のコピーを作成します。スナップショットを作成しても、作成元への完全な読み取り/書き込みのアクセスは引き続き可能です。
スナップショットは、スナップショットの作成後に変更したデータ部分のみをコピーするため、スナップショット機能に必要なストレージは最小限になります。たとえば、コピー元がほとんど更新されない場合は、作成元の 3 ~ 5 % の容量があれば十分にスナップショットを維持できます。バックアップ手順に代わるものではありません。スナップショットコピーは仮想コピーであり、実際のメディアバックアップではありません。
作成元のボリュームへの変更を保管するために確保する領域は、スナップショットのサイズによって異なります。たとえば、スナップショットを作成してから作成元を完全に上書きする場合に、その変更の保管に必要なスナップショットのサイズは、作成元のボリュームと同等か、それ以上になります。スナップショットのサイズは定期的に監視する必要があります。たとえば、/usr
など、その大部分が読み取り用に使用されるボリュームの短期的なスナップショットに必要な領域は、/home
のように大量の書き込みが行われるボリュームの長期的なスナップショットに必要な領域よりも小さくなります。
スナップショットが満杯になると、作成元のボリュームの変更を追跡できなくなるため、そのスナップショットは無効になります。ただし、スナップショットが無効になるのを防ぐために、使用量が snapshot_autoextend_threshold
値を超えるたびにスナップショットを自動的に拡張するように LVM を設定できます。スナップショットは完全にサイズ変更可能で、次の操作を実行できます。
- ストレージ容量に余裕がある場合は、スナップショットボリュームのサイズを大きくして、削除されないようにすることができます。
- スナップショットのボリュームサイズが必要以上に大きければ、そのボリュームのサイズを縮小して、他の論理ボリュームで必要となる領域を確保できます。
スナップショットボリュームには、次の利点があります。
- 最も一般的な用途は、継続的にデータを更新している稼動中のシステムを停止せずに、論理ボリューム上でバックアップを実行する必要がある場合にスナップショットを撮ることです。
-
スナップショットファイルシステムで
fsck
コマンドを実行し、ファイルシステムの整合性をチェックすれば、複製元のファイルシステムを修復する必要があるかどうかを判断できます。 - スナップショットは読み取りおよび書き込み用であるため、スナップショットを撮ってそのスナップショットにテストを実行することにより、実際のデータに触れることなく、実稼働データにアプリケーションのテストを実行できます。
- LVM ボリュームを作成して、Red Hat の仮想化と併用することが可能です。LVM スナップショットを使用して、仮想ゲストイメージのスナップショットを作成できます。このスナップショットは、最小限のストレージを使用して、既存のゲストの変更や新規ゲストの作成を行う上で利便性の高い方法を提供します。
9.2. 元のボリュームのスナップショット作成
lvcreate
コマンドを使用して、元のボリューム (作成元) のスナップショットを作成します。ボリュームのスナップショットは書き込み可能です。デフォルトでは、シンプロビジョニングされたスナップショットと比較すると、通常のアクティベーションコマンドを実行中に、作成元のボリュームを使用して、スナップショットのボリュームを有効にします。LVM は、元のボリュームのサイズとボリュームに必要なメタデータサイズの合計よりも大きいスナップショットボリュームの作成をサポートしていません。これより大きいスナップショットボリュームを指定すると、LVM は作成元のサイズに必要なスナップショットボリュームを作成します。
クラスター内のノードは LVM スナップショットをサポートしていません。共有ボリュームグループ内にスナップショットボリュームは作成できません。ただし、共有論理ボリューム上でデータの一貫したバックアップ作成が必要な場合は、ボリュームを排他的にアクティブにした上で、スナップショットを作成できます。
次の手順は、origin という名前の論理ボリュームを作成し、その論理ボリュームから、snap という名前のスナップショットボリュームを作成します。
前提条件
- ボリュームグループ vg001 を作成している。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
ボリュームグループ vg001 から、論理ボリューム origin を作成します。
# lvcreate -L 1G -n origin vg001 Logical volume "origin" created.
名前が snap で、サイズが 100 MB のスナップショット論理ボリューム /dev/vg001/origin を作成します。
# lvcreate --size 100M --name snap --snapshot /dev/vg001/origin Logical volume "snap" created.
--size
の代わりに-L
引数を、--name
の代わりに-n
を、そして--snapshot
の代わりに-s
を使用して、スナップショットを作成することもできます。元の論理ボリュームにファイルシステムが含まれている場合は、任意のディレクトリー上でスナップショット論理ボリュームをマウントしてそのファイルシステムのコンテンツにアクセスし、元のファイルシステムが更新を継続している間にバックアップを実行できます。
元のボリュームと、使用されているスナップショットボリュームの現在の割合を表示します。
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices origin vg001 owi-a-s--- 1.00g /dev/sde1(0) snap vg001 swi-a-s--- 100.00m origin 0.00 /dev/sde1(256)
lvdisplay /dev/vg001/origin
コマンドを使用して、論理ボリューム /dev/vg001/origin のステータスと、すべてのスナップショット論理ボリュームおよびそれらのステータス (アクティブまたは非アクティブなど) を表示することもできます。警告複製元ボリュームが変更されると、スナップショットのサイズが拡大されるため、
lvs
コマンドを使用して、スナップショットボリュームのパーセンテージを定期的に監視して、満杯にならないように確認することが重要です。スナップショットは、100% になると完全に消失します。これは、作成元ボリュームの変更されていない部分に書き込みが行われるため、スナップショットが必ず破損するためです。ただし、使用量が 100% の場合にスナップショットが無効になるのを回避するために、使用量が
snapshot_autoextend_threshold
値を超えるたびにスナップショットを自動的に拡張するように LVM を設定できます。/etc/lvm.conf
ファイルからsnapshot_autoextend_threshold
andsnapshot_autoextend_percent
オプションの既存の値を表示し、要件に従ってそれらを編集します。次の例では、
snapshot_autoextend_threshold
オプションを 100 未満の値に設定し、snapshot_autoextend_percent
オプションをスナップショットボリュームを拡張するための要件に応じた値に設定します。# vi /etc/lvm.conf snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20
次のコマンドを実行して、このスナップショットを手動で拡張することもできます。
# lvextend -L+100M /dev/vg001/snap
注記この機能には、ボリュームグループに未割り当てのスペースが必要です。同様に、スナップショットの自動拡張を実行しても、スナップショットに必要なサイズとして計算される最大サイズを超えて拡張されることはありません。スナップショットのサイズが複製元のボリュームを包含できるまで拡大されると、スナップショットの自動拡張はモニターされなくなります。
関連情報
-
lvcreate (8)
、lvextend (8)
、およびlvs (8)
の man ページ -
/etc/lvm/lvm.conf
ファイル
9.3. スナップショットと元のボリュームのマージ
--merge
オプションを指定して lvconvert
コマンドを使用し、スナップショットを元のボリューム (作成元) にマージします。データやファイルを失った場合や、システムを以前の状態に復元する必要がある場合に、システムのロールバックを実行できます。スナップショットボリュームをマージすると、作成された論理ボリュームには、元のボリュームの名前、マイナー番号、および UUID が含まれます。マージの進行中、作成元に対する読み取りまたは書き込みは、マージ中のスナップショットに対して実行されているかのように見えます。マージが完了すると、マージされたスナップショットは削除されます。
作成元のボリュームとスナップショットボリュームの両方が起動されておらず、アクティブでない場合、マージはすぐに開始されます。それ以外の場合は、作成元またはスナップショットのいずれかがアクティブ化され、両方が閉じられた後にマージが開始されます。スナップショットを閉じることができない作成元 (root
ファイルシステムなど) にマージできるのは、作成元のボリュームがアクティブ化された後です。
手順
スナップショットボリュームをマージします。以下のコマンドは、スナップショットボリューム vg001/snap をその 作成元 にマージします。
# lvconvert --merge vg001/snap Merging of volume vg001/snap started. vg001/origin: Merged: 100.00%
元のボリュームを表示します。
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices origin vg001 owi-a-s--- 1.00g /dev/sde1(0)
関連情報
-
lvconvert(8)
の man ページ
第10章 シンプロビジョニングされたボリューム (シンボリューム) の作成および管理
Red Hat Enterprise Linux は、シンプロビジョニングされたスナップショットボリュームと論理ボリュームをサポートします。
論理ボリュームとスナップショットボリュームは、シンプロビジョニングできます。
- シンプロビジョニングされた論理ボリュームを使用すると、利用可能な物理ストレージよりも大きな論理ボリュームを作成できます。
- シンプロビジョニングされたスナップショットボリュームを使用すると、同じデータボリュームにより多くの仮想デバイスを格納できます。
10.1. シンプロビジョニングの概要
最新のストレージスタックの多くは、シックプロビジョニングとシンプロビジョニングのどちらかを選択できるようになりました。
- シックプロビジョニングは、ブロックストレージの従来の動作を実行でき、実際の使用状況に関係なくブロックが割り当てられます。
- シンプロビジョニングは、ブロックストレージのプールよりも大きいサイズ (データを保存する物理デバイスよりもサイズが大きくなる可能性のあるブロックストレージ) をプロビジョニングできるので、過剰にプロビジョニングされる可能性があります。個々のブロックは実際に使用されるまで割り当てられないため、オーバープロビジョニングが発生する可能性があります。同じプールを共有する複数のシンプロビジョニングされたデバイスがある場合に、これらのデバイスは過剰にプロビジョニングされる可能性があります。
シンプロビジョニングを使用すると、物理ストレージをオーバーコミットでき、代わりにシンプールと呼ばれる空き領域のプールを管理できます。アプリケーションで必要な場合は、このシンプールを任意の数のデバイスに割り当てることができます。シンプールは、ストレージ領域をコスト効率よく割り当てる必要がある場合に、動的に拡張できます。
たとえば、10 人のユーザーから、各自のアプリケーションに使用するファイルシステムをそれぞれ 100GB 要求された場合には、各ユーザーに 100GB のファイルシステムを作成します (ただし、実際には 100GB 未満のストレージが、必要に応じて使用されます)。
シンプロビジョニングを使用する場合は、ストレージプールを監視して、使用可能な物理スペースが不足したときに容量を追加することが重要です。
以下は、シンプロビジョニングされたデバイスを使用する利点です。
- 使用可能な物理ストレージよりも大きい論理ボリュームを作成できます。
- 同じデータボリュームに保存する仮想デバイスを増やすことができます。
- データ要件をサポートするために論理的かつ自動的に拡張できるファイルシステムを作成できます。未使用のブロックはプールに戻され、プール内の任意のファイルシステムで使用できます。
シンプロビジョニングされたデバイスを使用する場合に発生する可能性のある欠点は次のとおりです。
- シンプロビジョニングされたボリュームには、使用可能な物理ストレージが不足するという固有のリスクがあります。基盤となるストレージを過剰にプロビジョニングした場合に、使用可能な物理ストレージが不足しているために停止する可能性があります。たとえば、バッキング用に 1T の物理ストレージのみを使用して、10T のシンプロビジョニングストレージを作成する場合に、この 1T が使い果たされると、ボリュームは使用不可または書き込み不能になります。
-
ボリュームが、シンプロビジョニングデバイスの後の階層に破棄するように送信していない場合には、使用量の計算が正確でなくなります。たとえば、
-o discard mount
オプションを指定せずにファイルシステムを配置し、シンプロビジョニングされたデバイス上でfstrim
を定期的に実行しないと、以前に使用されたストレージの割り当てが解除されることはありません。このような場合に、実際に使用していなくても、時間の経過とともにプロビジョニングされた量をすべて使用することになります。 - 使用可能な物理スペースが不足しないように、論理的および物理的な使用状況を監視する必要があります。
- スナップショットのあるファイルシステムでは、コピーオンライト (CoW) 操作が遅くなる可能性があります。
- データブロックは複数のファイルシステム間で混在する可能性があり、エンドユーザーにそのように表示されない場合でも、基盤となるストレージのランダムアクセス制限につながります。
10.2. シンプロビジョニングされた論理ボリュームの作成
シンプロビジョニングされた論理ボリュームを使用すると、利用可能な物理ストレージよりも大きな論理ボリュームを作成できます。シンプロビジョニングされたボリュームセットを作成すると、システムは要求されるストレージの全量を割り当てる代わりに、実際に使用する容量を割り当てることができます。
lvcreate
コマンドに -T
(または --thin
) オプションを付けて、シンプールまたはシンボリュームを作成できます。また、lvcreate
の -T
オプションを使用して、1 つのコマンドで同時にシンプールとシンプロビジョニングされたボリュームの両方を作成することもできます。この手順では、シンプロビジョニングされた論理ボリュームを作成および拡張する方法について説明します。
前提条件
- ボリュームグループを作成している。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
シンプールを作成します。
# lvcreate -L 100M -T vg001/mythinpool Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.
物理領域のプールを作成しているため、プールのサイズを指定する必要があります。
lvcreate
コマンドの-T
オプションでは引数を使用できません。コマンドで指定する他のオプションをもとに、作成するデバイスのタイプを決定します。次の例に示すように、追加のパラメーターを使用してシンプールを作成することもできます。また、
lvcreate
コマンドの ----thinpool
パラメーターを指定して、シンプールを作成することもできます。-T
オプションとは異なり、-thinpool
パラメーターでは、作成するシンプール論理ボリュームの名前を指定する必要があります。次の例では、-thinpool
パラメーターを使用して、サイズが 100M のボリュームグループ vg001 に mythinpool という名前のシンプールを作成します。# lvcreate -L 100M --thinpool mythinpool vg001 Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.
プールの作成ではストライピングがサポートされているため、
-i
および-I
オプションを使用してストライプを作成できます。次のコマンドは、ボリュームグループ vg001 に、thinpool という名前の 2 つの 64 KB ストライプと 256 KB のチャンクサイズを持つ 100 M シンプールを作成します。また、vg001/thinvolume という名前でサイズが 1T のシンボリュームを作成します。注記ボリュームグループに十分な空き領域がある 2 つの物理ボリュームがあることを確認してください。そうでない場合にはシンプールを作成できません。
# lvcreate -i 2 -I 64 -c 256 -L 100M -T vg001/thinpool -V 1T --name thinvolume
シンボリュームを作成します。
# lvcreate -V 1G -T vg001/mythinpool -n thinvolume WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (100.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume "thinvolume" created.
このような場合には、ボリュームを含むプールのサイズよりも大きい、ボリュームの仮想サイズを指定しています。次の例に示すように、追加のパラメーターを使用してシンボリュームを作成することもできます。
シンボリュームとシンプールの両方を作成するには、
lvcreate
コマンドの-T
オプションを使用して、サイズと仮想サイズの両方の引数を指定します。# lvcreate -L 100M -T vg001/mythinpool -V 1G -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (100.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume "thinvolume" created.
残りの空き領域を使用してシンボリュームとシンプールを作成するには、
100%FREE
オプションを使用します。# lvcreate -V 1G -l 100%FREE -T vg001/mythinpool -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data. Logical volume "thinvolume" created.
既存の論理ボリュームをシンプールボリュームに変換するには、
lvconvert
コマンドの--thinpool
パラメーターを使用します。また、-poolmetadata
パラメーターを--thinpool
パラメーターと組み合わせて使用して、既存の論理ボリュームをシンプールボリュームのメタデータボリュームに変換する必要があります。以下の例は、ボリュームグループ vg001 の既存の論理ボリューム lv1 を、シンプールボリュームに変換します。また、ボリュームグループ vg001 の既存の論理ボリューム lv2 を、そのシンプールボリュームのメタデータボリュームに変換します。
# lvconvert --thinpool vg001/lv1 --poolmetadata vg001/lv2 Converted vg001/lv1 to thin pool.
注記論理ボリュームをシンプールボリュームまたはシンプールメタデータボリュームに変換すると、論理ボリュームのコンテンツが破棄されます。
lvconvert
はデバイスのコンテンツを保存するのではなく、コンテンツを上書きするためです。デフォルトでは、
lvcreate
コマンドは、次の式を使用してシンプールメタデータ論理ボリュームのおおよそのサイズを設定します。Pool_LV_size / Pool_LV_chunk_size * 64
スナップショットが大量にある場合や、シンプールのサイズが小さく、後で急激に大きくなることが予測される場合は、
lvcreate
コマンドの--poolmetadatasize
パラメーターで、シンプールのメタデータボリュームのデフォルト値を大きくしないといけない場合があります。シンプールのメタデータ論理ボリュームで対応している値は 2MiB ~ 16GiB です。次の例は、シンプールのメタデータボリュームのデフォルト値を増やす方法を示しています。
# lvcreate -V 1G -l 100%FREE -T vg001/mythinpool --poolmetadatasize 16M -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "thinvolume" created.
作成されたシンプールとシンボリュームを表示します。
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices [lvol0_pmspare] vg001 ewi------- 4.00m /dev/sda(0) mythinpool vg001 twi-aotz-- 100.00m 0.00 10.94 mythinpool_tdata(0) [mythinpool_tdata] vg001 Twi-ao---- 100.00m /dev/sda(1) [mythinpool_tmeta] vg001 ewi-ao---- 4.00m /dev/sda(26) thinvolume vg001 Vwi-a-tz-- 1.00g mythinpool 0.00
オプション:
lvextend
コマンドを使用して、シンプールのサイズを拡張します。ただし、シンプールのサイズを縮小することはできません。注記シンプールとシンボリュームの作成中に
-l100%FREE
引数を使用すると、このコマンドは失敗します。以下のコマンドは、既存のシンプールのサイズ (100M) を変更し、さらに 100M 分を拡張します。
# lvextend -L+100M vg001/mythinpool Size of logical volume vg001/mythinpool_tdata changed from 100.00 MiB (25 extents) to 200.00 MiB (50 extents). WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (200.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume vg001/mythinpool successfully resized
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices [lvol0_pmspare] vg001 ewi------- 4.00m /dev/sda(0) mythinpool vg001 twi-aotz-- 200.00m 0.00 10.94 mythinpool_tdata(0) [mythinpool_tdata] vg001 Twi-ao---- 200.00m /dev/sda(1) [mythinpool_tdata] vg001 Twi-ao---- 200.00m /dev/sda(27) [mythinpool_tmeta] vg001 ewi-ao---- 4.00m /dev/sda(26) thinvolume vg001 Vwi-a-tz-- 1.00g mythinpool 0.00
オプション: シンプールとシンボリュームの名前を変更するには、次のコマンドを使用します。
# lvrename vg001/mythinpool vg001/mythinpool1 Renamed "mythinpool" to "mythinpool1" in volume group "vg001" # lvrename vg001/thinvolume vg001/thinvolume1 Renamed "thinvolume" to "thinvolume1" in volume group "vg001"
名前を変更した後に、シンプールとシンボリュームを表示します。
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mythinpool1 vg001 twi-a-tz 100.00m 0.00 thinvolume1 vg001 Vwi-a-tz 1.00g mythinpool1 0.00
オプション: シンプールを削除するには、次のコマンドを使用します。
# lvremove -f vg001/mythinpool1 Logical volume "thinvolume1" successfully removed. Logical volume "mythinpool1" successfully removed.
関連情報
-
lvcreate (8)
、lvrename (8)
、lvs (8)
、およびlvconvert (8)
の man ページ
10.3. チャンクサイズの概要
チャンクは、スナップショットストレージ専用の物理ディスクの最大単位です。
チャンクサイズを使用するには、以下の基準を使用します。
- チャンクサイズが小さいほどメタデータが増え、パフォーマンスも低下しますが、スナップショットで領域の使用率が向上します。
- チャンクサイズが大きいほどメタデータ操作は少なくなりますが、スナップショットの領域効率が低下します。
デフォルトでは、lvm2
は 64 KiB のチャンクサイズから開始し、そのチャンクサイズに対して適切なメタデータサイズを推定します。lvm2
が作成および使用できるメタデータの最小サイズは 2 MiB です。メタデータのサイズを 128 MiB より大きくする必要がある場合、lvm2 はチャンクサイズを増やすため、メタデータのサイズはコンパクトなまま保たれます。しかし、これによりチャンクサイズの値が大きくなり、スナップショットの使用におけるスペース効率が低下する可能性があります。このような場合、チャンクサイズを小さくし、メタデータサイズを大きくすることを推奨します。
要件に従ってチャンクサイズを指定するには、-c
または --chunksize
パラメーターを使用して、lvm2
の推定チャンクサイズを無効にします。シンプールの作成後はチャンクサイズを変更できないことに注意してください。
ボリュームデータサイズが TiB の範囲にある場合は、サポートされる最大サイズである約 15.8 GiB をメタデータサイズとして使用し、要件に従ってチャンクサイズを設定します。ただし、ボリュームのデータサイズを拡張し、チャンクサイズを小さくする必要がある場合には、メタデータサイズを拡大できないことに注意してください。
不適切なチャンクサイズとメタデータサイズの組み合わせを使用すると、ユーザーが metadata
スペースを使い果たしたり、アドレス指定可能な最大シンプールデータサイズが制限されているためにシンプールサイズをそれ以上拡張できなくなったりして、問題が発生する可能性があります。
関連情報
-
lvmthin (7)
man ページ
10.4. シンプロビジョニングのスナップショットボリューム
Red Hat Enterprise Linux は、シンプロビジョニングされたスナップショットボリュームをサポートします。シン論理ボリュームのスナップショットにより、シン論理ボリューム (LV) を作成することもできます。シンプロビジョニングのスナップショットボリュームには、他のシンボリュームと同じ特性があります。ボリュームのアクティブ化、拡張、名前変更、削除、さらにはスナップショット作成も個別に行うことができます。
すべてのシンボリュームや、LVM スナップショットボリュームと同様に、シンプロビジョニングのスナップショットボリュームは、クラスターのノード間では対応していません。スナップショットボリュームは、1 つのクラスターノードで排他的にアクティブにする必要があります。
従来のスナップショットでは、作成されたスナップショットごとに新しい領域を割り当てる必要があります。この領域では、作成元に変更が加えられてもデータが保持されます。ただし、シンプロビジョニングスナップショットは、作成元と同じ領域を共有します。シン LV のスナップショットは、シン LV とそのスナップショットのいずれかに共通のデータブロックが共有されるので効率的です。シン LV のスナップショットを作成することも、他のシンスナップショットから作成することもできます。再帰スナップショットに共通のブロックもシンプールで共有されます。
シンプロビジョニングのスナップショットボリュームの利点は以下のとおりです。
- オリジンのスナップショットの数を増やしても、パフォーマンスへの影響はほとんどありません。
- シンスナップショットボリュームは、新しいデータのみが書き込まれ、各スナップショットにコピーされないため、ディスク使用量を減らすことができます。
- 従来のスナップショットの要件でしたが、シンスナップショットボリュームを作成元と同時にアクティブにする必要はありません。
- スナップショットからオリジンを復元する場合、シンスナップショットをマージする必要はありません。オリジンを削除して、代わりにスナップショットを使用できます。従来のスナップショットには、コピーバックする必要がある変更を保存する別のボリュームがあります。つまり、元のスナップショットにマージしてリセットする必要があります。
- 従来のスナップショットと比較して、許可されるスナップショットの上限数がはるかに増えています。
シンプロビジョニングのスナップショットボリュームを使用する利点は数多くありますが、従来の LVM スナップショットボリューム機能の方がニーズに適している場合もあります。すべてのタイプのボリュームで従来のスナップショットを使用できます。ただし、シンスナップショットを使用するには、シンプロビジョニングを使用する必要があります。
シンプロビジョニングのスナップショットボリュームのサイズを制限することはできません。スナップショットは、必要な場合はシンプール内の全領域を使用します。一般的には、使用するスナップショットの形式を決定する際に、使用しているサイトの特定要件を考慮するようにしてください。
デフォルトで、シンスナップショットボリュームは、通常のアクティブ化コマンドの実行時に省略されます。
10.5. シンプロビジョニングのスナップショットボリュームの作成
シンプロビジョニングされたスナップショットボリュームを使用すると、同じデータボリュームにより多くの仮想デバイスを格納できます。
シンプロビジョニングのスナップショットボリュームを作成する場合、ボリュームのサイズは指定しません。サイズパラメーターを指定すると、作成されるスナップショットはシンプロビジョニングのスナップショットボリュームにはならず、データを保管するためにシンプールを使用することもありません。たとえば、lvcreate -s vg/thinvolume -L10M
コマンドは、作成元ボリュームがシンボリュームであっても、シンプロビジョニングのスナップショットを作成しません。
シンプロビジョニングのスナップショットは、シンプロビジョニングされた作成元ボリューム用に作成するか、またはシンプロビジョニングされていない作成元ボリューム用にも作成できます。次の手順では、シンプロビジョニングされたスナップショットボリュームを作成するさまざまな方法について説明します。
前提条件
- シンプロビジョニングされた論理ボリュームを作成ている。詳細は、シンプロビジョニングの概要 を参照してください。
手順
シンプロビジョニングされたスナップショットボリュームを作成します。以下のコマンドは、シンプロビジョニングされた論理ボリューム vg001/thinvolume で、シンプロビジョニングのスナップショットボリューム (名前: mysnapshot1) を作成します。
# lvcreate -s --name mysnapshot1 vg001/thinvolume Logical volume "mysnapshot1" created
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mysnapshot1 vg001 Vwi-a-tz 1.00g mythinpool thinvolume 0.00 mythinpool vg001 twi-a-tz 100.00m 0.00 thinvolume vg001 Vwi-a-tz 1.00g mythinpool 0.00
注記シンプロビジョニングを使用する場合は、ストレージ管理者がストレージプールを監視し、容量が満杯になり始めたら容量を追加することが重要です。シンボリュームのサイズを拡張する方法は、シンプロビジョニングされた論理ボリュームの作成 を参照してください。
シンプロビジョニングされていない論理ボリュームの、シンプロビジョニングされたスナップショットを作成することもできます。シンプロビジョニングされていない論理ボリュームはシンプール内に含まれていないため、外部の複製元と呼ばれます。外部の作成元ボリュームは、複数の異なるシンプールからであっても、多くのシンプロビジョニングのスナップショットボリュームで使用でき、共有できます。外部の作成元は、シンプロビジョニングのスナップショットが作成される際に非アクティブであり、かつ読み取り専用である必要があります。
次の例では、origin_volume という名前の読み取り専用の非アクティブな論理ボリュームのシンスナップショットボリュームを作成します。このシンプロビジョニングのスナップショットボリュームの名前は mythinsnap です。論理ボリューム origin_volume は、既存のシンプール vg001/pool を使用する、ボリュームグループ vg001 内のシンプロビジョニングのスナップショットボリューム mythinsnap に対する外部の作成元になります。作成元のボリュームは、スナップショットボリュームと同じボリュームグループに属している必要があります。作成元の論理ボリュームを指定するときは、ボリュームグループを指定しないでください。
# lvcreate -s --thinpool vg001/pool origin_volume --name mythinsnap
以下のコマンドを実行して、最初のスナップショットボリュームの 2 番目のシンプロビジョニングのスナップショットボリュームを作成できます。
# lvcreate -s vg001/mysnapshot1 --name mysnapshot2 Logical volume "mysnapshot2" created.
3 番目のシンプロビジョニングされたスナップショットボリュームを作成するには、次のコマンドを使用します。
# lvcreate -s vg001/mysnapshot2 --name mysnapshot3 Logical volume "mysnapshot3" created.
検証
シンスナップショット論理ボリュームのすべての祖先と子孫のリストを表示します。
$ lvs -o name,lv_ancestors,lv_descendants vg001 LV Ancestors Descendants mysnapshot2 mysnapshot1,thinvolume mysnapshot3 mysnapshot1 thinvolume mysnapshot2,mysnapshot3 mysnapshot3 mysnapshot2,mysnapshot1,thinvolume mythinpool thinvolume mysnapshot1,mysnapshot2,mysnapshot3
ここでは、以下のようになります。
- thinvolume は、ボリュームグループ vg001 で元となるボリュームです。
- mysnapshot1 は thinvolume のスナップショットです。
- mysnapshot2 は mysnapshot1 のスナップショットです。
mysnapshot3 は mysnapshot2 のスナップショットです、
注記lv_ancestors
フィールドとlv_descendants
フィールドには、既存の依存関係が表示されます。ただし、削除されたエントリーは追跡しません。このチェーンの最中にエントリーが削除されると、依存関係チェーンが壊れるためです。
関連情報
-
lvcreate(8)
の man ページ
第11章 キャッシュを有効にして論理ボリュームのパフォーマンスを改善
LVM 論理ボリュームにキャッシュを追加して、パフォーマンスを向上できます。LVM は、SSD などの高速なデバイスを使用して、論理ボリュームに I/O 操作をキャッシュします。
以下の手順では、高速デバイスから特別な論理ボリュームを作成し、この特別な論理ボリュームを元の論理ボリュームに接続して、パフォーマンスを向上させます。
11.1. LVM でのキャッシュの取得方法
LVM は、以下のようなキャッシュの取得方法を提供します。論理ボリューム上のさまざまなタイプの I/O パターンに適しています。
dm-cache
このメソッドは、高速なボリユームで頻繁に使用されるデータをキャッシュして、このようなデータへのアクセス時間を短縮します。このメソッドは、読み取りおよび書き込みの両方の操作をキャッシュします。
dm-cache
メソッドは、cache
タイプの論理ボリュームを作成します。dm-writecache
このメソッドは、書き込み操作のみをキャッシュします。高速なボリュームは書き込み操作を保存し、それらをバックグラウンドで低速なディスクに移行します。高速ボリュームは通常 SSD または永続メモリー (PMEM) ディスクです。
dm-writecache
メソッドは、writecache
タイプの論理ボリュームを作成します。
関連情報
-
lvmcache(7)
man ページ
11.2. LVM キャッシュコンポーネント
LVM は、キャッシュを LVM 論理ボリュームに追加するためのサポートを提供します。LVM キャッシュは、LVM 論理ボリュームタイプを使用します。
- Main LV
- より大きく、より遅い、元のボリューム。
- キャッシュプール LV
-
メイン LV からデータをキャッシュするために使用できる複合 LV。キャッシュデータを保持するためのデータと、キャッシュデータを管理するためのメタデータの 2 つのサブ LV があります。データおよびメタデータ用に特定のディスクを設定できます。キャッシュプールは
dm-cache
でのみ使用できます。 - Cachevol LV
-
メイン LV からデータをキャッシュするために使用できる線形 LV。データとメタデータ用に個別のディスクを設定することはできません。
cachevol
は、dm-cache
またはdm-writecache
でのみ使用できます。
これらの関連付けられた LV はすべて、同じボリュームグループにある必要があります。
メインの論理ボリューム (LV) を、キャッシュされたデータを保持する高速で通常は小さい LV と組み合わせることができます。高速 LV は、SSD ドライブなどの高速ブロックデバイスから作成されます。論理ボリュームのキャッシュを有効にすると、LVM は元のボリュームの名前を変更および非表示にし、元の論理ボリュームで設定される新しい論理ボリュームを表示します。新しい論理ボリュームの設定は、キャッシュ方法と、cachevol
オプションまたは cachepool
オプションを使用しているかどうかによって異なります。
cachevol
オプションおよび cachepool
オプションは、キャッシングコンポーネントの配置に対するさまざまなレベルの制御を公開します。
-
cachevol
オプションを使用すると、高速なデバイスは、データブロックのキャッシュされたコピーとキャッシュ管理用のメタデータの両方を保存します。 cachepool
オプションを使用すると、別のデバイスはデータブロックのキャッシュコピーとキャッシュ管理用のメタデータを保存できます。dm-writecache
メソッドは、cachepool
と互換性がありません。
すべての設定において、LVM は、結果として作成される 1 つのデバイスを公開し、すべてのキャッシングコンポーネントをグループ化します。作成されるデバイスは、元の低速な論理ボリュームと同じ名前になります。
関連情報
-
lvmcache(7)
man ページ - シンプロビジョニングされたボリューム (シンボリューム) の作成および管理
11.3. 論理ボリュームの dm-cache キャッシュの有効化
この手順では、dm-cache
メソッドを使用して、論理ボリュームで一般的に使用されるデータのキャッシュを有効にします。
前提条件
-
システムに、
dm-cache
を使用した高速化したい低速な論理ボリュームがある。 - 低速な論理ボリュームを含むボリュームグループには、高速ブロックデバイスに未使用の物理ボリュームも含まれます。
手順
高速デバイスに
cachevol
ボリュームを作成します。# lvcreate --size cachevol-size --name <fastvol> <vg> </dev/fast-pv>
以下の値を置き換えます。
cachevol-size
-
5G
などのcachevol
ボリュームのサイズ fastvol
-
cachevol
ボリュームの名前 vg
- ボリュームグループ名
/dev/fast-pv
高速ブロックデバイスへのパス (例:
/dev/sdf
)例11.1
cachevol
ボリュームの作成# lvcreate --size 5G --name fastvol vg /dev/sdf Logical volume "fastvol" created.
cachevol
ボリュームをメインの論理ボリュームに接続して、キャッシュを開始します。# lvconvert --type cache --cachevol <fastvol> <vg/main-lv>
以下の値を置き換えます。
fastvol
-
cachevol
ボリュームの名前 vg
- ボリュームグループ名
main-lv
低速な論理ボリュームの名前
例11.2 メイン LV への
cachevol
ボリュームの接続# lvconvert --type cache --cachevol fastvol vg/main-lv Erase all existing data on vg/fastvol? [y/n]: y Logical volume vg/main-lv is now cached.
検証手順
新しく作成した論理ボリュームで
dm-cache
が有効になっているかどうかを確認します。# lvs --all --options +devices <vg> LV Pool Type Devices main-lv [fastvol_cvol] cache main-lv_corig(0) [fastvol_cvol] linear /dev/fast-pv [main-lv_corig] linear /dev/slow-pv
関連情報
-
lvmcache(7)
man ページ
11.4. 論理ボリュームに cachepool を使用した dm-cache キャッシュの有効化
この手順では、キャッシュデータとキャッシュメタデータ論理ボリュームを個別に作成し、ボリュームをキャッシュプールに統合することができます。
前提条件
-
システムに、
dm-cache
を使用した高速化したい低速な論理ボリュームがある。 - 低速な論理ボリュームを含むボリュームグループには、高速ブロックデバイスに未使用の物理ボリュームも含まれます。
手順
高速デバイスに
cachepool
ボリュームを作成します。# lvcreate --type cache-pool --size <cachepool-size> --name <fastpool> <vg /dev/fast>
以下の値を置き換えます。
cachepool-size
-
cachepool
のサイズ (例:5G
) fastpool
-
cachepool
ボリュームの名前 vg
- ボリュームグループ名
/dev/fast
高速ブロックデバイスへのパス (例:
/dev/sdf1
)注記--poolmetadata
オプションを使用して、cache-pool の作成時にプールメタデータの場所を指定できます。例11.3
cachevol
ボリュームの作成# lvcreate --type cache-pool --size 5G --name fastpool vg /dev/sde Logical volume "fastpool" created.
キャッシュを開始するために、メイン論理ボリュームに
cachepool
をアタッチします。# lvconvert --type cache --cachepool <fastpool> <vg/main>
以下の値を置き換えます。
fastpool
-
cachepool
ボリュームの名前 vg
- ボリュームグループ名
main
低速な論理ボリュームの名前
例11.4 メイン LV への
cachepool
の接続# lvconvert --type cache --cachepool fastpool vg/main Do you want wipe existing metadata of cache pool vg/fastpool? [y/n]: y Logical volume vg/main is now cached.
検証手順
cache-pool
タイプで新しく作成したデバイスボリュームを調べます。# lvs --all --options +devices <vg> LV Pool Type Devices [fastpool_cpool] cache-pool fastpool_pool_cdata(0) [fastpool_cpool_cdata] linear /dev/sdf1(4) [fastpool_cpool_cmeta] linear /dev/sdf1(2) [lvol0_pmspare] linear /dev/sdf1(0) main [fastpoool_cpool] cache main_corig(0) [main_corig] linear /dev/sdf1(O)
関連情報
-
lvcreate(8)
の man ページ -
lvmcache(7)
man ページ -
lvconvert(8)
の man ページ
11.5. 論理ボリュームの dm-writecache キャッシュの有効化
この手順では、dm-writecache
メソッドを使用して、論理ボリュームへの書き込み I/O 操作のキャッシュを有効にします。
前提条件
-
システムに、
dm-writecache
を使用した高速化したい低速な論理ボリュームがある。 - 低速な論理ボリュームを含むボリュームグループには、高速ブロックデバイスに未使用の物理ボリュームも含まれます。
- 低速な論理ボリュームがアクティブな場合は、非アクティブ化する。
手順
低速な論理ボリュームがアクティブな場合は、非アクティブにします。
# lvchange --activate n <vg>/<main-lv>
以下の値を置き換えます。
vg
- ボリュームグループ名
main-lv
- 低速な論理ボリュームの名前
高速なデバイス上に非アクティブな
cachevol
ボリュームを作成します。# lvcreate --activate n --size <cachevol-size> --name <fastvol> <vg> </dev/fast-pv>
以下の値を置き換えます。
cachevol-size
-
5G
などのcachevol
ボリュームのサイズ fastvol
-
cachevol
ボリュームの名前 vg
- ボリュームグループ名
/dev/fast-pv
高速ブロックデバイスへのパス (例:
/dev/sdf
)例11.5 非アクティブ化された
cachevol
ボリュームの作成# lvcreate --activate n --size 5G --name fastvol vg /dev/sdf WARNING: Logical volume vg/fastvol not zeroed. Logical volume "fastvol" created.
cachevol
ボリュームをメインの論理ボリュームに接続して、キャッシュを開始します。# lvconvert --type writecache --cachevol <fastvol> <vg/main-lv>
以下の値を置き換えます。
fastvol
-
cachevol
ボリュームの名前 vg
- ボリュームグループ名
main-lv
低速な論理ボリュームの名前
例11.6 メイン LV への
cachevol
ボリュームの接続# lvconvert --type writecache --cachevol fastvol vg/main-lv Erase all existing data on vg/fastvol? [y/n]?: y Using writecache block size 4096 for unknown file system block size, logical block size 512, physical block size 512. WARNING: unable to detect a file system block size on vg/main-lv WARNING: using a writecache block size larger than the file system block size may corrupt the file system. Use writecache block size 4096? [y/n]: y Logical volume vg/main-lv now has writecache.
作成された論理ボリュームをアクティベートします。
# lvchange --activate y <vg/main-lv>
以下の値を置き換えます。
vg
- ボリュームグループ名
main-lv
- 低速な論理ボリュームの名前
検証手順
新たに作成されたデバイスを確認します。
# lvs --all --options +devices vg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices main-lv vg Cwi-a-C--- 500.00m [fastvol_cvol] [main-lv_wcorig] 0.00 main-lv_wcorig(0) [fastvol_cvol] vg Cwi-aoC--- 252.00m /dev/sdc1(0) [main-lv_wcorig] vg owi-aoC--- 500.00m /dev/sdb1(0)
関連情報
-
lvmcache(7)
man ページ
11.6. 論理ボリュームのキャッシュの無効化
この手順では、論理ボリュームで現在有効な dm-cache
キャッシュまたは dm-writecache
キャッシュを無効にします。
前提条件
- キャッシュは、論理ボリュームで有効になります。
手順
論理ボリュームを非アクティブにします。
# lvchange --activate n <vg>/<main-lv>
vg はボリュームグループ名に置き換え、main-lv はキャッシュが有効になっている論理ボリュームの名前に置き換えます。
cachevol
ボリュームまたはcachepool
ボリュームの割り当てを解除します。# lvconvert --splitcache <vg>/<main-lv>
以下の値を置き換えます。
vg はボリュームグループ名に置き換え、main-lv はキャッシュが有効になっている論理ボリュームの名前に置き換えます。
例11.7
cachevol
またはcachepool
ボリュームの接続解除# lvconvert --splitcache vg/main-lv Detaching writecache already clean. Logical volume vg/main-lv writecache has been detached.
検証手順
論理ボリュームが接続されていないことを確認します。
# lvs --all --options +devices <vg> LV Attr Type Devices fastvol -wi------- linear /dev/fast-pv main-lv -wi------- linear /dev/slow-pv
関連情報
-
lvmcache(7)
man ページ
第12章 論理ボリュームのアクティブ化
デフォルトでは、論理ボリュームを作成すると、アクティブ状態になります。アクティブ状態の論理ボリュームは、ブロックデバイスを介して使用できます。アクティブ化された論理ボリュームにはアクセス可能で、変更される可能性があります。
個々の論理ボリュームを非アクティブにする必要があるため、カーネルに認識されない状況が複数あります。個々の論理ボリュームは、lvchange
コマンドの -a
オプションを使用してアクティブまたは非アクティブにできます。
以下は、個々の論理ボリュームを非アクティブ化する形式です。
# lvchange -an vg/lv
以下は、個々の論理ボリュームをアクティブにする形式です。
# lvchange -ay vg/lv
vgchange
コマンドの -a
オプションを使用して、ボリュームグループの論理ボリュームをすべてアクティブまたは非アクティブにできます。これは、ボリュームグループの個々の論理ボリュームに lvchange -a
コマンドを実行するのと同じです。
以下は、ボリュームグループ内のすべての論理ボリュームを非アクティブ化する形式です。
# vgchange -an vg
以下は、ボリュームグループ内のすべての論理ボリュームをアクティブにする形式です。
# vgchange -ay vg
systemd-mount
ユニットがマスクされていない限り、手動アクティベーション中に、systemd
は /etc/fstab
ファイルからの対応するマウントポイントで LVM ボリュームを自動的にマウントします。
12.1. 論理ボリュームおよびボリュームグループの自動アクティブ化の制御
論理ボリュームの自動アクティブ化は、システム起動時に論理ボリュームをイベントベースで自動的にアクティブにすることを指します。システムでデバイスが利用可能になると (デバイスのオンラインイベント)、systemd/udev
は、各デバイスに lvm2-pvscan
サービスを実行します。このサービスは、named デバイスを読み込む pvscan --cache -aay device
コマンドを実行します。デバイスがボリュームグループに属している場合、pvscan
コマンドは、そのボリュームグループに対する物理ボリュームがすべて、そのシステムに存在するかどうかを確認します。存在する場合は、このコマンドが、そのボリュームグループにある論理ボリュームをアクティブにします。
VG または LV に自動アクティベーションプロパティーを設定できます。autoactivation プロパティーが無効になっていると、vgchange
オプション、lvchange
オプション、または pvscan
などの自動アクティベーションを行うコマンドでは、VG または LV はアクティブ化されません。VG で自動アクティベーションが無効になっていると、その VG で LV が自動アクティブ化されず、自動アクティベーションプロパティーは効果がありません。VG で自動アクティベーションが有効になっている場合は、個々の LV に対して自動アクティベーションを無効にできます。
手順
次のいずれかの方法で自動アクティベーション設定を更新できます。
コマンドラインを使用して VG の自動アクティブ化を制御します。
# vgchange --setautoactivation <y|n>
コマンドラインを使用して LV の自動アクティブ化を制御します。
# lvchange --setautoactivation <y|n>
以下の設定オプションのいずれかを使用して、
/etc/lvm/lvm.conf
設定ファイルで LV の自動アクティブ化を制御します。global/event_activation
event_activation
が無効になっている場合、systemd/udev
は、システムの起動時に存在する物理ボリュームでのみ、論理ボリュームを自動アクティブにします。すべての物理ボリュームが表示されていないと、一部の論理ボリュームが自動的にアクティブにならない場合もあります。activation/auto_activation_volume_list
auto_activation_volume_list
を空のリストに設定すると、自動アクティベーションは完全に無効になります。特定の論理ボリュームとボリュームグループにauto_activation_volume_list
を設定すると、自動アクティベーションは、設定した論理ボリュームに制限されます。
関連情報
-
/etc/lvm/lvm.conf
設定ファイル -
lvmautoactivation (7)
の man ページ
12.2. 論理ボリュームのアクティブ化の制御
以下の方法で、論理ボリュームのアクティブ化を制御できます。
-
/etc/lvm/conf
ファイルのactivation/volume_list
設定で行います。これにより、どの論理ボリュームをアクティブにするかを指定できます。このオプションの使用方法は /etc/lvm/lvm.conf 設定ファイルを参照してください。 - 論理ボリュームのアクティブ化スキップフラグで行います。このフラグが論理ボリュームに設定されていると、通常のアクティベーションコマンド時にそのボリュームがスキップされます。
または、lvcreate
または lvchange
コマンドで --setactivationskip y|n
オプションを使用して、アクティベーションスキップフラグを有効または無効にします。
手順
以下の方法で、論理ボリュームのアクティブ化スキップフラグを設定できます。
アクティベーションスキップフラグが論理ボリュームに設定されているかどうかを確認するには、
lvs
コマンドを実行します。これにより、k
属性が以下の例のように表示されます。# lvs vg/thin1s1 LV VG Attr LSize Pool Origin thin1s1 vg Vwi---tz-k 1.00t pool0 thin1
標準の
-ay
または--activate y
オプションに加えて-K
オプションまたは--ignoreactivationskip
オプションを使用して、k
属性セットで論理ボリュームをアクティブにできます。デフォルトでは、シンプロビジョニングのスナップショットボリュームに、作成時にアクティブ化スキップのフラグが付いています。
/etc/lvm/lvm.conf
ファイルのauto_set_activation_skip
設定で、新たに作成した、シンプロビジョニングのスナップショットボリュームの、デフォルトのアクティブ化スキップ設定を制御できます。以下のコマンドは、アクティブ化スキップフラグが設定されているシンプロビジョニングのスナップショット論理ボリュームをアクティブにします。
# lvchange -ay -K VG/SnapLV
以下のコマンドは、アクティブ化スキップフラグなしでシンプロビジョニングのスナップショットを作成します。
# lvcreate -n SnapLV -kn -s vg/ThinLV --thinpool vg/ThinPoolLV
以下のコマンドは、スナップショット論理ボリュームからアクティブ化スキップフラグを削除します。
# lvchange -kn VG/SnapLV
検証手順
アクティベーションスキップフラグのないシンスナップショットが作成されているかどうかを確認します。
# lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type SnapLV vg Vwi-a-tz-- 100.00m ThinPoolLV ThinLV 0.00 thin ThinLV vg Vwi-a-tz-- 100.00m ThinPoolLV 0.00 thin ThinPoolLV vg twi-aotz-- 100.00m 0.00 10.94 ThinPoolLV_tdata(0) thin-pool [ThinPoolLV_tdata] vg Twi-ao---- 100.00m /dev/sdc1(1) linear [ThinPoolLV_tmeta] vg ewi-ao---- 4.00m /dev/sdd1(0) linear [lvol0_pmspare] vg ewi------- 4.00m /dev/sdc1(0) linear
12.3. 共有論理ボリュームのアクティベーション
以下のように、lvchange
コマンドおよび vgchange
コマンドの -a
オプションを使用して、共有論理ボリュームの論理ボリュームのアクティブ化を制御できます。
コマンド | アクティベーション |
---|---|
| 共有論理ボリュームを排他モードでアクティベートし、1 台のホストのみが論理ボリュームをアクティベートできるようにします。アクティベーションが失敗 (論理ボリュームが別のホストでアクティブの場合に発生する可能性あり) すると、エラーが報告されます。 |
| 共有モードで共有論理ボリュームをアクティブにし、複数のホストが論理ボリュームを同時にアクティブにできるようにします。アクティブできない場合は (その論理ボリュームは別のホストで排他的にアクティブになっている場合に発生する可能性あり)、エラーが報告されます。スナップショットなど、論理タイプが共有アクセスを禁止している場合は、コマンドがエラーを報告して失敗します。複数のホストから同時に使用できない論理ボリュームタイプには、シン、キャッシュ、RAID、およびスナップショットがあります。 |
| 論理ボリュームを非アクティブにします。 |
12.4. 欠落しているデバイスを含む論理ボリュームのアクティブ化
lvchange
コマンドに --activationmode partial|degraded|complete
オプションを指定して、デバイスがない LV をアクティベートするかどうかを制御できます。値の説明は次のとおりです。
アクティベーションモード | 意味 |
---|---|
complete | 物理ボリュームが見つからない論理ボリュームのみをアクティベートすることを許可します。これが最も制限的なモードです。 |
degraded | 物理ボリュームが見つからない RAID 論理ボリュームをアクティベートすることを許可します。 |
partial | 物理ボリュームが見つからない論理ボリュームをすべてアクティベートすることを許可します。このオプションは、回復または修復にのみ使用してください。 |
activationmode
のデフォルト値は、/etc/lvm/lvm.conf
ファイルの activationmode
設定によって決定されます。コマンドラインオプションが指定されていない場合に使用されます。
関連情報
-
lvmraid (7)
man ページ
第13章 LVM デバイスの可視性および使用を制限する
論理ボリュームマネージャー (LVM) がスキャンできるデバイスを制御することにより、LVM で表示および使用できるデバイスを制限できます。
LVM デバイススキャンの設定を調整するには、/etc/lvm/lvm.conf
ファイルで LVM デバイスフィルター設定を編集します。lvm.conf
ファイル内のフィルターは、一連の単純な正規表現で設定されています。システムは、これらの式を /dev
ディレクトリー内の各デバイス名に適用して、検出された各ブロックデバイスを受け入れるか拒否するかを決定します。
13.1. LVM デバイスフィルター
論理ボリュームマネージャー (LVM) デバイスフィルターは、デバイス名パターンのリストです。これを使用すると、システムがデバイスを評価して LVM での使用が有効であると認めるのに使用する一連の必須基準を指定できます。LVM デバイスフィルターを使用すると、LVM が使用するデバイスを制御できます。これは、偶発的なデータ損失やストレージデバイスへの不正アクセスを防ぐのに役立ちます。
13.1.1. LVM デバイスフィルターのパターンの特性
LVM デバイスフィルターのパターンは正規表現の形式です。正規表現は文字で区切られ、許可の場合は a
、拒否の場合は r
が前に付きます。デバイスに一致する最初の正規表現は、LVM が特定のデバイスを許可するか、拒否 (無視) するかを判断します。次に、LVM はデバイスのパスに一致する最初の正規表現をリスト内で検索します。LVM はこの正規表現を使用して、デバイスを a
の結果により承認するか、r
の結果により拒否するかを決定します。
単一のデバイスに複数のパス名がある場合、LVM はリストの順序に従ってこれらのパス名にアクセスします。r
パターンの前に、少なくとも 1 つのパス名が a
パターンと一致する場合、LVM はデバイスを許可します。しかし、a
パターンが見つかる前にすべてのパス名が r
パターンと一致した場合、デバイスは拒否されます。
パターンに一致しないパス名は、デバイスの許可ステータスに影響を与えません。デバイスのパターンに一致するパス名がまったくない場合も、LVM はデバイスを許可します。
システム上のデバイスごとに、udev
ルールは複数のシンボリックリンクを生成します。ディレクトリーには、システム上の各デバイスが複数のパス名を通じてアクセスできるように、/dev/disk/by-id/
、/dev/disk/by-uuid/
、/dev/disk/by-path/
などのシンボリックリンクが含まれています。
フィルター内のデバイスを拒否するには、その特定のデバイスに関連付けられたすべてのパス名が、対応する r
拒否表現と一致する必要があります。ただし、考えられる拒否対象のパス名をすべて特定するのは困難な場合があります。そのため、一連の特定の a
表現の後に 1 つの r|.*|
表現を使用して、特定のパスを明確に限定して許可し、その他のすべてを拒否するフィルターを作成することを推奨します。
フィルターで特定のデバイスを定義するときは、カーネル名の代わりにそのデバイスのシンボリックリンク名を使用します。/dev/sda
など、デバイスのカーネル名は変更される可能性がありますが、/dev/disk/by-id/wwn-*
などの特定のシンボリックリンク名は変更されません。
デフォルトのデバイスフィルターは、システムに接続されているすべてのデバイスを許可します。理想的なユーザー設定のデバイスフィルターは、1 つ以上のパターンを許可し、それ以外はすべて拒否します。たとえば、r|.*|
で終わるパターンリストなどが挙げられます。
LVM デバイスのフィルター設定は、lvm.conf
ファイルの devices/filter
および devices/global_filter
設定フィールドにあります。devices/filter
設定フィールドと devices/global_filter
設定フィールドは同等のものです。
関連情報
-
lvm.conf(5)
man ページ
13.1.2. LVM デバイスフィルター設定の例
次の例は、LVM がスキャンして後で使用するデバイスを制御するためのフィルター設定を示しています。lvm.conf
ファイルでデバイスフィルターを設定するには、LVM デバイスフィルター設定の適用 を参照してください。
LVM フィルターの設定によっては、物理ボリューム (PV) の重複に関する警告が発生する場合があります。この問題を回避するために、PV の重複警告を防ぐ LVM デバイスフィルターの例 のフィルター設定の例を参照してください。
すべてのデバイスをスキャンするには、次のように入力します。
filter = [ "|a.*|" ]
ドライブにメディアが含まれていない場合の遅延を避けるために
cdrom
デバイスを削除するには、次のように入力します。filter = [ "r|^/dev/cdrom$|" ]
すべてのループデバイスを追加し、他のすべてのデバイスを削除するには、次のように入力します。
filter = [ "a|loop|", "r|.*|" ]
すべてのループデバイスと統合開発環境 (IDE) デバイスを追加し、他のすべてのブロックデバイスを削除するには、次のように入力します。
filter = [ "a|loop|", "a|/dev/hd.*|", "r|.*|" ]
最初の IDE ドライブにパーティション 8 のみを追加し、他のすべてのブロックデバイスを削除するには、次のように入力します。
filter = [ "a|^/dev/hda8$|", "r|.*|" ]
関連情報
-
lvm.conf(5)
man ページ - LVM デバイスフィルター設定の適用
- PV の重複警告を防ぐ LVM デバイスフィルターの例
13.1.3. LVM デバイスフィルター設定の適用
lvm.conf
設定ファイル内にフィルターを設定することにより、LVM がスキャンするデバイスを制御することができます。
前提条件
- 使用するデバイスフィルターパターンが準備されている。
手順
実際に
/etc/lvm/lvm.conf
ファイルを変更せずに、次のコマンドを使用してデバイスフィルターパターンをテストします。以下にフィルター設定の例を示します。# lvs --config 'devices{ filter = [ "a|/dev/emcpower.|", "r|.|" ] }'
/etc/lvm/lvm.conf
ファイルの設定セクションdevices
にデバイスフィルターパターンを追加します。filter = [ "a|/dev/emcpower.*|", "r|*.|" ]
欠落している物理ボリュームとボリュームグループをそれぞれ確認します。
# pvscan -v
# vgscan -v
再起動時に必要なデバイスのみをスキャンします。
# dracut --force --verbose
このコマンドによって、LVM が必要なデバイスのみを再起動時にスキャンするように
initramfs
ファイルシステムを再構築します。
第14章 LVM の割り当ての制御
デフォルトでは、ボリュームグループは、同じ物理ボリューム上に並行ストライプを配置しないなど、常識的な規則に従って物理エクステントを割り当てます。これは、normal
割り当てポリシーです。vgcreate
コマンドで --alloc
引数を使用して、割り当てポリシーの contiguous
、anywhere
、または cling
を指定します。一般的に、normal
以外の割り当てポリシーが必要となるのは、通常とは異なる、標準外のエクステント割り当てを必要とする特別なケースのみです。
14.1. LVM の割り当てポリシー
LVM の操作で物理エクステントを 1 つまたは複数の論理ボリュームに割り当てる必要がある場合、割り当ては以下のように行われます。
- ボリュームグループで割り当てられていない物理エクステントのセットが、割り当てのために生成されます。コマンドラインの末尾に物理エクステントの範囲を指定すると、指定した物理ボリュームの中で、その範囲内で割り当てられていない物理エクステントだけが、割り当て用エクステントとして考慮されます。
-
割り当てポリシーは順番に試行されます。最も厳格なポリシー (
contiguous
) から始まり、最後は--alloc
オプションで指定した割り当てポリシーか、特定の論理ボリュームやボリュームグループにデフォルトとして設定されている割り当てポリシーが試行されます。割り当てポリシーでは、埋める必要がある空の論理ボリューム領域の最小番号の論理エクステントから始まり、割り当てポリシーによる制限に従って、できるだけ多くの領域の割り当てを行います。領域が足りなくなると、LVM は次のポリシーに移動します。
割り当てポリシーの制限は以下のとおりです。
contiguous
の割り当てポリシーでは、論理ボリュームの最初の論理エクステントを除いたすべての論理エクステントは、その直前の論理エクステントに物理的に隣接している必要があります。論理ボリュームがストライプ化またはミラー化されている場合は、
contiguous
の割り当て制限が、領域を必要とする各ストライプまたはミラーイメージ (レッグ) に個別に適用されます。cling
の割り当てポリシーでは、既存の論理ボリュームに追加する論理エクステントに使用される物理ボリュームが、その論理ボリュームにある別の (1 つ以上の) 論理エクステントですでに使用されている必要があります。設定パラメーターallocation/cling_tag_list
が定義されており、一覧表示されているいずれかのタグが 2 つの物理ボリュームにある場合、この 2 つの物理ボリュームは一致すると見なされます。これにより、割り当てのために、同様のプロパティー (物理的な場所など) が設定されている物理ボリュームのグループにタグを付け、その物理ボリュームを同等なものとして処理できます。論理ボリュームがストライプ化またはミラー化されると、
cling
の割り当て制限が、領域を必要とする各ストライプまたはミラーイメージ (レッグ) に個別に適用されます。normal
の割り当てポリシーは、並列の論理ボリューム (異なるストライプまたはミラーイメージ/レッグ) 内の同じオフセットで、その並列の論理ボリュームにすでに割り当てられている論理エクステントと同じ物理ボリュームを共有する物理エクステントは選択しません。ミラーデータを保持するために、論理ボリュームと同時にミラーログを割り当てる場合、
normal
の割り当てポリシーでは、最初にログとデータに対して、それぞれ別の物理ボリュームを選択しようとします。異なる物理ボリュームを選択できず、かつallocation/mirror_logs_require_separate_pvs
設定パラメーターが 0 に設定されている場合は、データの一部とログが物理ボリュームを共有できるようになります。また、シンプールメタデータを割り当てる場合も、
normal
の割り当てポリシーはミラーログを割り当てる場合と同じようになりますが、設定パラメーターはallocation/thin_pool_metadata_require_separate_pvs
の値が適用されます。-
割り当て要求を満たすのに十分な空きエクステントがあっても、
normal
の割り当てポリシーによって使用されない場合は、たとえ同じ物理ボリュームに 2 つのストライプを配置することによってパフォーマンスが低下しても、anywhere
割り当てポリシーがその空きエクステントを使用します。
割り当てポリシーは、vgchange
コマンドで変更できます。
今後の更新で、定義された割り当てポリシーに基づくレイアウト操作のコードが変更される可能性があることに注意してください。たとえば、割り当て可能な空き物理エクステントの数が同じ 2 つの空の物理ボリュームをコマンドラインで指定する場合、現行バージョンの LVM では、それが表示されている順番に使用が検討されます。ただし、今後のリリースで、そのプロパティーが変更されない保証はありません。特定の論理ボリューム用に特定のレイアウトを取得することが重要な場合は、各手順に適用される割り当てポリシーに基づいて LVM がレイアウトを決定することがないように、lvcreate
と lvconvert
を順に使用してレイアウトを構築してください。
特定のケースで、割り当てプロセスがどのように行われているかを確認するには、コマンドに -vvvv
オプションを追加するなどして、デバッグロギングの出力を表示します。
14.2. 物理ボリュームでの割り当て防止
pvchange
コマンドを使用すると、1 つまたは複数の物理ボリュームの空き領域で物理エクステントが割り当てられないように設定できます。これは、ディスクエラーが発生した場合や、物理ボリュームを取り除く場合に必要となる可能性があります。
以下のコマンドは、/dev/sdk1
での物理エクステントの割り当てを無効にします。
# pvchange -x n /dev/sdk1
pvchange
コマンドで -xy
引数を使用すると、無効にされていた割り当てを許可できます。
14.3. cling
割り当てポリシーを使用した論理ボリュームの拡張
LVM ボリュームを拡張する際には、lvextend
コマンドの --alloc cling
オプションを使用して、cling
割り当てポリシーを指定できます。このポリシーにより、既存の論理ボリュームの最終セグメントと同じ物理ボリュームの領域が選択されます。物理ボリューム上に十分な領域がなく、タグの一覧が /etc/lvm/lvm.conf
ファイルで定義されている場合には、LVM が、その物理ボリュームにいずれかのタグが付けられているかを確認し、既存エクステントと新規エクステント間で、物理ボリュームのタグを適合させようとします。
たとえば、使用している論理ボリュームが、1 つのボリュームグループ内の 2 サイト間でミラー化されている場合は、@site1
タグと @site2
タグを使用し、サイトの場所に応じて物理ボリュームにタグを付けることができます。この場合は、lvm.conf
ファイル内に以下の行を指定します。
cling_tag_list = [ "@site1", "@site2" ]
以下の例では、lvm.conf
ファイルが変更されて、次のような行が追加されています。
cling_tag_list = [ "@A", "@B" ]
また、この例では、/dev/sdb1
、/dev/sdc1
、/dev/sdd1
、/dev/sde1
、/dev/sdf1
、/dev/sdg1
、および /dev/sdh1
の物理ボリュームで設定されるボリュームグループ taft
が作成されています。この物理ボリュームには、A
、B
、および C
のタグが付けられています。この例では、C
のタグは使用されていませんが、LVM がタグを使用して、ミラーレッグに使用する物理ボリュームを選択することを示しています。
# pvs -a -o +pv_tags /dev/sd[bcdefgh] PV VG Fmt Attr PSize PFree PV Tags /dev/sdb1 taft lvm2 a-- 15.00g 15.00g A /dev/sdc1 taft lvm2 a-- 15.00g 15.00g B /dev/sdd1 taft lvm2 a-- 15.00g 15.00g B /dev/sde1 taft lvm2 a-- 15.00g 15.00g C /dev/sdf1 taft lvm2 a-- 15.00g 15.00g C /dev/sdg1 taft lvm2 a-- 15.00g 15.00g A /dev/sdh1 taft lvm2 a-- 15.00g 15.00g A
以下のコマンドは、ボリュームグループ taft
から 10 ギガバイトのミラー化ボリュームを作成します。
# lvcreate --type raid1 -m 1 -n mirror --nosync -L 10G taft
WARNING: New raid1 won't be synchronised. Don't read what you didn't write!
Logical volume "mirror" created
以下のコマンドは、ミラーレッグおよび RAID メタデータのサブボリュームに使用されるデバイスを表示します。
# lvs -a -o +devices
LV VG Attr LSize Log Cpy%Sync Devices
mirror taft Rwi-a-r--- 10.00g 100.00 mirror_rimage_0(0),mirror_rimage_1(0)
[mirror_rimage_0] taft iwi-aor--- 10.00g /dev/sdb1(1)
[mirror_rimage_1] taft iwi-aor--- 10.00g /dev/sdc1(1)
[mirror_rmeta_0] taft ewi-aor--- 4.00m /dev/sdb1(0)
[mirror_rmeta_1] taft ewi-aor--- 4.00m /dev/sdc1(0)
以下のコマンドは、ミラー化ボリュームのサイズを拡張します。cling
割り当てポリシーで、同じタグが付いた物理ボリュームを使用して、ミラーレッグが拡張される必要があることを示します。
# lvextend --alloc cling -L +10G taft/mirror
Extending 2 mirror images.
Extending logical volume mirror to 20.00 GiB
Logical volume mirror successfully resized
以下に表示したコマンドは、レッグとして同一のタグが付いた物理ボリュームを使用してミラーレッグが拡張されているのを示しています。C
のタグが付いた物理ボリュームは無視される点に注意してください。
# lvs -a -o +devices
LV VG Attr LSize Log Cpy%Sync Devices
mirror taft Rwi-a-r--- 20.00g 100.00 mirror_rimage_0(0),mirror_rimage_1(0)
[mirror_rimage_0] taft iwi-aor--- 20.00g /dev/sdb1(1)
[mirror_rimage_0] taft iwi-aor--- 20.00g /dev/sdg1(0)
[mirror_rimage_1] taft iwi-aor--- 20.00g /dev/sdc1(1)
[mirror_rimage_1] taft iwi-aor--- 20.00g /dev/sdd1(0)
[mirror_rmeta_0] taft ewi-aor--- 4.00m /dev/sdb1(0)
[mirror_rmeta_1] taft ewi-aor--- 4.00m /dev/sdc1(0)
14.4. タグを使用した LVM RAID オブジェクト間の区別
LVM RAID オブジェクトにタグを割り当て、グループごとにアクティブ化などの LVM RAID の動作の制御を自動化できます。
lvm の割り当ては、割り当てポリシーに基づいて PV レベルで発生するため、物理ボリューム (PV) タグは、論理ボリューム (LV) またはボリュームグループ (VG) タグではなく、LVM RAID の割り当て制御を行います。ストレージタイプを異なるプロパティーで区別するには、適切にタグを付けます (NVMe、SSD、HDD など)。Red Hat は、VG に追加した後に新規 PV を適切にタグ付けすることを推奨します。
この手順では、/dev/sda
が SSD で、/dev/sd[b-f]
が 1 つのパーティションを持つ HDD であることを前提とします。
前提条件
-
lvm2
パッケージがインストールされている。 - PV として使用するストレージデバイスが利用できます。
手順
ボリュームグループを作成します。
# vgcreate MyVG /dev/sd[a-f]1
物理ボリュームにタグを追加します。
# pvchange --addtag ssds /dev/sda1 # pvchange --addtag hdds /dev/sd[b-f]1
RAID6 論理ボリュームを作成します。
# lvcreate --type raid6 --stripes 3 -L1G -nr6 MyVG @hdds
リニアキャッシュプールボリュームを作成します。
# lvcreate -nr6pool -L512m MyVG @ssds
RAID6 ボリュームをキャッシュに変換します。
# lvconvert --type cache --cachevol MyVG/r6pool MyVG/r6
関連情報
-
man ページの
lvcreate(8)
、lvconvert(8)
、lvmraid(7)
、およびlvmcache(7)
第15章 タグを使用した LVM オブジェクトのグループ化
論理ボリューム管理 (LVM) オブジェクトにタグを割り当てて、オブジェクトをグループ化できます。この機能を使用すると、アクティブ化など、LVM の動作の制御をグループごとに自動化できます。LVM オブジェクトのタグをコマンドとして使用することもできます。
15.1. LVM オブジェクトタグ
論理ボリューム管理 (LVM) タグは、同じタイプの LVM2 オブジェクトをグループ化するために使用する用語です。タグは、物理ボリューム、ボリュームグループ、論理ボリュームなどのオブジェクトや、クラスター設定のホストに割り当てられます。
曖昧さを避けるために、各タグの先頭に @
を付けます。各タグは、そのタグを所有し、コマンドライン上の位置によって予期されるタイプのすべてのオブジェクトに置き換えることで拡張されます。
LVM タグは、最大 1024 文字の文字列です。LVM タグはハイフンで開始できません。
有効なタグは、限られた範囲の文字のみで設定されます。使用できる文字は、A-Z a-z 0-9 _ + です。- / = !: # &
です。
タグを付けることができるのは、ボリュームグループ内のオブジェクトのみです。物理ボリュームは、ボリュームグループから削除されるとタグを失います。これは、タグがボリュームグループメタデータの一部として保存され、物理ボリュームが削除されると削除されるためです。
一部のコマンドは、同じタグを持つすべてのボリュームグループ (VG)、論理ボリューム (LV)、または物理ボリューム (PV) に適用できます。特定のコマンドの man ページには、VG|Tag
、LV|Tag
、PV|Tag
など、VG、LV、PV 名の代わりにタグ名を使用できる場合の構文が表示されます。
15.2. LVM タグの一覧表示
以下の例は、LVM タグの一覧を表示する方法を示しています。
手順
-
次のコマンドを実行すると、
database
タグを持つ論理ボリュームがすべて一覧表示されます。
# lvs @database
- 現在アクティブなホストタグの一覧を表示するには、次のコマンドを使用します。
# lvm tags
15.3. 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> ...
15.4. LVM オブジェクトからのタグの削除
LVM オブジェクトのグループ化が不要になった場合は、さまざまなボリューム管理コマンドで --deltag
オプションを使用して、オブジェクトからタグを削除できます。
前提条件
-
lvm2
パッケージがインストールされている。 - 物理ボリューム (PV)、ボリュームグループ (VG)、または論理ボリューム (LV) にタグが作成されている。
手順
既存の PV からタグを削除するには、次を使用します。
# pvchange --deltag @tag PV
既存の VG からタグを削除するには、次を使用します。
# vgchange --deltag @tag VG
既存の LV からタグを削除するには、次を使用します。
# lvchange --deltag @tag LV
15.5. LVM ホストタグの定義
この手順では、クラスター設定で LVM ホストタグを定義する方法を説明します。設定ファイルにはホストタグを定義できます。
手順
tags
セクションにhosttags = 1
を設定し、マシンのホスト名を使用してホストタグを自動的に定義します。これにより、すべてのマシンに複製できる共通の設定ファイルを使用して、ファイルのコピーを同じにすることができますが、ホスト名によって動作がマシン間で異なる場合があります。
ホストタグが存在すると、追加の設定ファイル (lvm_hosttag.conf
) が読み込まれます。そのファイルで新しいタグが定義されている場合は、読み込むファイルの一覧に設定ファイルが追加されます。
たとえば、設定ファイル内の次のエントリーは常に tag1
を定義し、ホスト名が host1
の場合は tag2
を定義します。
tags { tag1 { } tag2 { host_list = ["host1"] } }
15.6. タグによる論理ボリュームのアクティブ化の制御
この手順では、設定ファイルで、特定の論理ボリュームのみをそのホストでアクティブにするように指定する方法を説明します。
手順
たとえば、次のエントリーはアクティベーション要求のフィルターとして機能し (vgchange -ay
など)、vg1/lvol0
と、そのホストのメタデータにある database
タグを持つ論理ボリュームまたはボリュームグループのみをアクティベートします。
activation { volume_list = ["vg1/lvol0", "@database" ] }
メタデータタグがマシンのホストタグと一致する場合にのみ一致する特殊な一致 @*
。
別の例として、クラスター内のすべてのマシンに、以下のエントリーがる状況を考慮してください。
tags { hosttags = 1 }
ホストの db2
でのみ vg1/lvol2
をアクティベートする場合は、以下の手順を行います。
-
クラスター内の任意のホストから
lvchange --addtag @db2 vg1/lvol2
を実行します。 -
lvchange -ay vg1/lvol2
を実行します。
このソリューションでは、ボリュームグループのメタデータ内にホスト名を保存します。
第16章 LVM 選択基準
多くの LVM レポートおよび処理コマンドで -S
または --select
オプションを使用して、これらのコマンドの選択基準を定義できます。
- レポートコマンド
選択基準を満たす行のみを表示します。選択基準を定義できるレポートコマンドの例には、
pvs
、vgs
、lvs
、pvdisplay
、vgdisplay
、lvdisplay
、lvm devtypes
、dmsetup info -c
などがあります。選択基準を満たさない行を含むすべての行を表示するには、
-S
オプションに加え、-o selected
オプションを指定します。すべての行が表示され、行が選択基準に一致する場合は1
、一致しない場合は0
を示す "選択済み" 列が追加されます。- コマンドの処理
-
選択基準を満たす項目のみを処理します。選択基準を定義できる処理コマンドの例には、
pvchange
、vgchange
、lvchange
、vgimport
、vgexport
、vgremove
、lvremove
などがあります。
選択基準は、表示または処理する特定のフィールドの有効な値を定義するために比較演算子を使用する一連のステートメントです。選択されたフィールドは、論理演算子とグループ演算子によって順番に結合されます。
選択基準を使用して表示するフィールドを指定する場合は、表示する選択基準に含まれるフィールドは必要ありません。出力にはさまざまなフィールドセットを含めることができますが、選択基準には 1 つのフィールドセットしか含めることができません。
- さまざまな LVM コンポーネントで使用可能なフィールドのリストについては、選択基準フィールド を参照してください。
- 許可される演算子のリストは、選択基準演算子 または lvm(8) の man ページを参照してください。
レポートコマンドの
-S
または--select
オプションにhelp
(または?
) キーワードを指定すると、フィールドの完全なセットと使用可能な演算子を表示することもできます。たとえば、以下のコマンドは lvs コマンド向けのフィールドと使用可能な演算子を表示します。# lvs -S help
-
フィールドタイプが
time
であるフィールドの選択基準として時間値を指定できます。時間値の指定の詳細は、時間値の指定 を参照してください。
16.1. 選択基準フィールドタイプ
選択基準に指定するフィールドは特定のタイプです。各フィールドのヘルプ出力では、フィールドのタイプが括弧内に表示されます。以下のヘルプ出力例は、フィールドタイプ string
、string_list
、number
、percent
、size
、および time
を示す出力を示しています。
lv_name - Name. LVs created for internal use are enclosed in brackets.[string] lv_role - LV role. [string list] raid_mismatch_count - For RAID, number of mismatches found or repaired. [number] copy_percent - For RAID, mirrors and pvmove, current percentage in-sync. [percent] lv_size - Size of LV in current units. [size] lv_time - Creation time of the LV, if known [time]
次の表は、選択基準のフィールドタイプについて説明しています。
表16.1 選択基準フィールドタイプ
フィールドタイプ | 説明 |
---|---|
number | 正の整数値。 |
size |
単位付きの浮動小数点値。指定しない場合はデフォルトで |
percent |
|
string | 引用符 ` または " で囲まれた文字、または引用符で囲まれていない文字。 |
string list | [ ] または { } で囲まれた文字列と "all items must match" または "at least one item must match" 演算子で区切られた要素。 |
フィールドには以下の値を指定できます。
- フィールドタイプの具体的な値。
-
string
フィールドタイプのフィールドを含む正規表現 ("+~" 演算子など)。 - 予約済みの値。たとえば、-1、unknown、undefined、undef は、すべて未定義の数値を示すキーワードです。
- フィールドの値に定義された同意義。元の値のように、値の一連の条件に使用できます。
16.2. 選択基準演算子
次の表は、選択基準のグループ演算子について説明しています。
表16.2 選択基準グループ演算子
グループ演算子 | 説明 |
---|---|
( ) | グループステートメントに使用 |
[ ] | 文字列を文字列リストにグループ化するために使用 (完全一致) |
{ } | 文字列を文字列リストにグループ化するために使用 (サブセット一致) |
次の表は、選択基準の比較演算子と、それらを使用できるフィールドタイプについて説明しています。
表16.3 選択基準比較演算子
比較演算子 | 説明 | フィールドタイプ |
---|---|---|
=~ | 一致する正規表現 | regex |
!~ | 一致しない正規表現 | regex |
= | 等しい | 数字、サイズ、パーセント、文字列、文字列リスト、時間 |
!~ | 等しくない | 数字、サイズ、パーセント、文字列、文字列リスト、時間 |
>= | より大か等しい | 数字、サイズ、パーセント、時間 |
> | より大きい | 数字、サイズ、パーセント、時間 |
<= | より小か等しい | 数字、サイズ、パーセント、時間 |
< | より小さい | 数字、サイズ、パーセント、時間 |
since | 指定された時間以降 (>= と同じ) | time |
after | 指定された時間よりも後 (> と同じ) | time |
until | 指定された時間まで (<= と同じ) | time |
before | 指定された時間よりも前 (< と同じ) | time |
次の表は、選択基準の論理演算子とグループ化演算子について説明しています。
表16.4 選択基準論理演算子およびグループ演算子
論理演算子およびグループ演算子 | 説明 |
---|---|
&& | すべてのフィールドが一致する必要がある |
, | すべてのフィールドが一致する必要がある (&& と同じ) |
|| | 少なくとも 1 つのフィールドが一致する必要がある |
# | 少なくとも 1 つのフィールドが一致する必要がある (|| と同じ) |
! | 論理否定 |
( | 左かっこ (グループ演算子) |
) | 右かっこ (グループ演算子) |
[ | リストの始まり (グループ演算子) |
] | リストの終わり (グループ演算子) |
{ | リストサブセットの始まり (グループ演算子) |
} | リストサブセットの終わり (グループ演算子) |
16.3. 選択基準フィールド
さまざまな論理ボリュームおよび物理ボリュームの選択基準フィールドを選択できます。以下に例を示します。
表16.5 論理ボリュームフィールド
論理ボリュームフィールド | 説明 | フィールドタイプ |
---|---|---|
| 一意の ID | string |
| 名前 (内部使用のために作成された論理ボリュームは、括弧で囲まれます) | string |
| 論理ボリュームグループのフルネーム、つまり VG/LV | string |
| 論理ボリュームの完全なパス名 (内部論理ボリュームの場合は空白) | string |
|
論理ボリューム用の内部デバイスマッパーパス名 ( | string |
| 別の論理ボリュームのコンポーネントである論理ボリュームの場合は、親論理ボリューム | string |
| 論理ボリュームレイアウト | string list |
| 論理ボリュームロール | string list |
| ミラー/RAID イメージで最初の再同期が行われた場合に設定される | number |
| ミラー/RAID イメージが同期された場合に設定される | number |
| スナップショット論理ボリュームが元の論理ボリュームにマージされる場合に設定される | number |
| 論理ボリュームが変換される場合に設定される | number |
| 論理ボリューム割り当てポリシー | string |
| スナップショットマージが失敗した場合に設定される | number |
| スナップショット論理ボリュームが無効な場合に設定される | number |
| アクティブ化のときに論理ボリュームが省略された場合に設定される | number |
| シンプールの場合は、いっぱいになったときの動作 | string |
| 論理ボリュームのアクティブな状態 | string |
| 永続的なメジャー番号または -+ (永続的でない場合) | number |
| 永続的なマイナー番号または -+ (永続的でない場合) | number |
| 現在の単位の先読み設定 | size |
| 現在の単位の論理ボリュームのサイズ | size |
| シンプールおよびキャッシュプールの場合は、メタデータを保持する論理ボリュームのサイズ | size |
| 論理ボリューム内のセグメント数 | number |
| スナップショットとシンの場合、この論理ボリュームの元のデバイス | size |
| スナップショットとシンの場合、この LV の元のデバイスの UUID。 | string |
| スナップショットの場合は、この論理ボリュームの元のデバイスのサイズ | size |
| スナップショットおよびシンプールとボリュームの場合は、使用領域の割合 (論理ボリュームがアクティブなとき) | percent |
| スナップショットの場合は、使用領域の割合 (論理ボリュームがアクティブなとき) | percent |
| キャッシュおよびシンプールの場合、論理ボリュームがアクティブな場合に満杯になったメタデータの割合 | percent |
|
キャッシュ、RAID、ミラー、および | percent |
|
キャッシュ、RAID、ミラー、および | percent |
| RAID の場合は、検出または修復された不一致の数 | number |
| RAID の場合は、実行中の現在の同期アクション | string |
| RAID1 の場合、ほとんどのデバイスに書き込みが許可される未処理の書き込みの数 | number |
| RAID1 の場合は、最小リカバリー I/O ロード (kiB/sec/disk 単位) | number |
| RAID1 の場合は、最大リカバリー I/O ロード (kiB/sec/disk 単位) | number |
| インテグリティーモード | string |
| インテグリティーブロックのサイズ | number |
| インテグリティー不一致の数 | number |
| シンプールの場合、カーネルでの破棄の処理方法 | string |
|
| string |
| シンプールおよびキャッシュプールの場合は、関連データを保持する論理ボリューム | string |
| シンプールおよびキャッシュプールの場合は、関連メタデータを保持する論理ボリューム | string |
| シンボリュームの場合は、このボリュームのシンプール論理ボリューム | string |
| タグ (存在する場合) | string list |
| この論理ボリュームに割り当てられた設定プロファイル | string |
表16.6 論理ボリュームデバイスの情報とステータスを組み合わせたフィールド
論理ボリュームフィールド | 説明 | フィールドタイプ |
---|---|---|
| 論理ボリュームデバイス情報と論理ボリュームステータスの両方に基づいて選択します。 | string |
表16.7 論理ボリュームデバイス情報フィールド
論理ボリュームフィールド | 説明 | フィールドタイプ |
---|---|---|
| 現在割り当てられているメジャー番号または -1 (論理ボリュームがアクティブでない場合) | number |
| 現在割り当てられているマイナー番号または -1 (論理ボリュームがアクティブでない場合) | number |
| 論理ボリュームが一時停止している場合に設定される | number |
| 論理ボリュームデバイスがオープンな場合に設定される | number |
表16.8 論理ボリュームデバイスステータスフィールド
論理ボリュームフィールド | 説明 | フィールドタイプ |
---|---|---|
| キャッシュブロック合計数 | number |
| 使用済みキャッシュブロック数 | number |
| ダーティーキャッシュブロック数 | number |
| キャッシュ読み取りヒット数 | number |
| キャッシュ読み取りミス数 | number |
| キャッシュ書き込みヒット数 | number |
| キャッシュ書き込みミス数 | number |
| ライトキャッシュのブロックサイズ | number |
| ライトキャッシュブロックの合計 | number |
| ライトキャッシュの空きブロックの合計 | number |
| ライトキャッシュライトバックブロックの合計 | number |
| 論理ボリューム正常性状態 | string |
表16.9 物理ボリュームラベルフィールド
物理ボリュームフィールド | 説明 | フィールドタイプ |
---|---|---|
| 一意の ID | string |
| 基礎となるデバイスのサイズ (現在の単位) | size |
| 名前 | string |
| デバイスのメジャー番号 | number |
| デバイスのマイナー番号 | number |
| このデバイスの空きメタデータ領域 (現在の単位) | size |
| このデバイスの最小メタデータ領域のサイズ (現在の単位) | size |
表16.10 物理ボリュームフィールド
物理ボリュームフィールド | 説明 | フィールドタイプ |
---|---|---|
| 基礎となるデバイスのデータの始まりに対するオフセット | number |
| 物理ボリュームのサイズ (現在の単位) | size |
| 未割り当て領域の合計サイズ (現在の単位) | size |
| 割り当て済み領域の合計サイズ (現在の単位) | size |
| さまざまな属性 | string |
| このデバイスがシステムで不明な場合に設定される | number |
| 物理エクステントの合計数 | number |
| 割り当て済み物理エクステントの合計数 | number |
| タグ (存在する場合) | string list |
| このデバイスのメタデータ領域の数 | number |
| このデバイスの使用中メタデータ領域の数 | number |
| WWID などのデバイス ID | number |
| WWID などのデバイス ID のタイプ | string |
表16.11 ボリュームグループフィールド
ボリュームグループフィールド | 説明 | フィールドタイプ |
---|---|---|
| 一意の ID | string |
| 名前 | string |
| さまざまな属性 | string |
| ボリュームグループがエクスポートされる場合に設定される | number |
| VG 自動アクティベーションが有効な場合に設定される | number |
| ボリュームグループが部分的である場合に設定される | number |
| VG を共有する場合に設定される | number |
| ボリュームグループの合計サイズ (現在の単位) | size |
| 空き領域の合計サイズ (現在の単位) | size |
| ボリュームグループのシステム ID (所有しているホストを示す) | string |
| 物理エクステントのサイズ (現在の単位) | size |
| 物理エクステントの合計数 | number |
| 未割り当て物理エクステントの合計数 | number |
| VG 内の欠落している PV の数 | number |
| 変更されるたびに増加する内部メタデータのリビジョン番号 | number |
| タグ (存在する場合) | string list |
| このボリュームグループに割り当てられた設定プロファイル | string |
| このボリュームグループのメタデータ領域の数 | number |
| このボリュームグループの使用中メタデータ領域の数 | number |
| このボリュームグループの空きメタデータ領域 (現在の単位) | size |
| このボリュームグループの最小メタデータ領域のサイズ (現在の単位) | size |
| ボリュームグループの使用中メタデータ領域のターゲット数 | number |
表16.12 論理ボリュームセグメントフィールド
論理ボリュームセグメントフィールド | 説明 | フィールドタイプ |
---|---|---|
| 論理ボリュームセグメントのタイプ | string |
| ストライプまたはミラーレッグの数 | number |
| データストライプまたはミラー/raid1 レッグの数 | number |
| ストライプの場合は、次のデバイスに切り替わる前の該当するデバイスに配置されたデータのサイズ | size |
| ミラーの場合は、デバイスを同期するときにコピーされたデータの単位 | size |
| スナップショットの場合は、変更を追跡するときに使用されたデータの単位 | size |
| シンプールの場合は、このプール内のシンボリュームの数 | number |
| シンプールの場合は、破棄が処理される方法 | string |
| キャッシュプールの場合は、書き込みがキャッシュされる方法 | string |
| シンプールの場合は、ゼロ化が有効なとき | number |
| シンプールの場合は、トランザクション ID | number |
| シンボリュームの場合は、シンデバイス ID | number |
| 開始エクステント番号で使用されている基礎となるデバイス | string |
|
セグメントの | string |
| キャッシュポリシー (キャッシュされたセグメントのみ) | string |
| キャッシュ設定またはパラメーター (キャッシュされたセグメントのみ) | string list |
表16.13 物理ボリュームセグメントフィールド
物理ボリュームセグメントフィールド | 説明 | フィールドタイプ |
---|---|---|
| セグメントの始まりの物理エクステント番号 | number |
| セグメントのエクステントの数 | number |
フィールド値には、次の表にリストされている同意語を使用できます。これらの同意語は、選択基準と元の値と同様な値で使用できます。この表では、""
のフィールド値は、空の文字列を示し、-S 'field_name=""'
と指定することにより一致させることができます。
この表では、0
または 1
で示されたフィールドは、バイナリー値を示します。レポートツールに --binary
オプションを指定し、バイナリーフィールドにおいて、この表で "some text" または "" と示されているものの代わりに 0 または 1 を表示させることができます。
表16.14 選択基準の同意義
フィールド | フィールド値 | 同意義 |
| allocatable | 1 |
| "" | 0 |
| exported | 1 |
| "" | 0 |
| なし | 1 |
| "" | 0 |
| extendable | 1 |
| "" | 0 |
| exported | 1 |
| "" | 0 |
| partial | 1 |
| "" | 0 |
| clustered | 1 |
| "" | 0 |
| writable | rw、read-write |
| read-only | r、ro |
| unmanaged | unknown、undefined、undef、-1 |
| initial image sync | sync、1 |
| "" | 0 |
| image synced | synced、1 |
| "" | 0 |
| merging | 1 |
| "" | 0 |
| converting | 1 |
| "" | 0 |
| allocation locked | locked、1 |
| "" | 0 |
| fixed minor | fixed、1 |
| "" | 0 |
| active locally | active、locally、1 |
| "" | 0 |
| active remotely | active、remotely、1 |
| "" | 0 |
| active exclusively | active、exclusively、1 |
| "" | 0 |
| merge failed | failed、1 |
| "" | 0 |
| snapshot invalid | invalid、1 |
| "" | 0 |
| suspended | 1 |
| "" | 0 |
| live table present | live table、live、1 |
| "" | 0 |
| inactive table present | inactive table、inactive、1 |
| "" | 0 |
| open | 1 |
| "" | 0 |
| skip activation | skip、1 |
| "" | 0 |
| zero | 1 |
| "" | 0 |
| writable | rw、read-write |
| read-only | r、ro |
| read-only-override | ro-override、r-override、R |
| error | error when full、error if no space |
| queue | queue when full、queue if no space |
| "" | undefined |
| "" | undefined |
| "" | undefined |
| "" | undefined |
16.4. 時間値の指定
LVM 選択の時間値を指定する場合、標準的な時間選択形式 セクションと 時間指定形式 セクションで説明されているように、標準化された時間指定形式またはより自由形式の指定を使用できます。
/etc/lvm/lvm.conf
設定ファイルの report/time format
設定オプションを使用して、時間値の表示方法を指定できます。このオプションの指定に関する情報は、lvm.conf ファイルで提供されています。時間値を指定する場合は、比較演算子エイリアス since
、after
、until
、および before
を使用できます。
16.4.1. 標準的な時間選択形式
LVM 選択の時間値は、以下の形式で指定できます。
date time timezone
表16.15 時間指定形式
フィールド | フィールド値 |
---|---|
date | YYYY-MM-DD |
YYYY-MM、デフォルトは DD=1 | |
YYYY、デフォルトは MM=01 および DD=01 | |
time | hh:mm:ss |
hh:mm、デフォルトは ss=0 | |
hh、デフォルトは mm=0、デフォルトは ss=0 | |
timezone (常に + または - 記号が使用される) | +hh:mm または -hh:mm |
+hh または -hh |
完全な日付/時間指定は YYYY-MM-DD hh:mm:ss
です。ユーザーは日付/時間部分を右から左の順序で省略できます。これらの部分が省略されると、秒単位で範囲が自動的に計算されます。以下に例を示します。
- "2015-07-07 9:51" は、"2015-07-07 9:51:00"〜"2015-07-07 9:51:59" の範囲を意味します。
- "2015-07" は "2015-07-01 0:00:00"〜"2015-07-31 23:59:59" の範囲を意味します。
- "2015" は "2015-01-01 0:00:00"〜"2015-12-31 23:59:59" の範囲を意味します。
以下の例は、選択基準で使用される日付/時間指定を示しています。
lvs -S 'time since "2015-07-07 9:51"' lvs -S 'time = "2015-07"" lvs -S 'time = "2015"'
16.4.2. 自由な形式の時間選択形式
LVM 選択基準の日付/時間仕様は、以下の項目を使用して指定できます。
- 平日の名前 ("Sunday"〜"Saturday" または省略した "Sun"〜"Sat")
- 特定の時間のラベル ("noon"、"midnight")
- 現在の日に相対する日のラベル ("today"、"yesterday")
- 今日からの相対的なオフセット値を使用した特定の時間 (N は数字)
- ( "N" "seconds"/"minutes"/"hours"/"days"/"weeks"/"years" "ago")
- ( "N" "secs"/"mins"/"hrs" … "ago")
- ( "N" "s"/"m"/"h" … "ago")
- hh:mm:ss 形式または AM/PM 接尾辞を使用した時間形式
- 月の名前 ("January"〜"December" または省略した "Jan"〜"Dec")
以下の例は、選択基準で使用される freeform
日付/時間指定を示しています。
lvs -S 'time since "yesterday 9AM"' lvs -S 'time since "Feb 3 years 2 months ago"' lvs -S 'time = "February 2015"' lvs -S 'time since "Jan 15 2015" && time until yesterday' lvs -S 'time since "today 6AM"'
16.5. 選択基準表示の例
このセクションの一連の例では、LVM 表示コマンドの選択基準を使用する方法を示します。このセクションの例では、選択基準が使用されていない場合に以下の出力を提供する LVM ボリュームが設定されたシステムを使用します。
# lvs -a -o+layout,role
LV VG Attr LSize Pool Origin Data% Meta% Layout Role
root f1 -wi-ao---- 9.01g linear public
swap f1 -wi-ao---- 512.00m linear public
[lvol0_pmspare] vg ewi------- 4.00m linear private, \
pool,spare
lvol1 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public
lvol2 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public, \
origin, \
thinorigin
lvol3 vg Vwi---tz-k 1.00g pool lvol2 thin,sparse public, \
snapshot, \
thinsnapshot
pool vg twi-aotz-- 100.00m 0.00 1.07 thin,pool private
[pool_tdata] vg Twi-ao---- 100.00m linear private, \
thin,pool, \
data
[pool_tmeta] vg ewi-ao---- 4.00m linear private, \
thin,pool, \
metadata
以下のコマンドは、正規表現を使用してこれを指定し、名前に lvol[13]
が含まれるすべての論理ボリュームを表示します。
# lvs -a -o+layout,role -S 'lv_name=~lvol[13]'
LV VG Attr LSize Pool Origin Data% Layout Role
lvol1 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public
lvol3 vg Vwi---tz-k 1.00g pool lvol2 thin,sparse public,snapshot,thinsnapshot
以下のコマンドは、サイズが 500 メガバイトを超えるすべての論理ボリュームを表示します。
# lvs -a -o+layout,role -S 'lv_size>500m'
LV VG Attr LSize Pool Origin Data% Layout Role
root f1 -wi-ao---- 9.01g linear public
swap f1 -wi-ao---- 512.00m linear public
lvol1 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public
lvol2 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public,origin,thinorigin
lvol3 vg Vwi---tz-k 1.00g pool lvol2 thin,sparse public,snapshot, \
thinsnapshot
以下のコマンドは、論理ボリュームロールとして thin
を含むすべての論理ボリュームを表示します (シンプールの構築で論理ボリュームが使用されたことを示しています)。この例では、表示でのサブセットを示すためにかっこ ({}) を使用します。
# lvs -a -o+layout,role -S 'lv_role={thin}'
LV VG Attr LSize Layout Role
[pool_tdata] vg Twi-ao---- 100.00m linear private,thin,pool,data
[pool_tmeta] vg ewi-ao---- 4.00m linear private,thin,pool,metadata
以下のコマンドは、使用可能なすべての最上位論理ボリューム (ロールが public
の論理ボリューム) を表示します。サブセットを示すために文字列リストでかっこ ({}) を指定しない場合は、デフォルトで指定されたものと見なされます。lv_role=public
を指定することは lv_role={public}
を指定することと同じです。
# lvs -a -o+layout,role -S 'lv_role=public'
LV VG Attr LSize Pool Origin Data% Layout Role
root f1 -wi-ao---- 9.01g linear public
swap f1 -wi-ao---- 512.00m linear public
lvol1 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public
lvol2 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public,origin,thinorigin
lvol3 vg Vwi---tz-k 1.00g pool lvol2 thin,sparse public,snapshot,thinsnapshot
以下のコマンドは、シンレイアウトとともにすべての論理ボリュームを表示します。
# lvs -a -o+layout,role -S 'lv_layout={thin}'
LV VG Attr LSize Pool Origin Data% Meta% Layout Role
lvol1 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public
lvol2 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public,origin, \
thinorigin
lvol3 vg Vwi---tz-k 1.00g pool lvol2 thin,sparse public,snapshot, \
thinsnapshot
pool vg twi-aotz-- 100.00m 0.00 1.07 thin,pool private
以下のコマンドは、sparse,thin
に完全一致するレイアウトフィールドを持つすべての論理ボリュームを表示します。一致候補を検出するには文字列リストメンバーを指定する必要がないことに注意してください。
# lvs -a -o+layout,role -S 'lv_layout=[sparse,thin]'
LV VG Attr LSize Pool Origin Data% Layout Role
lvol1 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public
lvol2 vg Vwi-a-tz-- 1.00g pool 0.00 thin,sparse public,origin,thinorigin
lvol3 vg Vwi---tz-k 1.00g pool lvol2 thin,sparse public,snapshot,thinsnapshot
以下のコマンドはシンおよびスパース論理ボリュームである論理ボリュームの論理ボリューム名を表示します。選択基準に使用されるフィールドのリストは表示するフィールドのリストと同じである必要がないことに注意してください。
# lvs -a -o lv_name -S 'lv_layout=[sparse,thin]'
LV
lvol1
lvol2
lvol3
16.6. 選択基準処理の例
次の一連の例は、LVM 論理ボリュームを処理するコマンドで選択基準を使用する方法を示しています。
この例は、シンスナップショットを含む論理ボリュームのグループの初期設定を示しています。シンスナップショットには skip_activation
フラグがデフォルトで設定されています。また、この例には、同様に skip_activation
フラグが設定された論理ボリューム lvol4
も含まれます。
# lvs -o name,skip_activation,layout,role
LV SkipAct Layout Role
root linear public
swap linear public
lvol1 thin,sparse public
lvol2 thin,sparse public,origin,thinorigin
lvol3 skip activation thin,sparse public,snapshot,thinsnapshot
lvol4 skip activation linear public
pool thin,pool private
以下のコマンドは、シンスナップショットであるすべての論理ボリュームから skip_activation
フラグを削除します。
# lvchange --setactivationskip n -S 'role=thinsnapshot'
Logical volume "lvol3" changed.
以下のコマンドは、lvchange
コマンドの実行後に論理ボリュームの設定を表示します。skip_activation
フラグは、シンスナップショットではない論理ボリュームから設定解除されていないことに注意してください。
# lvs -o name,active,skip_activation,layout,role
LV Active SkipAct Layout Role
root active linear public
swap active linear public
lvol1 active thin,sparse public
lvol2 active thin,sparse public,origin,thinorigin
lvol3 thin,sparse public,snapshot,thinsnapshot
lvol4 active skip activation linear public
pool active thin,pool private
以下のコマンドは、追加のシン作成元/スナップショットボリュームが作成されたあとに論理ボリュームの設定を表示します。
# lvs -o name,active,skip_activation,origin,layout,role
LV Active SkipAct Origin Layout Role
root active linear public
swap active linear public
lvol1 active thin,sparse public
lvol2 active thin,sparse public,origin,thinorigin
lvol3 lvol2 thin,sparse public,snapshot,thinsnapshot
lvol4 active skip activation linear public
lvol5 active thin,sparse public,origin,thinorigin
lvol6 lvol5 thin,sparse public,snapshot,thinsnapshot
pool active thin,pool private
以下のコマンドは、シンスナップショットボリュームであり、作成元ボリュームが lvol2
の論理ボリュームをアクティブ化します。
# lvchange -ay -S 'lv_role=thinsnapshot && origin=lvol2' # lvs -o name,active,skip_activation,origin,layout,role LV Active SkipAct Origin Layout Role root active linear public swap active linear public lvol1 active thin,sparse public lvol2 active thin,sparse public,origin,thinorigin lvol3 active lvol2 thin,sparse public,snapshot,thinsnapshot lvol4 active skip activation linear public lvol5 active thin,sparse public,origin,thinorigin lvol6 lvol5 thin,sparse public,snapshot,thinsnapshot pool active thin,pool private
アイテム全体から 1 つのアイテムに一致する選択基準を指定するときにアイテム全体に対してコマンドを実行する場合は、アイテム全体が処理されます。たとえば、ボリュームグループから 1 つまたは複数のアイテムを選択するときにボリュームグループを変更する場合、ボリュームグループ全体が選択されます。この例では、ボリュームグループ vg
の一部である論理ボリューム lvol1
が選択されます。また、ボリュームグループ vg
内のすべての論理ボリュームが処理されます。
# lvs -o name,vg_name LV VG root fedora swap fedora lvol1 vg lvol2 vg lvol3 vg lvol4 vg lvol5 vg lvol6 vg pool vg # vgchange -ay -S 'lv_name=lvol1' 7 logical volume(s) in volume group "vg" now active
以下の例は、より複雑な選択基準ステートメントを示しています。この例では、すべての論理ボリュームに元のロールがあり、名前が lvol[456]
であるか、論理ボリュームのサイズが 5 GB を超える場合、すべての論理ボリュームに mytag
のタグが付けられます。
# lvchange --addtag mytag -S '(role=origin && lv_name=~lvol[456]) || lv_size > 5g'
Logical volume "root" changed.
Logical volume "lvol5" changed.
第17章 LVM のトラブルシューティング
論理ボリュームマネージャー (LVM) ツールを使用して、LVM ボリュームおよびグループのさまざまな問題のトラブルシューティングを行うことができます。
17.1. LVM での診断データの収集
LVM コマンドが想定どおりに機能しない場合は、以下の方法で診断情報を収集できます。
手順
以下の方法を使用して、さまざまな診断データを収集します。
-
-v
引数を LVM コマンドに追加して、コマンドの出力の詳細レベルを増やします。v
を追加すると、詳細度をさらに増やすことができます。v
は最大 4 つ許可されます (例:-vvvv
)。 -
/etc/lvm/lvm.conf
設定ファイルのlog
セクションで、level
オプションの値を増やします。これにより、LVM がシステムログにより多くの情報を提供します。 問題が論理ボリュームのアクティブ化に関連する場合は、アクティブ化中に LVM がログメッセージをログに記録できるようにします。
-
/etc/lvm/lvm.conf
設定ファイルのlog
セクションでactivation = 1
オプションを設定します。 -
LVM コマンドに
-vvvv
オプションを付けて実行します。 - コマンドの出力を確認します。
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 ページ
17.2. 障害が発生した LVM デバイスに関する情報の表示
障害が発生した論理ボリュームマネージャー (LVM) ボリュームに関するトラブルシューティング情報は、障害の原因を特定するのに役立ちます。最も一般的な LVM ボリューム障害の例を以下に示します。
例17.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)
例17.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)
例17.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)
17.3. ボリュームグループから見つからない LVM 物理ボリュームの削除
物理ボリュームに障害が発生した場合は、ボリュームグループ内の残りの物理ボリュームをアクティブにし、その物理ボリュームを使用していたすべての論理ボリュームをボリュームグループから削除できます。
手順
ボリュームグループ内の残りの物理ボリュームをアクティベートします。
# vgchange --activate y --partial myvg
削除する論理ボリュームを確認します。
# vgreduce --removemissing --test myvg
ボリュームグループから、失われた物理ボリュームを使用していた論理ボリュームをすべて削除します。
# vgreduce --removemissing --force myvg
必要に応じて、保持する論理ボリュームを誤って削除した場合には、
vgreduce
操作を元に戻すことができます。# vgcfgrestore myvg
警告シンプールを削除すると、LVM は操作を元に戻すことができません。
17.4. 見つからない LVM 物理ボリュームのメタデータの検索
物理ボリュームのボリュームグループメタデータ領域が誤って上書きされたり、破棄されたりする場合は、メタデータ領域が正しくないことを示すエラーメッセージか、システムが特定の UUID を持つ物理ボリュームを見つけることができないことを示すエラーメッセージが表示されます。
この手順では、物理ボリュームが見つからないか、破損している、アーカイブされた最新のメタデータを見つけます。
手順
物理ボリュームを含むボリュームグループのアーカイブされたメタデータファイルを検索します。アーカイブされたメタデータファイルは、
/etc/lvm/archive/volume-group-name_backup-number.vg
パスにあります。# cat /etc/lvm/archive/myvg_00000-1248998876.vg
00000-1248998876 を backup-number に置き換えます。ボリュームグループの番号が最も高い、既知の有効なメタデータファイルの最後のものを選択します。
物理ボリュームの 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
17.5. LVM 物理ボリュームでのメタデータの復元
この手順では、破損したり、新しいデバイスに置き換えたりする物理ボリュームのメタデータを復元します。物理ボリュームのメタデータ領域を書き換えて、物理ボリュームからデータを復旧できる場合があります。
作業用の LVM 論理ボリュームでこの手順を実行しないでください。誤った UUID を指定すると、データが失われることになります。
前提条件
- 見つからない物理ボリュームのメタデータを特定している。詳細は、見つからない LVM 物理ボリュームのメタデータの検索 を参照してください。
手順
物理ボリュームでメタデータを復元します。
# pvcreate --uuid physical-volume-uuid \ --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \ block-device
注記コマンドは、LVM メタデータ領域のみを上書きし、既存のデータ領域には影響を与えません。
例17.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
-
ボリュームグループのメタデータを復元します。
# vgcfgrestore myvg Restored volume group myvg
ボリュームグループの論理ボリュームを表示します。
# 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)
論理ボリュームのセグメントタイプが RAID の場合は、論理ボリュームを再同期します。
# lvchange --resync myvg/mylv
論理ボリュームを非アクティブにします。
# lvchange --activate y myvg/mylv
-
ディスク上の 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)
17.6. LVM 出力の丸めエラー
ボリュームグループの領域使用量を報告する LVM コマンドは、報告された数を 2
進法に切り上げ、人間が判読できる出力を提供します。これには、vgdisplay
ユーティリティーおよび vgs
ユーティリティーが含まれます。
丸めの結果、報告された空き領域の値は、ボリュームグループが提供する物理エクステントよりも大きくなる可能性があります。報告された空き領域のサイズの論理ボリュームを作成しようとすると、以下のエラーが発生する可能性があります。
Insufficient free extents
エラーを回避するには、ボリュームグループの空き物理エクステントの数を調べる必要があります。これは、空き領域の正確な値です。次に、エクステントの数を使用して、論理ボリュームを正常に作成できます。
17.7. LVM ボリューム作成時の丸めエラーの防止
LVM 論理ボリュームを作成する場合は、丸めエラーを防ぐために論理ボリュームの論理エクステントの数を指定できます。
手順
ボリュームグループの空き物理エクステントの数を検索します。
# vgdisplay myvg
例17.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
論理ボリュームを作成します。ボリュームサイズをバイトではなくエクステントに入力します。
例17.6 エクステントの数を指定して論理ボリュームを作成
# lvcreate --extents 8780 --name mylv myvg
例17.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
17.8. LVM RAID のトラブルシューティング
LVM RAID デバイスのさまざまな問題のトラブルシューティングを実行して、データエラーの修正、デバイスの復旧、障害が発生したデバイスの置き換えを行うことができます。
17.8.1. RAID 論理ボリュームでのデータ整合性の確認 (RAID スクラビング)
LVM は、RAID 論理ボリュームのスクラビングに対応します。RAID スクラビングは、アレイ内のデータおよびパリティーブロックをすべて読み込み、それが一貫しているかどうかを確認するプロセスです。
手順
オプション: スクラビングプロセスが使用する I/O 帯域幅を制限します。
RAID スクラビング操作を実行する際に、
sync
操作で必要になるバックグラウンド I/O は、その他の I/O (ボリュームグループメタデータへの更新など) を LVM デバイスに押し出す可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。リカバリースロットルを実装してスクラビング操作のレートを制御できます。次の手順で、
lvchange --syncaction
コマンドに以下のオプションを追加します。--maxrecoveryrate Rate[bBsSkKmMgG]
- 操作が通常の I/O 操作に押し出すように、最大復旧速度を設定します。復旧速度を 0 に設定すると、操作がバインド解除されることを意味します。
--minrecoveryrate Rate[bBsSkKmMgG]
-
最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、
sync
操作の I/O が最小スループットを達成できるようにします。
Rate 値は、アレイ内の各デバイスに対する 1 秒あたりのデータ通信量を指定します。接尾辞を指定しないと、オプションはデバイスごとの 1 秒あたらりの kiB を想定します。
アレイ内の不一致数を修復せずに、アレイ内の不一致の数を表示します。
# lvchange --syncaction check vg/raid_lv
アレイ内の不一致を修正します。
# lvchange --syncaction repair vg/raid_lv
注記lvchange --syncaction repair
操作は、lvconvert --repair
操作と同じ機能を実行しません。-
lvchange --syncaction repair
操作は、アレイでバックグラウンドの同期操作を開始します。 -
lvconvert --repair
操作は、ミラーまたは RAID 論理ボリュームの障害が発生したデバイスを修復するか、または置き換えます。
-
オプション: スクラビング操作に関する情報を表示します。
# lvs -o +raid_sync_action,raid_mismatch_count vg/lv
raid_sync_action
フィールドは、RAID ボリュームが現在実行している同期操作を表示します。これには、以下のいずれかの値を使用できます。idle
- すべての同期操作が完了している (何も実行していません)。
resync
- アレイを初期化、またはマシン障害後の復旧を実行する。
recover
- アレイ内のデバイスを置き換える。
check
- アレイの不一致を検索する。
repair
- 不一致を検索し、修復する。
-
raid_mismatch_count
フィールドは、check
操作時に検出された不一致の数を表示します。 -
Cpy%Sync
フィールドは、sync
操作の進捗を表示します。 lv_attr
フィールドは、追加のインジケーターを提供します。このフィールドのビット 9 は、論理ボリュームの正常性を示し、以下のインジケーターに対応しています。-
(
m
) (不一致) は、RAID 論理ボリュームに不一致があることを示します。この文字は、スクラビング操作で RAID に一貫性がない部分があることを検出した後に表示されます。 -
(
r
) (更新) は、LVM がデバイスラベルを読み取り、デバイスを稼働できると認識した場合でも、RAID アレイのデバイスに障害が発生し、カーネルがこれを障害と認識していることを示します。デバイスが利用可能になったことをカーネルに通知するように論理ボリュームを更新するか、デバイスに障害が発生したと思われる場合はデバイスを交換します。
-
(
関連情報
-
詳細は、
lvchange(8)
およびlvmraid(7)
の man ページを参照してください。
17.8.2. LVM RAID のデバイスに障害が発生しました。
RAID は従来の LVM ミラーリングとは異なります。LVM ミラーリングでは、障害が発生したデバイスを削除する必要がありました。削除しないと、ミラー化論理ボリュームがハングします。RAID アレイは、障害があるデバイスがあっても稼働し続けることができます。RAID1 以外の RAID タイプでデバイスを削除すると、レベルが低い RAID に変換されます (たとえば、RAID6 から RAID5、もしくは RAID4 または RAID5 から RAID0)。
そのため、障害のあるデバイスを無条件に削除してから交換するのではなく、lvconvert
コマンドで --repair
引数を使用して、RAID ボリュームのデバイスを 1 回で置き換えることができます。
17.8.3. 論理ボリュームの障害が発生した RAID デバイスの交換
LVM RAID デバイス障害が一時的な障害であったり、障害が発生したデバイスの修復が可能な場合は、障害が発生したデバイスの復旧を開始できます。
前提条件
- 以前に不具合を起こしたデバイスが機能するようになりました。
手順
RAID デバイスが含まれる論理ボリュームを更新します。
# lvchange --refresh my_vg/my_lv
検証手順
復元されたデバイスで論理ボリュームを調べます。
# lvs --all --options name,devices,lv_attr,lv_health_status my_vg
17.8.4. 論理ボリュームに障害が発生した RAID デバイスの交換
この手順では、LVM RAID 論理ボリュームで物理ボリュームとして機能する障害のあるデバイスを置き換えます。
前提条件
ボリュームグループには、障害が発生したデバイスを置き換えるのに十分な空き容量を提供する物理ボリュームが含まれています。
ボリュームグループに十分な空きエクステントがある物理ボリュームがない場合は、
vgextend
ユーティリティーを使用して、十分なサイズの物理ボリュームを新たに追加します。
手順
以下の例では、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)
/dev/sdc
デバイスに障害が発生した場合、lvs
コマンドの出力は以下のようになります。# 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)
障害が発生したデバイスを交換して、論理ボリュームを表示します。
# 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.
(必要に応じて) 障害が発生したデバイスを交換する物理ボリュームを手動で指定するには、コマンドの最後に物理ボリュームを追加します。
# lvconvert --repair my_vg/my_lv replacement_pv
代替の論理ボリュームを調べます。
# 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 ユーティリティーは、障害が発生したデバイスが見つけられないことを示しています。
障害が発生したデバイスをボリュームグループから削除します。
# vgreduce --removemissing VG
17.9. マルチパス化された 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 が警告を表示する理由を理解し、または警告を非表示にできます。
17.9.1. 重複した PV 警告の原因
Device Mapper Multipath (DM Multipath)、EMC PowerPath、または Hitachi Dynamic Link Manager (HDLM) などのマルチパスソフトウェアがシステム上のストレージデバイスを管理すると、特定の論理ユニット (LUN) への各パスが異なる SCSI デバイスとして登録されます。
マルチパスソフトウェアは、各パスにマップする新しいデバイスを作成します。各 LUN には、同じ基礎となるデータを参照する /dev
ディレクトリーに複数のデバイスノードがあるため、すべてのデバイスノードには同じ LVM メタデータが含まれます。
表17.1 異なるマルチパスソフトウェアでのデバイスマッピングの例
マルチパスソフトウェア | LUN への SCSI パス | マルチパスデバイスパスへのマッピング |
---|---|---|
DM Multipath |
|
|
EMC PowerPath |
| |
HDLM |
|
複数のデバイスノードが原因で、LVM ツールは同じメタデータを複数回検出し、複製として報告します。
17.9.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 テクニカルサポートにお問い合わせください。
17.9.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|.*|" ]
関連情報