4.2. 論理ボリュームの作成
LVM は、物理レイヤーを論理ボリュームに抽象化し、ニーズに応じて作成および調整することで、ディスクストレージを柔軟な方法で処理します。
4.2.1. リニア (シック) 論理ボリュームの作成
リニア論理ボリューム (LV) を使用すると、複数の物理ストレージユニットを 1 つの仮想ストレージ領域に結合できます。リニア LV は、データ要件に合わせて、簡単に拡張または縮小できます。
前提条件
- 管理アクセスがある。
-
lvm2
パッケージがインストールされている。 - ボリュームグループが作成されている。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
ボリュームグループの名前とサイズをリスト表示します。
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
リニア LV を作成します。
# lvcreate --name LogicalVolumeName --size VolumeSize VolumeGroupName
LogicalVolumeName は、LV の名前に置き換えます。VolumeSize は、LV のサイズに置き換えます。サイズの接尾辞が指定されていない場合、このコマンドではデフォルトで MB が使用されます。VolumeGroupName は、ボリュームグループの名前に置き換えます。
検証
リニア LV が作成されたことを確認します。
# lvs -o lv_name,seg_type LV Type LogicalVolumeName linear
関連情報
-
vgs(8)
、lvs(8)
、lvcreate(8)
man ページ
4.2.2. storage
RHEL システムロールを使用して論理ボリュームを作成またはサイズ変更する
storage
ロールを使用して、次のタスクを実行します。
- 多数のディスクで構成されるボリュームグループに LVM 論理ボリュームを作成する
- LVM 上の既存のファイルシステムのサイズを変更する
- LVM ボリュームのサイズをプールの合計サイズのパーセンテージで表す
ボリュームグループが存在しない場合、このロールによって作成されます。ボリュームグループ内に論理ボリュームが存在する場合に、そのサイズが Playbook で指定されたサイズと一致しないと、サイズが変更されます。
論理ボリュームを縮小する場合、データの損失を防ぐために、その論理ボリューム上のファイルシステムによって、縮小する論理ボリューム内の領域が使用されていないことを確認する必要があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Manage local storage hosts: managed-node-01.example.com tasks: - name: Create logical volume ansible.builtin.include_role: name: rhel-system-roles.storage vars: storage_pools: - name: myvg disks: - sda - sdb - sdc volumes: - name: mylv size: 2G fs_type: ext4 mount_point: /mnt/data
サンプル Playbook で指定されている設定は次のとおりです。
size: <size>
- 単位 (GiB など) またはパーセンテージ (60% など) を使用してサイズを指定する必要があります。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
指定したボリュームが作成されたこと、または要求したサイズに変更されたことを確認します。
# ansible managed-node-01.example.com -m command -a 'lvs myvg'
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル -
/usr/share/doc/rhel-system-roles/storage/
ディレクトリー
4.2.3. ストライプ化論理ボリュームの作成
ストライプ化論理ボリューム (LV) を使用すると、複数の物理ボリューム (PV) にデータを分散できます。そのため、複数のディスクの帯域幅を同時に利用して、読み取りおよび書き込み速度を向上できます。
ストライプ化 LV を作成するときは、ストライプの数とサイズを考慮することが重要です。ストライプの数は、データが分散される PV の数です。ストライプの数を増やすと、複数のディスクを同時に利用してパフォーマンスを向上できます。ストライプのサイズは、次のディスクに移動するまでにストライプセット内の各ディスクに書き込まれるデータチャンクのサイズであり、キロバイト (KB) 単位で指定されます。最適なストライプのサイズは、ワークロードとファイルシステムのブロックサイズによって異なります。デフォルトは 64KB ですが、調整可能です。
前提条件
- 管理アクセスがある。
手順
ボリュームグループの名前とサイズをリスト表示します。
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
ストライプ化 LV を作成します。
# lvcreate --stripes NumberOfStripes --stripesize StripeSize --size LogicalVolumeSize --name LogicalVolumeName VolumeGroupName
NumberOfStripes は、ストライプの数に置き換えます。StripeSize は、キロバイト単位のストライプのサイズに置き換えます。
--stripesize
は必須オプションではありません。ストライプのサイズを指定しなかった場合、デフォルトで 64 KB になります。LogicalVolumeName は、LV の名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。
検証
ストライプ化 LV が作成されたことを確認します。
# lvs -o lv_name,seg_type LV Type LogicalVolumeName striped
関連情報
-
vgs(8)
lvs(8)
、lvcreate(8)
man ページ
4.2.4. RAID 論理ボリュームの作成
RAID 論理ボリュームを使用すると、複数のディスクを使用して冗長性とパフォーマンスを確保できます。LVM は、RAID0、RAID1、RAID4、RAID5、RAID6、RAID10 など、さまざまな RAID レベルをサポートしています。
LVM を使用すると、ストライプ化 RAID (RAID0、RAID4、RAID5、RAID6)、ミラー化 RAID (RAID1)、またはその両方の組み合わせ (RAID10) を作成できます。
RAID 4、RAID 5、および RAID 6 は、ディスク障害発生時に失われた情報を再構築するのに使用できるパリティーデータを保存することにより、フォールトトレランスを提供します。
RAID LV を作成するときは、各ストライプを個別の PV に配置します。ストライプの数は、ボリュームグループ (VG) 内に存在する PV の数と同じです。
RAID レベル | 型 | パリティー | デバイスの最小数 | ストライプの最小数 |
---|---|---|---|---|
RAID0 | ストライピング | なし | 2 | 2 |
RAID1 | ミラーリング | なし | 2 | - |
RAID4 | ストライピング | 最初のデバイスを使用してパリティーを保存する | 3 | 2 |
RAID5 | ストライピング | 1 つの追加デバイスを使用してパリティーを保存する | 3 | 2 |
RAID6 | ストライピング | 2 つの追加デバイスを使用してパリティーを保存する | 5 | 3 |
RAID10 | ストライピングとミラーリング | なし | 4 | 2 |
前提条件
- 管理アクセスがある。
手順
ボリュームグループの名前とサイズをリスト表示します。
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
RAID LV を作成します。
ストライプ化 RAID を作成するには、次を使用します。
# lvcreate --type raidlevel --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
level は、RAID レベル 0、4、5、または 6 に置き換えます。NumberOfStripes は、ストライプの数に置き換えます。StripeSize は、キロバイト単位のストライプのサイズに置き換えます。Size は、LV のサイズに置き換えます。LogicalVolumeName は、LV の名前に置き換えます。
ミラー化 RAID を作成するには、次を使用します。
# lvcreate --type raid1 --mirrors MirrorsNumber --size Size --name LogicalVolumeName VolumeGroupName
MirrorsNumber は、ミラーの数に置き換えます。Size は、LV のサイズに置き換えます。LogicalVolumeName は、LV の名前に置き換えます。
ミラー化およびストライプ化 RAID を作成するには、次を使用します。
# lvcreate --type raid10 --mirrors MirrorsNumber --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
MirrorsNumber は、ミラーの数に置き換えます。NumberOfStripes は、ストライプの数に置き換えます。StripeSize は、キロバイト単位のストライプのサイズに置き換えます。Size は、LV のサイズに置き換えます。LogicalVolumeName は、LV の名前に置き換えます。
検証
RAID LV が作成されたことを確認します。
# lvs -o lv_name,seg_type LV Type LogicalVolumeName raid0
関連情報
-
lvmraid(7)
、vgs(8)
、lvs(8)
、lvcreate(8)
man ページ
4.2.5. シン論理ボリュームの作成
シンプロビジョニングでは、ボリュームグループ (VG) の物理エクステント (PE) が割り当てられて、特定の物理サイズのシンプールが作成されます。このシンプールから、論理ボリューム (LV) が、プールの物理容量によって制限されることなく、仮想サイズに基づいて割り当てられます。これにより、すべてのシン LV の合計仮想サイズがシンプールの物理容量を超えると、各シン LV の仮想サイズがシンプールの実際のサイズを超え、オーバープロビジョニングが発生する可能性があります。したがって、容量不足やシステム停止を回避するには、論理的な使用量と物理的な使用量の両方を注意深く監視することが重要です。
シンプロビジョニングは、必要に応じて領域を割り当て、初期コストを削減し、リソースの使用率を向上させることで、ストレージ効率を最適化します。ただし、シン LV を使用する場合は、次の欠点に注意してください。
- 不適切な破棄処理により、未使用のストレージ領域の解放がブロックされ、時間が経過すると領域がすべて割り当てられる可能性があります。
- スナップショットのあるファイルシステムでは、コピーオンライト (CoW) 操作が遅くなる可能性があります。
- データブロックが複数のファイルシステム間で混在する可能性があるため、ランダムアクセスが制限されることがあります。
前提条件
- 管理アクセスがある。
- 物理ボリュームが作成されている。詳細は、LVM 物理ボリュームの作成 を参照してください。
- ボリュームグループが作成されている。詳細は、LVM ボリュームグループの作成 を参照してください。
- 論理ボリュームが作成されている。詳細は、論理ボリュームの作成 を参照してください。
手順
ボリュームグループの名前とサイズをリスト表示します。
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
シンプールを作成します。
# lvcreate --type thin-pool --size PoolSize --name ThinPoolName VolumeGroupName
PoolSize は、シンプールが使用できるディスク領域の最大量に置き換えます。ThinPoolName は、シンプールの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。
シン LV を作成します。
# lvcreate --type thin --virtualsize MaxVolumeSize --name ThinVolumeName --thinpool ThinPoolName VolumeGroupName
MaxVolumeSize は、シンプール内でボリュームが拡張できる最大サイズに置き換えます。ThinPoolName は、シンプールの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。
注記同じシンプール内に他のシン LV を作成できます。
検証
シン LV が作成されたことを確認します。
# lvs -o lv_name,seg_type LV Type ThinPoolName thin-pool ThinVolumeName thin
関連情報
-
lvs(8)
、lvcreate(8)
man ページ
4.2.6. VDO 論理ボリュームの作成
VDO 論理ボリューム (LV) では、ストレージ効率を向上させる Virtual Data Optimizer (VDO) テクノロジーを使用します。VDO LV には、仮想サイズと物理サイズの両方があります。仮想サイズは、ユーザーとアプリケーションに提供されるストレージの合計量を指します。物理サイズは、VG から割り当てられ、VDO プールによって消費される物理ストレージの実際の量です。
VDO LV の仮想サイズは、通常 VDO プールの物理サイズよりも大きいため、オーバープロビジョニングが発生します。そのため、VDO プール内の物理領域を厳重に監視し、必要に応じて拡張する必要があります。
VDO LV と VDO プールは、ペアとして作成され、常にペアとして存在します。
前提条件
- 管理アクセスがある。
手順
ボリュームグループの名前とサイズをリスト表示します。
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
VDO LV を作成します。
# lvcreate --type vdo --virtualsize VolumeSize --size PhysicalPoolSize --name VDOVolumeName --vdopool VDOPoolName VolumeGroupName
VolumeSize は、ボリュームのサイズに置き換えます。PhysicalPoolSize は、プールのサイズに置き換えます。VDOVolumeName は、VDO ボリュームの名前に置き換えます。VDOPoolName は、VDO プールの名前に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。
検証
VDO LV が作成されたことを確認します。
# lvs -o name,seg_type,size LV Type LSize VDOPoolName vdo-pool 5.00g VDOVolumeName vdo 5.00g
関連情報
-
vgs(8)
、lvs(8)
、lvcreate(8)
man ページ