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

論理ボリューム・マネージャ(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のその他のマニュアル・ページを参照してください。

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

次の例では、新しく作成された物理ボリュームからボリューム・グループ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のその他のマニュアル・ページを参照してください。

タグを使用したグループ化の作成および管理

タグは、同じタイプのLVMオブジェクトをグループ化する文字列です。物理ボリューム(PV)や論理ボリューム(LV)など、ボリューム・グループ(VG)内のオブジェクトのみをタグ付けできます。PVは、VGメタデータの一部としてタグが格納され、PVが削除されると削除されるため、VGから削除されるとタグが失われます。

複数のLVMコマンドでタグを使用できます。コマンドでタグを使用すると、コマンド内の位置で想定されるタイプのタグを持つすべてのオブジェクトが追加されます。タグ付けされたグループ内のすべてのオブジェクトをアクティブ化するなどのアクションを自動化するためにタグを使用することもできます。

タグを使用してLVMオブジェクト・グループを作成および管理するには、次を実行します:
  1. 1つ以上の既存のオブジェクトにタグを追加するには、次のコマンドを使用します:
    pvchange --addtag @tag PV 
    pvchange --addtag @tag VG
    pvchange --addtag @tag LV
    前述のtagはタグの名前で、常に接頭辞に"@"文字を付ける必要があります。PVは1つ以上の物理ボリューム、VGは1つ以上のボリューム・グループ、LVは1つ以上の論理ボリュームです。--addtagオプションを繰り返して、1つのコマンドで複数のタグを追加できます。

    ノート:

    有効なタグ文字は、A-Z a-z 0-9 _ + . - / = ! : # &で、最大1024文字です。タグをハイフンで始めることはできません。
  2. オブジェクトの作成時にタグを追加するには、次のコマンドを使用します:
    vgcreate --addtag @tag VG
    lvcreate --addtag @tag LV
  3. 1つ以上の既存のオブジェクトからタグを削除するには、次のコマンドを使用します:
    pvchange --deltag @tag PV 
    pvchange --deltag @tag VG
    pvchange --deltag @tag LV

    --deltagオプションを繰り返して、1つのコマンドで複数のタグを追加できます。

  4. タグを表示するには、次のコマンドを使用します:
    pvs -o tags PV 
    pvs -o tags VG
    pvs -o tags LV

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

アクティブ化および自動アクティブ化の管理

論理ボリュームをアクティブ化または非アクティブ化するには、lvchangeコマンドを使用します。論理ボリュームをアクティブ化すると、論理ボリュームがブロック・デバイスを介して使用可能になります。論理ボリュームを非アクティブ化すると、論理ボリュームは非アクティブになり、カーネルからアクセスできなくなります。

さらに、ボリューム・グループ内のすべての論理ボリュームに適用される論理ボリュームまたはボリューム・グループの自動アクティブ化を有効にできます。自動アクティブ化では、マシンへのLVMデバイスのアタッチに応じて論理ボリュームがアクティブ化されます。ボリューム・グループ内のすべての物理ボリュームをアタッチすると、そのボリューム・グループは完了し、そのボリューム・グループ内の論理ボリュームが自動的にアクティブ化されます。この自動動作は、vgchangeまたはlvchange--setautoactivationオプションとともに使用して無効または有効にできます。

/etc/lvm/lvm.conf auto_activation_volume_listパラメータでアクティブ化できる論理ボリュームをリストすることで、自動的にアクティブ化できる論理ボリュームを制御することもできます。

論理ボリュームのアクティブ化ステータスを管理するには、次を実行します:
  1. 論理ボリュームを非アクティブ化するには、次のコマンドを使用します:
    lvchange -an VG LG 

    前述のVGはボリューム・グループの名前、LGは非アクティブ化する論理ボリュームの名前です。

  2. ボリューム・グループ内のすべての論理ボリュームを非アクティブ化するには、次のコマンドを使用します:
    lvchange -an VG
  3. 非アクティブ化した論理ボリュームをアクティブ化するには、次のコマンドを使用します:
    lvchange -ay VG LG

    ノート:

    systemdは、/etc/fstabファイルで指定されたマウント・ポイントを使用して、LVMボリュームを自動的にマウントします。
  4. ボリューム・グループ内の非アクティブ化されたすべての論理ボリュームをアクティブ化するには、次のコマンドを使用します:
    lvchange -ay VG
  5. 前述のlvchangeコマンドを使用してアクティブ化できる論理ボリュームを制御するには、activation/volume_list構成オプションを指定して/etc/lvm/lvm.conf構成ファイルを使用することもできます。次の例は、ボリューム・リストがボリューム・グループ全体またはボリューム・グループ内の1つの論理ボリュームのみを指定できることを示しています:
    volume_list = [ "VG", "VG/LV"]
    1つ以上のタグを使用して、アクティブにできる論理デバイスを指定することもできます。次に例を示します。
    volume_list = ["@tag1", "@tag2, "@tag3"]
    角カッコを空のままにすると、デバイスはアクティブになりません。
    volume_list = []
論理ボリュームの自動アクティブ化を管理するには、次を実行します:
  1. ボリューム・グループの自動アクティブ化を有効または無効にするには、次のコマンドを使用します:
    vgchange --setautoactivation <y|n>
  2. 論理ボリュームの自動アクティブ化を有効または無効にするには、次のコマンドを使用します:
    lvchange --setautoactivation <y|n>
  3. /etc/lvm/lvm.conf構成ファイルを使用して自動アクティブ化を制御するには、ボリューム・グループ、またはボリューム・グループとその中の特定の論理ボリュームをactivation/auto_activation_volume_list構成オプションに指定します:
    auto_activation_volume_list = [ "VG", "VG/LV"]
    タグを使用して自動アクティブ化を有効にすることもできます。次に例を示します。
    auto_activation_volume_list = ["@tag1", "@tag2, "@tag3"]
    角カッコを空のままにすると、自動アクティブ化機能は完全に無効になります。
    auto_activation_volume_list = []

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

既存の論理ボリュームのスナップショットを作成するには、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)マニュアル・ページを参照してください。