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

論理ボリューム・マネージャ(LVM)を使用すると、複数の物理ボリュームを管理し、論理ボリュームのミラーリングおよびストライプ化を構成できます。LVMは、デバイス・マッパー(DM)を使用した抽象レイヤーの作成を通じて、物理ボリュームと論理ボリュームの構成に使用できる機能を提供します。LVMを使用すると、データの冗長性とI/Oパフォーマンスの向上が実現します。

LVMでは、最初に物理ボリュームからボリューム・グループを作成します。物理ボリュームは、ディスク・アレイLUN、ソフトウェアまたはハードウェアRAIDデバイス、ハード・ドライブ、ディスク・パーティションなどのストレージ・デバイスです。これらの物理ボリューム上に、ボリューム・グループを作成します。次に、ボリューム・グループに論理ボリュームを構成します。論理ボリュームは、ソフトウェアRAID、暗号化、およびその他のストレージ機能を構成するための基盤になります。

論理ボリュームにファイル・システムを作成して、物理デバイスの場合と同様の方法で論理ボリューム・デバイスをマウントできます。論理ボリュームのファイル・システムがデータでいっぱいになると、ボリューム・グループ内の空き領域を使用してボリュームの容量を増加できます。その後、ファイル・システムでその機能がサポートされていれば、ファイル・システムを拡大できます。物理ストレージ・デバイスをボリューム・グループに追加して、その容量をさらに増やすことができます。

LVMは非破壊的で、ユーザーに透過的です。そのため、論理ボリューム・サイズの増加、レイアウトの動的な変更、物理ボリュームの再構成などの管理タスクでは、システムの停止時間は不要です。

システムに論理ボリュームを設定する前に、次の要件を完了します。

  • 物理ボリュームに割り当てられたデバイスのデータをバックアップします。

  • これらのデバイスをアンマウントします。マウントされたデバイスでの物理ボリュームの作成が失敗します。

LVMを使用した論理ボリュームの構成には、順次実行する次のタスクが含まれます。

  1. 選択したストレージ・デバイスから物理ボリュームを作成。

  2. 物理ボリュームからボリューム・グループを作成。

  3. ボリューム・グループ上に論理ボリュームを構成。

  4. 必要に応じて、論理ボリュームのスナップショットを作成。

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

次の例では、/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のその他のマニュアル・ページを参照してください。

LVMでの表示および使用可能なデバイスの制限

LVMコマンドを使用すると、物理ボリューム・デバイス、または/etc/LVM/devices/system.devicesファイルにLVMで使用可能で表示可能な物理ボリュームとして指定されていないデバイスをリストできます。デバイスがこのファイルにリストされていない場合、LVMはデバイスを表示または使用できません。LVMを使用して作成した物理ボリュームは、すべてsystem.devicesファイルに自動的に追加されます。オペレーティング・システムのインストール中に作成された物理ボリュームも、system.devicesファイルに追加されます。

最初に物理ボリュームとして作成せずにデバイスをsystem.devicesファイルに追加する場合は、--adddevオプションを指定したlvmdevicesコマンドを使用してデバイスを追加します。たとえば、次のコマンドは、/dev/sdfデバイスをsystem.devicesファイルに追加します。
sudo lvmdevices --adddev /dev/sdf
デバイスを削除する場合は、--deldevオプションを使用します。たとえば、次のコマンドは、system.devicesファイルに対して/dev/sdfデバイスを削除します。
sudo lvmdevices --deldev /dev/sdf

ノート:

デバイス制限機能はデフォルトで有効になっています。この機能を無効にするには、/etc/lvm/lvm.confファイルにuse_devicesfile=0を設定します。この機能を無効にすると、かわりにLVMデバイス・フィルタ機能が自動的に有効になります。LVMデバイス・フィルタ機能の詳細は、/etc/LVM/LVM.confファイルのConfiguration option devices/filterセクションを参照してください。

詳細は、lvmdevices(8)およびlvm.conf(5)マニュアル・ページを参照してください。

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

次の例では、新しく作成された物理ボリュームからボリューム・グループ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は、ボリューム・グループ内のストレージ領域を物理的なエクステントに分割します。エクステント(デフォルト・サイズは4MB)は、ストレージを論理ボリュームに割り当てる際にLVMで使用する最小単位です。

割当ポリシーは、LVMがボリューム・グループまたは論理ボリュームからどのようにエクステントを割り当てるかを決定します。ボリューム・グループのデフォルト割当てポリシーはnormalで、ルールには、同じ物理ボリュームにパラレル・ストライプを配置しないなどが含まれます。論理ボリュームの場合、デフォルトの割当てポリシーはinheritで、これはボリューム・グループと同じポリシーを論理ボリュームで使用するということです。その他の割当ポリシーは、anywherecontiguousおよびclingおよびcling_by_tagsです。

割当てポリシーを変更するには、lvchangeまたはvgchangeコマンドを使用します。あるいは、ボリューム・グループまたは論理ボリュームの作成時に直接、優先割当てポリシーを設定します。

vgextendおよびvgreduceコマンドは、物理ボリュームをボリューム・グループに追加するか、ボリュームを削除します。このコマンドを使用すると、ボリューム・グループのサイズを操作できます。

sudo vgextend | vgreduce [options] vol_group physical_vol

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

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

sudo vgremove vol_group

このコマンドは、グループに論理ボリュームが存在する場合に警告し、確認を求めます。

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

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

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

この例では、2GBのサイズの論理ボリュームmylvをボリューム・グループmyvgに作成します。

sudo lvcreate -v --size 2g --name mylv myvg

次のような出力結果が表示されます。

Archiving volume group “myvg” metadata (seqno 1).
Creating logical volume mylv
Create volume group backup “/etc/lvm/backup/myvg” (seqno 2).
Activating logical volume myvg/mylv.
...
Logical volume "mylv" created.

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

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

論理ボリュームは、ファイル・システム、スワップ・パーティション、自動ストレージ管理(ASM)ディスクまたはRAWデバイスとしての論理ボリュームの構成など、物理ストレージ・デバイスと同様に管理および使用します。

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

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

sudo lvremove vol_group/logical_vol

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

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

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

既存の論理ボリュームのスナップショットを作成するには、lvcreate --snapshotを使用します。次に例を示します。

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

元のボリュームとは別に、スナップショットのコンテンツをマウントおよび変更できます。または、スナップショットが作成された時点の元のボリュームの状態のレコードとしてスナップショットを保持できます。

スナップショットの占有領域は、期間内にボリュームのコンテンツがどれだけ異なるかによって異なりますが、通常は元のボリュームよりも少なくなります。この例では、スナップショットに必要な領域が元のボリュームの1/4であることを想定しています。スナップショットに割り当てられるデータの量を計算するには、次の手順を実行します。

  1. lvsコマンドを発行します。

  2. コマンド出力で、Snap%列の値を確認します。

    100%に近づいている値は、スナップショットがストレージ領域より低いことを示します。

  3. lvresizeを使用して、スナップショットを拡張するか、ストレージ領域を節約するためにサイズを小さくします。

スナップショットを元のボリュームとマージするには、lvconvert --mergeコマンドを使用します。

ボリューム・グループから論理ボリューム・スナップショットを削除するには、必要に応じて論理ボリュームにlvremoveコマンドを使用します。

sudo lvremove myvg/mlv-snapshot

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

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

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

シンプロビジョニングされた論理ボリュームの構成と管理

シンプロビジョニングされた論理ボリュームの作成には、次の2つのステップがあります:

  1. シン・プールを作成します。

    sudo lvcreate --size size --thin vol_group/pool_name
  2. シンプロビジョニングされた論理ボリュームを作成します。

    sudo lvcreate --virtualsize size --thin vol_group/thin_pool_name --name logical_vol

次の例では、サイズが1GBのシン・プールmytpが、最初にボリューム・グループmyvgから作成されます。

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

次に、シンプロビジョニングされた論理ボリュームmytvが、2GBの仮想サイズで作成されます:

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

mytpのサイズがmytvのサイズより小さいことに注意してください。

mytvのスナップショットを作成する場合、スナップショットのサイズを指定しないでください。そうしないと、そのストレージはmytpからプロビジョニングされません。次に例を示します。

sudo 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

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

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

snapperユーティリティは、シンプロビジョニングされた論理ボリュームのシン・スナップショットを作成および保守するためのもう1つのツールです。

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 .. ..

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

sudo snapper -c config_name diff .. 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)マニュアル・ページを参照してください。