第5章 高度な論理ボリューム管理
LVM には次のような高度な機能があります。
- スナップショット。スナップショットは論理ボリューム (LV) の特定時点のコピーです。
- キャッシュ。使用すると、高速なストレージを低速なストレージのキャッシュとして利用できるようになります。
- カスタムシンプールの作成
5.1. 論理ボリュームのスナップショットの管理
スナップショットは、特定時点における別の LV の内容をミラーリングする論理ボリューム (LV) です。
5.1.1. 論理ボリュームスナップショットにてういて
スナップショットを作成すると、特定時点における別の LV のコピーとして機能する新しい LV が作成されます。スナップショット LV は、最初は実際のデータを含んでいません。代わりに、スナップショット作成時における元の LV のデータブロックを参照します。
スナップショットのストレージ使用率を定期的に監視することが重要です。スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。
スナップショットが完全にいっぱいになる前に拡張することが重要です。これは、lvextend
コマンドを使用して手動で行うことも、/etc/lvm/lvm.conf
ファイルを使用して自動的に行うこともできます。
- シック LV スナップショット
- 元の LV のデータが変更されると、コピーオンライト (CoW) システムによって、変更前の元のデータがスナップショットにコピーされます。この方法では、変更が発生した場合にのみスナップショットのサイズが増加し、スナップショット作成時における元のボリュームの状態が保存されます。シックスナップショットは、事前に一定量のストレージ領域を割り当てる必要がある LV の一種です。この量は後で増減できますが、元の LV にどのような変更を加える予定かを検討してください。そうすることで、割り当てる領域が多すぎるためにリソースが無駄になったり、割り当てる領域が少なすぎるためにスナップショットのサイズを頻繁に増やす必要が生じたりすることがなくなります。
- シン LV スナップショット
シンスナップショットは、既存のシンプロビジョニングされた LV から作成される LV の一種です。シンスナップショットでは、事前に追加の領域を割り当てる必要はありません。最初は、元の LV とそのスナップショットの両方が同じデータブロックを共有します。元の LV に変更が加えられると、新しいデータが別のブロックに書き込まれますが、スナップショットは元のブロックを参照し続け、スナップショット作成時における LV データの特定時点のビューが保持されます。
シンプロビジョニングは、必要に応じてディスク領域を割り当てることで、ストレージを効率的に最適化および管理する方法です。そのため、各 LV に事前に大量のストレージを割り当てる必要がなく、複数の LV を作成できます。ストレージがシンプール内のすべての LV で共有されるため、リソースをより効率的に使用できます。シンプールは、必要に応じて LV に領域を割り当てます。
- シック LV スナップショットとシン LV スナップショットの選択
- シック LV スナップショットとシン LV スナップショットの選択は、スナップショットの作成元とする LV のタイプによって直接決まります。元の LV がシック LV である場合、スナップショットもシックになります。元の LV がシン LV の場合は、スナップショットもシンになります。
5.1.2. シック論理ボリュームスナップショットの管理
シック LV スナップショットを作成するときは、ストレージ要件とスナップショットの想定される有効期間を考慮することが重要です。元のボリュームに予想される変更に基づいて、十分なストレージを割り当てる必要があります。スナップショットは、想定される有効期間中の変更を取り込むのに十分なサイズである必要がありますが、元の LV のサイズを超えることはできません。変更頻度が低いと予想される場合は、10% - 15% の小さいスナップショットサイズで十分な場合があります。変更頻度が高い LV の場合は、30% 以上を割り当てる必要がある場合があります。
スナップショットが完全にいっぱいになる前に拡張することが重要です。スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。lvs -o lv_name,data_percent,origin
コマンドを使用すると、スナップショットの容量を監視できます。
5.1.2.1. シック論理ボリュームスナップショットの作成
lvcreate
コマンドを使用して、シック LV スナップショットを作成できます。
前提条件
- 管理アクセスがある。
- 物理ボリュームが作成されている。詳細は、LVM 物理ボリュームの作成 を参照してください。
- ボリュームグループが作成されている。詳細は、LVM ボリュームグループの作成 を参照してください。
- 論理ボリュームが作成されている。詳細は、論理ボリュームの作成 を参照してください。
手順
スナップショットを作成する LV を特定します。
# lvs -o vg_name,lv_name,lv_size VG LV LSize VolumeGroupName LogicalVolumeName 10.00g
スナップショットのサイズは LV のサイズを超えることはできません。
シック LV スナップショットを作成します。
# lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeName
SnapshotSize は、スナップショットに割り当てるサイズ (例: 10 G) に置き換えます。SnapshotName は、スナップショット論理ボリュームに付ける名前に置き換えます。VolumeGroupName は、元の論理ボリュームを含むボリュームグループの名前に置き換えます。LogicalVolumeName は、スナップショットの作成元とする論理ボリュームの名前に置き換えます。
検証
スナップショットが作成されたことを確認します。
# lvs -o lv_name,origin LV Origin LogicalVolumeName SnapshotName LogicalVolumeName
関連情報
-
lvcreate(8)
およびlvs(8)
man ページ
5.1.2.2. 論理ボリュームスナップショットの手動拡張
スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。スナップショットが完全にいっぱいになる前に拡張することが重要です。これは、lvextend
コマンドを使用して手動で実行できます。
前提条件
- 管理アクセスがある。
手順
ボリュームグループ、論理ボリューム、スナップショットのソースボリュームの名前、使用率、およびサイズをリスト表示します。
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 82.00 5.00g
シックプロビジョニングされたスナップショットを拡張します。
# lvextend --size +AdditionalSize VolumeGroupName/SnapshotName
AdditionalSize は、スナップショットに追加する容量 (例: +1G) に置き換えます。VolumeGroupName は、ボリュームグループの名前に置き換えます。SnapshotName は、スナップショットの名前に置き換えます。
検証
LV が拡張されたことを確認します。
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 68.33 6.00g
5.1.2.3. シック論理ボリュームスナップショットの自動拡張
スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。スナップショットが完全にいっぱいになる前に拡張することが重要です。これは自動的に実行できます。
前提条件
- 管理アクセスがある。
手順
-
root
ユーザーとして、任意のエディターで/etc/lvm/lvm.conf
ファイルを開きます。 snapshot_autoextend_threshold
行とsnapshot_autoextend_percent
行のコメントを解除し、各パラメーターを必要な値に設定します。snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20
snapshot_autoextend_threshold
は、LVM がスナップショットの自動拡張を開始するパーセンテージを指定します。たとえば、このパラメーターを 70 に設定すると、容量の 70% に達したときに LVM がスナップショットの拡張を試みます。snapshot_autoextend_percent
は、しきい値に達したときにスナップショットを何パーセント拡張するかを指定します。たとえば、パラメーターを 20 に設定すると、スナップショットが現在のサイズの 20% 増加します。- 変更を保存し、エディターを終了します。
lvm2-monitor
を再起動します。# systemctl restart lvm2-monitor
5.1.2.4. シック論理ボリュームのスナップショットのマージ
シック LV スナップショットを、スナップショットの作成元となった元の論理ボリュームにマージできます。マージプロセスでは、元の LV がスナップショット作成時点の状態に戻されます。マージが完了すると、スナップショットは削除されます。
元の LV とスナップショット LV 間のマージは、どちらかがアクティブな場合、延期されます。両方の LV が再アクティブ化され、使用されていない場合にのみ続行されます。
前提条件
- 管理アクセスがある。
手順
LV、そのボリュームグループ、およびそのパスをリスト表示します。
# lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName SnapshotName VolumeGroupName /dev/VolumeGroupName/SnapshotName
LV がマウントされている場所を確認します。
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotName
/dev/VolumeGroupName/LogicalVolumeName は、論理ボリュームへのパスに置き換えます。/dev/VolumeGroupName/SnapshotName は、スナップショットへのパスに置き換えます。
LV をアンマウントします。
# umount /LogicalVolume/MountPoint # umount /Snapshot/MountPoint
/LogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。/Snapshot/MountPoint は、スナップショットのマウントポイントに置き換えます。
LV を非アクティブ化します。
# lvchange --activate n VolumeGroupName/LogicalVolumeName # lvchange --activate n VolumeGroupName/SnapshotName
VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。SnapshotName は、スナップショットの名前に置き換えます。
シック LV スナップショットを元の LV にマージします。
# lvconvert --merge SnapshotName
SnapshotName は、スナップショットの名前に置き換えます。
LV をアクティブ化します。
# lvchange --activate y VolumeGroupName/LogicalVolumeName
VolumeGroupName は、ボリュームグループの名前に置き換えます。LogicalVolumeName は、論理ボリュームの名前に置き換えます。
LV をマウントします。
# umount /LogicalVolume/MountPoint
/LogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。
検証
スナップショットが削除されたことを確認します。
# lvs -o lv_name
関連情報
-
lvconvert(8)
、lvs(8)
man ページ
5.1.3. シン論理ボリュームスナップショットの管理
ストレージ効率を優先する場合は、シンプロビジョニングが適しています。ストレージ領域の動的割り当てにより、初期のストレージコストが削減され、利用可能なストレージリソースが最大限に使用されます。動的なワークロードがある環境や、時間の経過とともにストレージが増加する環境では、シンプロビジョニングによって柔軟性が向上します。これにより、ストレージ領域を事前に大量に割り当てることなく、ストレージシステムをニーズの変化に適応させることができます。動的な割り当てにより、オーバープロビジョニングが可能になります。つまり、すべての LV の合計サイズが、シンプールの物理サイズを超えることがあります。これは、すべての領域が同時に使用されるわけではないということを前提にしているためです。
5.1.3.1. シン論理ボリュームスナップショットの作成
lvcreate
コマンドを使用して、シン LV スナップショットを作成できます。シン LV スナップショットを作成するときは、スナップショットサイズを指定しないでください。サイズのパラメーターを含めると、代わりにシックスナップショットが作成されます。
前提条件
- 管理アクセスがある。
- 物理ボリュームが作成されている。詳細は、LVM 物理ボリュームの作成 を参照してください。
- ボリュームグループが作成されている。詳細は、LVM ボリュームグループの作成 を参照してください。
- 論理ボリュームが作成されている。詳細は、論理ボリュームの作成 を参照してください。
手順
スナップショットを作成する LV を特定します。
# lvs -o lv_name,vg_name,pool_lv,lv_size LV VG Pool LSize PoolName VolumeGroupName 152.00m ThinVolumeName VolumeGroupName PoolName 100.00m
シン LV スナップショットを作成します。
# lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeName
SnapshotName は、スナップショット論理ボリュームに付ける名前に置き換えます。VolumeGroupName は、元の論理ボリュームを含むボリュームグループの名前に置き換えます。ThinVolumeName は、スナップショットの作成元とするシン論理ボリュームの名前に置き換えます。
検証
スナップショットが作成されたことを確認します。
# lvs -o lv_name,origin LV Origin PoolName SnapshotName ThinVolumeName ThinVolumeName
関連情報
-
lvcreate(8)
およびlvs(8)
man ページ
5.1.3.2. シン論理ボリュームスナップショットのマージ
シン LV スナップショットを、スナップショットの作成元となった元の論理ボリュームにマージできます。マージプロセスでは、元の LV がスナップショット作成時点の状態に戻されます。マージが完了すると、スナップショットは削除されます。
前提条件
- 管理アクセスがある。
手順
LV、そのボリュームグループ、およびそのパスをリスト表示します。
# lvs -o lv_name,vg_name,lv_path LV VG Path ThinPoolName VolumeGroupName ThinSnapshotName VolumeGroupName /dev/VolumeGroupName/ThinSnapshotName ThinVolumeName VolumeGroupName /dev/VolumeGroupName/ThinVolumeName
元の LV がマウントされている場所を確認します。
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeName
VolumeGroupName/ThinVolumeName は、論理ボリュームへのパスに置き換えます。
LV をアンマウントします。
# umount /ThinLogicalVolume/MountPoint
/ThinLogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。/ThinSnapshot/MountPoint は、スナップショットのマウントポイントに置き換えます。
LV を非アクティブ化します。
# lvchange --activate n VolumeGroupName/ThinLogicalVolumeName
VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinLogicalVolumeName は、論理ボリュームの名前に置き換えます。
シン LV スナップショットを元の LV にマージします。
# lvconvert --mergethin VolumeGroupName/ThinSnapshotName
VolumeGroupName は、ボリュームグループの名前に置き換えます。ThinSnapshotName は、スナップショットの名前に置き換えます。
LV をマウントします。
# umount /ThinLogicalVolume/MountPoint
/ThinLogicalVolume/MountPoint は、論理ボリュームのマウントポイントに置き換えます。
検証
元の LV がマージされたことを確認します。
# lvs -o lv_name
関連情報
-
lvremove(8)
、lvs(8)
man ページ