2 論理ボリューム・マネージャの操作

警告:

Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。

できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。

この章では、ボリュームを実装することでデータの冗長性を提供し、パフォーマンスを向上させる論理ボリューム・マネージャとその使用方法について説明します。

論理ボリューム・マネージャについて

論理ボリューム・マネージャ(LVM)を使用して、複数の物理ボリュームを管理し、論理ボリュームのミラーリングおよびストライプ化を構成することで、データ冗長性が提供され、I/Oパフォーマンスを向上できます。LVMでは、ディスク・アレイLUN、ソフトウェアまたはハードウェアRAIDデバイス、ハード・ドライブ、ディスク・パーティションなどのストレージ・デバイスである物理ボリュームから、最初にボリューム・グループを作成します。次に、ボリューム・グループに論理ボリュームを作成します。論理ボリュームは、その実装を複数の物理ディスクに展開できるパーティションとして機能します。

論理ボリュームにファイル・システムを作成して、物理デバイスの場合と同様の方法で論理ボリューム・デバイスをマウントできます。論理ボリュームのファイル・システムがデータでいっぱいになった場合は、ボリューム・グループ内の空き領域を使用してボリュームの容量を増加し、ファイル・システムを拡張できます(ファイル・システムにその機能がある場合)。必要な場合は、ボリューム・グループに物理的なストレージ・デバイスを追加することで、その容量を増加できます。

LVMは非破壊的で、ユーザーに透過的です。物理ストレージを再構成するためのシステム停止時間を確保しなくても、論理ボリュームのサイズを増加したり、そのレイアウトを動的に変更できます。

LVMは、複数の物理デバイスにわたって論理デバイスを作成可能な、ソフトウェアRAID、暗号化およびその他ストレージ機能の基盤を備えた抽象レイヤーを提供するデバイス・マッパー(DM)を使用します。

物理ボリュームの初期化および管理

ボリューム・グループを作成するには、LVMで物理ボリュームとして使用する物理デバイスを事前に初期化しておく必要があります。

注意:

デバイスに既存のデータが格納されている場合は、データをバックアップします。

物理デバイスを物理ボリュームとして設定するには、pvcreateコマンドを使用します。

sudo pvcreate [options] device ...

たとえば、/dev/sdb/dev/sdc/dev/sddおよび/dev/sdeを物理ボリュームとして設定します:

sudo pvcreate -v /dev/sd[bcde]
Set up physical volume for “/dev/sdb” with 6313482 available
sectors
Zeroing start of device /dev/sdb
Physical volume “/dev/sdb” successfully created
...

物理ボリュームに関する情報を表示するには、pvdisplaypvsおよびpvscanコマンドを使用できます。

物理ボリュームをLVMの管理から削除するには、pvremoveコマンドを使用します。

sudo pvremove device

物理ボリュームの管理に使用可能なその他のコマンドとして、pvchangepvckpvmoveおよびpvresizeがあります。

詳細は、lvm(8)pvcreate(8)およびLVMのその他のマニュアル・ページを参照してください。

ボリューム・グループの作成および管理

初期化した物理ボリュームは、新規または既存のボリューム・グループに追加できます。

ボリューム・グループを作成するには、vgcreateコマンドを使用します。

sudo vgcreate [options] volume_group physical_volume ...

たとえば、物理ボリューム/dev/sdb/dev/sdc/dev/sddおよび/dev/sdeからボリューム・グループmyvgを作成します:

sudo vgcreate -v myvg /dev/sd[bcde]
Wiping cache of LVM-capable devices
Adding physical volume ‘/dev/sdb’ to volume group ‘myvg’
Adding physical volume ‘/dev/sdc’ to volume group ‘myvg’
Adding physical volume ‘/dev/sdd’ to volume group ‘myvg’
Adding physical volume ‘/dev/sde’ to volume group ‘myvg’
Archiving volume group “myvg” metadata (seqno 0).
Creating volume group backup “/etc/lvm/backup/myvg” (seqno 1).
Volume group “myvg” successfully created

LVMは、ボリューム・グループ内の記憶域を物理的なエクステント(ストレージを論理ボリュームに割り当てる際にLVMで使用する最小単位)に分割します。エクステントのデフォルト・サイズは4MBです。

LVMがボリューム・グループからどのようにエクステントを割り当てるかについては、ボリューム・グループおよび論理ボリュームの割当ポリシーで判断されます。ボリューム・グループのデフォルトの割当ポリシーはnormalで、物理ボリュームと同じボリュームにパラレル・ストライプを配置しないなどのルールが適用されます。論理ボリュームのデフォルトの割当ポリシーはinheritで、これはボリューム・グループと同じポリシーを論理ボリュームで使用することを意味します。lvchangeまたはvgchangeコマンドを使用してデフォルトの割当ポリシーを変更するか、ボリューム・グループまたは論理ボリュームを作成するときに割当ポリシーをオーバーライドできます。その他の割当ポリシーには、anywherecontiguousおよびclingがあります。

物理ボリュームをボリューム・グループに追加するには、vgextendコマンドを使用します。

sudo vgextend [options] volume_group physical_volume ...

ボリューム・グループから物理ボリュームを削除するには、vgreduceコマンドを使用します。

sudo vgreduce [options] volume_group physical_volume ...

ボリューム・グループに関する情報を表示するには、vgdisplayvgsおよびvgscanコマンドを使用できます。

LVMからボリューム・グループを削除するには、vgremoveコマンドを使用します。

sudo vgremove volume_group

ボリューム・グループの管理に使用可能なその他のコマンドとして、vgchangevgckvgexportvgimportvgmergevgrenameおよびvgsplitがあります。

詳細は、lvm(8)vgcreate(8)およびLVMのその他のマニュアル・ページを参照してください。

論理ボリュームの作成および管理

物理ボリュームのボリューム・グループを作成した後は、そのボリューム・グループで使用可能な記憶域から論理ボリュームを作成できます。

論理ボリュームを作成するには、lvcreateコマンドを使用します。

sudo lvcreate [options] --size size --name logical_volume volume_group

たとえば、2GBのサイズの論理ボリュームmylvをボリューム・グループmyvgに作成します。

sudo lvcreate -v --size 2g --name mylv myvg
Setting logging type to disk
Finding volume group “myvg”
Archiving volume group “myvg” metadata (seqno 1).
Creating logical volume mylv
Create volume group backup “/etc/lvm/backup/myvg” (seqno 2).
...

lvcreateでは、デバイス・マッパーを使用して論理ボリュームごとにブロック・デバイス・ファイル・エントリを/devに作成し、udevを使用して/dev/mapperおよび/dev/ volume_groupからこのデバイス・ファイルへのシンボリック・リンクを設定します。たとえば、ボリューム・グループmyvgの論理グループmylvに相当するデバイスは/dev/dm-3で、これが/dev/mapper/myvolg-myvolおよび/dev/myvolg/myvolによってシンボリック・リンクされます。

ノート:

/dev/mapperまたは/dev/ volume_groupのデバイスを常に使用してください。これらの名前は永続的で、ブート・プロセスの初期にデバイス・マッパーによって自動的に作成されます。/dev/dm-*デバイスの永続性は、再起動後は保証されません。

論理ボリュームを作成したら、物理ストレージ・デバイスと同じように構成して使用できます。たとえば、ファイル・システム、スワップ・パーティション、自動ストレージ管理(ASM)ディスクまたはRAWデバイスとして論理ボリュームを構成できます。

論理ボリュームに関する情報を表示するには、lvdisplaylvsおよびlvscanコマンドを使用できます。

ボリューム・グループから論理ボリュームを削除するには、lvremoveコマンドを使用します。

sudo lvremove volume_group/logical_volume

ノート:

ボリューム・グループと論理ボリュームの両方の名前を指定する必要があります。

論理ボリュームの管理に使用可能なその他のコマンドとして、lvchangelvconvertlvmdiskscanlvmsadclvmsarlvrenameおよびlvresizeがあります。

詳細は、lvm(8)lvcreate(8)およびLVMのその他のマニュアル・ページを参照してください。

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

次の例のように、lvcreate--snapshotオプションを付けて使用すると、既存の論理ボリューム(ボリューム・グループmyvgmylvなど)のスナップショットを作成することもできます。

sudo lvcreate --size 500m --snapshot --name mylv-snapshot myvg/mylv
Logical volume “mylv-snapshot” created

スナップショットのコンテンツは、マウントして元のボリュームとは別の内容に変更したり、スナップショット取得時の元のボリュームの状態を示した記録として保存したりできます。スナップショットの使用領域は、期間内にボリュームのコンテンツがどの程度相違するかによって異なりますが、通常は元のボリュームよりも少なくなります。この例では、スナップショットに必要な領域が元のボリュームのわずか1/4であることを前提としています。lvsコマンドからの出力のSnap%列に表示された値を使用して、スナップショットに割り当てられているデータの容量を確認できます。Snap%の値が100%に近いと、スナップショットの記憶域が不足していることを示すので、lvresizeを使用して領域を拡張します。または、スナップショットのサイズを小さくして記憶域領域を節約することも可能です。スナップショットを元のボリュームとマージするには、--mergeオプションを指定してlvconvertコマンドを使用します。

ボリューム・グループから論理ボリューム・スナップショットを削除するには、論理ボリュームに対してコマンドを使用する場合と同じ方法でlvremoveコマンドを使用します。

sudo lvremove volume_group/logical_volume_snapshot

詳細は、lvcreate(8)およびlvremove(8)の各マニュアル・ページを参照してください。

シンプロビジョニングされた論理ボリュームの作成および管理

シンプロビジョニングされた論理ボリュームの仮想サイズは通常、そのボリュームに作成した物理ストレージより大きくなっています。シンプロビジョニングされた論理ボリュームは、シン・プールと呼ばれる論理ボリュームの特殊なタイプに割り当てたストレージから作成します。LVMは、ボリュームにアクセスするアプリケーションから要求があると、オンデマンドでストレージをシン・プールからシンプロビジョニングされた論理ボリュームに割り当てます。lvsコマンドを使用して、シン・プールの使用量を監視し、使用可能なストレージが不足しないようにシン・プールのサイズを増やす必要があります。

シン・プールを作成するには、lvcreateコマンドを--thinオプションを付けて使用します。

sudo lvcreate --size size --thin volume_group/thin_pool_name

たとえば、1GBのサイズのシン・プールmytpをボリューム・グループmyvgに作成します:

sudo lvcreate --size 1g --thin myvg/mytp
Logical volume "mytp" created

次にlvcreate--thinオプションを付けて使用し、次の例のように、--virtualsizeオプションで指定したサイズのシンプロビジョニングされた論理ボリュームを作成します。

sudo lvcreate --virtualsize size --thin volume_group/thin_pool_name --name logical_volume

たとえば、現時点でボリュームのサイズより小さいサイズのシン・プールmytpを使用して、2GBのサイズのシンプロビジョニングされた論理ボリュームmytvを作成します:

sudo lvcreate --virtualsize 2g --thin myvg/mytp --name mytv
Logical volume "mytv" created

シンプロビジョニングされた論理ボリュームのシン・スナップショットを作成する場合は、次のようにスナップショットのサイズは指定しないでください。

# lvcreate --snapshot --name mytv-snapshot myvg/mytv
Logical volume “mytv-snapshot” created

シン・スナップショットのサイズを指定すると、そのストレージがシン・プールからプロビジョニングされなくなります。

ボリューム・グループに十分な領域がある場合は、次のように、lvresizeコマンドを使用してシン・プールのサイズを増やします。

sudo lvresize -L+1G myvg/mytp
Extending logical volume mytp to 2 GiB
Logical volume mytp successfully resized

snapperコマンドを使用してシン・スナップショットを作成および管理する方法の詳細は、シンプロビジョニングされた論理ボリュームでのsnapperの使用を参照してください。

詳細は、lvcreate(8)およびlvresize(8)の各マニュアル・ページを参照してください。

シンプロビジョニングされた論理ボリュームでのsnapperの使用

snapperユーティリティを使用して、シンプロビジョニングされた論理ボリュームのシン・スナップショットを作成および管理できます。

snapper構成をマウントされている既存のボリュームに設定するには:

sudo snapper -c config_name create-config -f "lvm(fs_type)" fs_name

ここでは、config_nameは構成の名前、fs_typeはファイル・システム・タイプ(ext4またはxfs)、fs_nameはファイル・システムのパスです。コマンドによってconfig_name/etc/sysconfig/snapperに追加され、構成ファイル/etc/snapper/configs/config_nameが作成され、スナップショットに.snapshotsサブディレクトリが設定されます。

デフォルトでは、snapperはボリュームの.snapshotサブディレクトリを作成するcron.hourlyジョブ、および古いスナップショットをクリーンアップするcron.dailyジョブを設定します。構成ファイルを編集すると、この動作を無効化または変更できます。詳細は、snapper-configs(5)マニュアル・ページを参照してください。

snapperを使用して3種類のスナップショットを作成できます。

post

ポスト・スナップショットを使用して、変更後のボリュームの状態を記録します。ポスト・スナップショットは常に、変更直前に実行するプリ・スナップショットと対になっています。

pre

プリ・スナップショットを使用して、変更前のボリュームの状態を記録します。プリ・スナップショットは常に、変更直前に実行するポスト・スナップショットと対になっています。

single

単一のスナップショットは、ボリュームの状態の記録に使用できますが、ボリュームのその他のスナップショットと関連性はありません。

たとえば、次のコマンドでは、ボリュームのプリ・スナップショットおよびポスト・スナップショットを作成します。

sudo snapper -c config_name create -t pre -p N
... Modify the volume's contents ...
sudo snapper -c config_name create -t post --pre-num N p N'

-pオプションをsnapperに指定するとスナップショット数が表示されるため、ポスト・スナップショットを作成する場合、またはプリ・スナップショットとポスト・スナップショットの内容を比較する場合に参照できます。

プリ・スナップショットとポスト・スナップショットの間に追加、削除、または変更したファイルおよびディレクトリを表示するには、statusサブコマンドを使用します。

sudo snapper -c config_name status N .. N'

プリ・スナップショットとポスト・スナップショットの間のファイル内容の差異を表示するには、diffサブコマンドを使用します。

sudo snapper -c config_name diff N .. N'

ボリュームにあるスナップショットをリストするには:

sudo snapper -c config_name list

スナップショットを削除するには、その番号をdeleteサブコマンドに指定します。

sudo snapper -c config_name delete N''

ボリューム内の、ポスト・スナップショットN'に含まれる変更をプリ・スナップショットNに戻すには:

sudo snapper -c config_name undochange N..N'

詳細は、snapper(8)マニュアル・ページを参照してください。