Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.4. 論理ボリュームの管理

このセクションでは、論理ボリューム管理の様々な要素を実行するコマンドを説明します。

4.4.1. リニア論理ボリュームの作成

論理ボリュームを作成するには、lvcreate コマンドを使用します。論理ボリュームに名前を指定しないと、デフォルトの名前 lvol# が使用されます。ここで、# は論理ボリュームの内部番号になります。
論理ボリュームを作成すると、論理ボリュームがボリュームグループから作成され、ボリュームグループを設定する物理ボリュームの空きエクステントが使用されます、通常、論理ボリュームは、その下層の物理ボリュームで次に使用可能な空き領域を使用します。通常、論理ボリュームは、次に解放された物理ボリュームで使用できる領域を使用します。論理ボリュームを編集すると、物理ボリューム内の領域を再割り当てます。
以下のコマンドは、ボリュームグループ vg1 に、論理ボリューム 10 ギガバイトを作成します。
# lvcreate -L 10G vg1
論理ボリュームサイズのデフォルト単位はメガバイトです。以下のコマンドは、ボリュームグループ testvg に 1500 メガバイトのリニア論理ボリューム testlv を作成し、ブロックデバイス /dev/testvg/testlv を作成します。
# lvcreate -L 1500 -n testlv testvg
以下のコマンドは、ボリュームグループ vg0 の空きエクステントから gfslv という名前の 50 ギガバイト論理ボリュームを作成します。
# lvcreate -L 50G -n gfslv vg0
lvcreate-l 引数を使用すると、論理ボリュームのサイズをエクステントで指定できます。この引数を使用すると、関連するボリュームグループ、論理ボリューム、または物理ボリュームセットのサイズの割合も指定できます。接尾辞 %VG はボリュームグループの合計サイズ、接尾辞 %FREE はボリュームグループの残りの空き容量、そして接尾辞 %PVS は物理ボリュームの空き容量を示します。スナップショットの場合は、サイズに接尾辞 %ORIGIN を使用して、元の論理ボリュームの合計サイズをパーセンテージで指定することができます (100%ORIGIN にすると、元の論理ボリューム全体が使用されます)。サイズをパーセンテージで指定した場合は、新規の論理ボリュームにおける論理エクステントに上限が設定されます。したがって、作成する LV の論理エクステントの正確な数は、コマンドが完了するまで決定されません。
以下のコマンドは、ボリュームグループ testvg の 60% 領域を使用する、論理ボリューム mylv を作成します。
# lvcreate -l 60%VG -n mylv testvg
以下のコマンドは、ボリュームグループ testvg の未割り当て領域をすべて使用する、論理ボリューム yourlv を作成します。
# lvcreate -l 100%FREE -n yourlv testvg
lvcreate コマンドに -l 引数を使用すると、ボリュームグループ全体を使用する論理ボリュームを作成できます。もう 1 つの方法では、vgdisplay コマンドを使用して合計 PE サイズを検索し、その結果を lvcreate コマンドへの入力として使用します。
以下のコマンドは、ボリュームグループ testvg を入力する論理ボリューム mylv を作成します。
# vgdisplay testvg | grep "Total PE"
Total PE              10230
# lvcreate -l 10230 -n mylv testvg
論理ボリュームの作成に使用した下層の物理ボリュームは、物理ボリュームを削除する必要がある場合に重要になる可能性があります。そのため、論理ボリュームを作成する際にはこの可能性を考慮する必要があります。ボリュームグループから物理ボリュームを削除する方法は、「ボリュームグループからの物理ボリュームの削除」 を参照してください。
ボリュームグループで、特定の物理ボリュームから論理ボリュームを割り当てる場合は、lvcreate コマンドラインの最後に物理ボリュームを指定します。以下のコマンドは、ボリュームグループ testvg に、物理ボリューム /dev/sdg1 から割り当てた論理ボリューム testlv を作成します。
# lvcreate -L 1500 -n testlv testvg /dev/sdg1
論理ボリュームに使用する物理ボリュームのエクステントを指定することができます。以下の例では、ボリュームグループ testvg で、エクステントが 0 から 24 の物理ボリューム /dev/sda1 とエクステント 50 から 124 の物理ボリューム /dev/sdb1 からリニア論理ボリュームを作成します。
# lvcreate -l 100 -n testlv testvg /dev/sda1:0-24 /dev/sdb1:50-124
以下の例では、エクステントが 0 から 25 の物理ボリューム /dev/sda1 からリニア論理ボリュームを作成し、エクステント 100 で論理ボリュームの配置を続行します。
# lvcreate -l 100 -n testlv testvg /dev/sda1:0-25:100-
論理ボリュームのエクステントの割り当て方法に関するデフォルトポリシーは inherit で、ボリュームグループに同じポリシーが適用されます。このポリシーは lvchange コマンドを使用して変更できます。割り当てポリシーの詳細は、「ボリュームグループの作成」 を参照してください。

4.4.2. ストライプ化ボリュームの作成

連続的な読み取りと書き込みが大量に行われる場合は、ストライプ化論理ボリュームを作成すると、データ I/O が効率が上がります。ストライプ化ボリュームに関する一般的な情報は、「ストライプ化論理ボリューム」 を参照してください。
ストライプ化論理ボリュームを作成する場合は、lvcreate コマンドの -i 引数を使用してストライプの数を指定します。これにより、論理ボリュームがストライプ化される物理ボリュームの数が決定します。ストライプ数は、ボリュームグループ内の物理ボリュームの数よりも多くすることはできません (--alloc anywhere 引数が使用されない限り)。
ストライプ化論理ボリュームを設定する下層の物理デバイスのサイズが異なる場合、ストライブ化ボリュームの最大サイズは、一番小さいデバイスにより決まります。2 レッグのストライプの最大サイズは、小さい方のデバイスの 2 倍になります。3 レッグのストライプの最大サイズは、一番小さいデバイスの 3 倍になります。
以下のコマンドは、64 キロバイトのストライプを持つ 2 つの物理ボリュームにまたがってストライプ化論理ボリュームを作成します。論理ボリュームのサイズは 50 ギガバイトで、gfslv という名前で、ボリュームグループ vg0 から取り除かれます。
# lvcreate -L 50G -i 2 -I 64 -n gfslv vg0
リニアボリュームと同じく、ストライプに使用する物理ボリュームのエクステントを指定できます。以下のコマンドは、ストライプボリューム 100 エクステントをサイズで作成します。このエクステントのサイズは、2 つの物理ボリューム間の ストライプ(striplv )で、ボリュームグループ testvg にあります。ストライプは、/dev/sda1 のセクター 0-49 と、/dev/sdb1 のセクター 50 - 99 を使用します。
# lvcreate -l 100 -i 2 -n stripelv testvg /dev/sda1:0-49 /dev/sdb1:50-99
  Using default stripesize 64.00 KB
  Logical volume "stripelv" created

4.4.3. RAID 論理ボリューム

LVM は、RAID0、1、4、5、6、および 10 に対応します。
注記
RAID 論理ボリュームはクラスターには対応していません。RAID 論理ボリュームは、1 台のマシンに作成して排他的にアクティブにすることができますが、複数のマシンで同時にアクティブにすることはできません。排他的ではないミラー化されたボリュームが必要な場合は、「ミラー化ボリュームの作成」 で説明されているように、セグメントタイプの mirror を指定してボリュームを作成する必要があります。
RAID 論理ボリュームを作成するには、raid タイプを lvcreate コマンドの --type 引数として指定します。表4.1「RAID のセグメントタイプ」 では、可能な RAID セグメントタイプを説明します。

表4.1 RAID のセグメントタイプ

セグメントタイプ説明
raid1 RAID1 ミラーリング。-m を指定し、ストライピングを指定しない場合の、lvcreate コマンドの --type 引数のデフォルト値になります。
raid4 RAID4 専用パリティーディスク
raid5 raid5_lsと同じ
raid5_la
RAID5 left asymmetric
ローテートパリティー 0 + データ継続
raid5_ra
RAID5 right asymmetric
ローテートパリティー N + データ継続
raid5_ls
RAID5 left symmetric
ローテートパリティー 0 +データ再起動
raid5_rs
RAID5 right symmetric
ローテートパリティー N + データ再起動
raid6 raid6_zrと同じ
raid6_zr
RAID6 zero restart
ローテートパリティーゼロ (左から右) + データ再起動
raid6_nr
RAID6 N restart
ローテートパリティー N (左から右) + データ再起動
raid6_nc
RAID6 N continue
ローテートパリティー N (左から右) + データを継続
raid10
ストライピング + ミラーリング。-m を指定し、1 より大きいストライプの数を指定すると、これは lvcreate コマンドの --type 引数のデフォルト値になります。
ミラーセットのストライピング
raid0/raid0_meta (Red Hat Enterprise Linux 7.3 以降) ストライピング。RAID0 では、ストライプサイズの単位で、複数のデータサブボリュームに論理ボリュームデータが分散されます。これは、パフォーマンスを向上させるために使用します。論理ボリュームのデータは、いずれかのデータサブボリュームで障害が発生すると失われます。RAID0 ボリュームの作成については、「RAID0 ボリュームの作成 (Red Hat Enterprise Linux 7.3 以降)」 を参照してください。
ほとんどのユーザーの場合、5 つの使用可能なプライマリータイプ(raid1raid4raid5raid6raid10)のいずれかを指定するだけで十分です。
RAID 論理ボリュームを作成するとき、LVM は、データまたはアレイ内のパリティーサブボリュームごとに、サイズが 1 エクステントのメタデータサブボリュームを作成します。たとえば、2 方向の RAID1 アレイを作成すると、メタデータサブボリュームが 2 つ(lv_rmeta_0 および lv_rmeta_1)と、データサブボリュームが 2 つ(lv_rimage_0 および lv_rimage_ 1)作成されます。同様に、3 方向のストライプ(および暗黙的なパリティーデバイスが 1 つ)の RAID4 を作成すると、メタデータサブボリュームが 4 つ(lv_rmeta_0、lv_rmeta _1、lv_rmeta_2、および lv_rmeta_3)、4 つのデータサブボリューム(lv_rimage_0lv_rimage_1、lv_rimage _2、および lv_rimage_3 )が作成されます。
以下のコマンドは、ボリュームグループ my_vg 内に、1 ギガバイトの 2 方向の RAID1 アレイ my_lv を作成します。
# lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg
-m 引数に指定する値に応じて、さまざまなコピー数を指定して RAID1 アレイを作成できます。同様に、-i argument オプションに、RAID 4、5、または 6 の論理ボリュームのストライプ数を指定します。-I 引数でストライプのサイズを指定することもできます。
以下のコマンドは、ボリュームグループ my_vg に、サイズが 1 ギガバイトで、名前が my_lv の RAID5 アレイ(ストライプ 3 つ + 暗黙的なパリティードライブ 1 つ)を作成します。ストライプ数の指定は、LVM ストライプ化ボリュームの場合と同じように行います。パリティードライブは、正確な数だけ自動的に追加されます。
# lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vg
以下のコマンドは、ボリュームグループ my_vg に、サイズが 1 ギガバイトで、名前が my_lv の RAID6 アレイ(ストライプ 3 つ + 暗黙的なパリティードライブ 2 つ)を作成します。
# lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg
LVM で RAID 論理ボリュームを作成した後、他の LVM 論理ボリュームと同じようにボリュームをアクティブ化、変更、削除、表示、および使用することができます。
RAID10 論理ボリュームを作成する際に、sync 操作で論理ボリュームを初期化するのに必要なバックグラウンド I/O は、特に RAID 論理ボリュームを多数作成している場合に、その他の I/O 操作(ボリュームグループメタデータへの更新など)を LVM デバイスに押し出す可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。
RAID 論理ボリュームが初期化される速度は、復旧スロットルを実装することで制御できます。sync 操作が実行される速度は、lvcreate コマンドの --minrecoveryrate および --maxrecoveryrate オプションを使用して、これらの操作の最小および最大 I/O 速度を設定することにより制御できます。オプションは以下のように指定します。
  • --maxrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最大復旧速度を設定し、通常の I/O 操作が押し出されないようにします。速度 アレイ内の各デバイスに対して、1 秒あたりの量を指定します。接尾辞を指定しない場合は、kiB/sec/device (デバイスごとに kiB/秒) と見なされます。復旧速度を 0 に設定すると無制限になります。
  • --minrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、sync 操作の I/O が最小スループットを達成できるようにします。速度 アレイ内の各デバイスに対して、1 秒あたりの量を指定します。接尾辞を指定しない場合は、kiB/sec/device (デバイスごとに kiB/秒) と見なされます。
以下のコマンドは、最大速度が 128 kiB/sec/device で、サイズが 10 ギガバイトのストライプが 3 つある、2 方向の RAID10 アレイを作成します。このアレイは my_lv という名前で、ボリュームグループ my_vg にあります。
# lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg
RAID のスクラブ操作の最小および最大復旧速度を指定することもできます。RAID スクラビングの情報は、「RAID 論理ボリュームのスクラビング」 を参照してください。
注記
LVM RAID Calculator を使用すると、RAID ストレージで論理ボリュームを作成するコマンドを生成できます。このアプリケーションは、現在のストレージまたは作成予定のストレージについて入力した情報を使用してコマンドを生成します。LVM RAID Calculator アプリケーションは、https://access.redhat.com/labs/lvmraidcalculator/ で使用できます。
以下のセクションでは、LVM RAID デバイスで実行できる管理タスクについて説明します。

4.4.3.1. RAID0 ボリュームの作成 (Red Hat Enterprise Linux 7.3 以降)

RAID0 ボリュームを作成するコマンドの書式は以下のとおりです。
lvcreate --type raid0[_meta] --stripes Stripes --stripesize StripeSize VolumeGroup [PhysicalVolumePath ...]

表4.2 RAID0 コマンドの作成に関するパラメーター

パラメーター説明
--type raid0[_meta] raid0 を指定すると、メタデータボリュームなしで RAID0 ボリュームが作成されます。raid0_meta を指定すると、メタデータボリュームとともに RAID0 ボリュームが作成されます。RAID0 には耐障害性がないため、RAID1/10 の場合のようにミラーリングされたすべてのデータブロックを格納したり、RAID4/5/6 の場合のようにすべてのパリティーブロックを計算して格納する必要はありません。したがって、ミラーリングされたブロックまたはパリティーブロックの再同期の進行状態を把握するメタデータボリュームは必要ありません。ただし、RAID0 から RAID4/5/6/10 への変換ではメタデータボリュームが必須になり、raid0_meta を指定すると、割り当ての失敗を防ぐために、これらのメタデータが事前に割り当てられます。
--stripes Stripes 論理ボリュームを分散するデバイスの数を指定します。
--stripesize StripeSize 各ストライプのサイズをキロバイト単位で指定します。これは、次のデバイスに移動する前にデバイスに書き込まれるデータの量です。
VolumeGroup 使用するボリュームグループを指定します。
PhysicalVolumePath ... 使用するデバイスを指定します。指定しない場合は、LVM によって、Stripes オプションに指定されているデバイスの数が、各ストライプに 1 つずつ選択されます。

4.4.3.2. リニアデバイスの RAID デバイスへの変換

既存のリニア論理ボリュームを RAID デバイスに変換するには、lvconvert コマンドの --type 引数を使用します。
以下のコマンドは、ボリュームグループ my_vg のリニア論理ボリューム my_lv を、2 方向の RAID1 アレイに変換します。
# lvconvert --type raid1 -m 1 my_vg/my_lv
RAID 論理ボリュームは、メタデータとデータサブボリュームのペアで設定されているため、リニアデバイスを RAID1 アレイに変換すると、メタデータサブボリュームが作成され、リニアボリュームが存在する物理ボリューム (のいずれか) にある、作成元の論理ボリュームに関連付けられます。イメージは、メタデータ/データサブボリュームのペアに追加されます。たとえば、作成元のデバイスは以下のとおりです。
# lvs -a -o name,copy_percent,devices my_vg
  LV     Copy%  Devices
  my_lv         /dev/sde1(0)
2 方向の RAID1 アレイに変換すると、デバイスには、以下のデータとメタデータサブボリュームのペアが含まれます。
# lvconvert --type raid1 -m 1 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            6.25   my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(0)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rmeta_0]         /dev/sde1(256)
  [my_lv_rmeta_1]         /dev/sdf1(0)
複製元の論理ボリュームとペアのメタデータイメージを同じ物理ボリュームに配置できないと、lvconvert は失敗します。

4.4.3.3. LVM RAID1 論理ボリュームの LVM リニア論理ボリュームへの変換

lvconvert コマンドを使用して、既存の RAID1 LVM 論理ボリュームを LVM リニア論理ボリュームに変換するには、-m0 引数を指定します。これにより、RAID アレイを設定する全 RAID データサブボリュームおよび全 RAID メタデータサブボリュームが削除され、最高レベルの RAID1 イメージがリニア論理ボリュームとして残されます。
以下の例は、既存の LVM RAID1 論理ボリュームを示しています。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
以下のコマンドは、LVM RAID1 論理ボリューム my_vg/my_lv を、LVM リニアデバイスに変換します。
# lvconvert -m0 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV      Copy%  Devices
  my_lv          /dev/sde1(1)
LVM RAID1 論理ボリューム を LVM リニアボリュームに変換する場合は、削除する物理ボリュームを指定できます。以下の例は、2 つのイメージ( /dev/sda1 および /dev/sdb1 )で設定される LVM RAID1 論理ボリュームのレイアウトを示しています。この例では、lvconvert コマンドは /dev/sda1 を削除して、/dev/sdb1 をリニアデバイスを設定する物理ボリュームとして残すように指定します。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdb1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdb1(0)
# lvconvert -m0 my_vg/my_lv /dev/sda1
# lvs -a -o name,copy_percent,devices my_vg
  LV    Copy%  Devices
  my_lv        /dev/sdb1(1)

4.4.3.4. ミラー化 LVM デバイスの RAID1 デバイスへの変換

lvconvert コマンドを使用して、セグメントタイプが mirror の既存のミラーリングされた LVM デバイスを RAID1 LVM デバイスに変換するには、--type raid1 引数を指定します。これにより、ミラーサブボリューム(*_mimage_*)の名前が RAID サブボリューム(*_rimage_*)に変更されます。さらに、ミラーログは削除され、対応するデータサブボリュームと同じ物理ボリュームのデータサブボリューム用に、メタデータサブボリューム(*_rmeta_*)が作成されます。
以下の例は、ミラー化論理ボリューム my_vg/my_lv のレイアウトを示しています。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             15.20 my_lv_mimage_0(0),my_lv_mimage_1(0)
  [my_lv_mimage_0]        /dev/sde1(0)
  [my_lv_mimage_1]        /dev/sdf1(0)
  [my_lv_mlog]            /dev/sdd1(0)
以下のコマンドは、ミラー化論理ボリューム my_vg/my_lv を、RAID1 論理ボリュームに変換します。
# lvconvert --type raid1 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(0)
  [my_lv_rimage_1]        /dev/sdf1(0)
  [my_lv_rmeta_0]         /dev/sde1(125)
  [my_lv_rmeta_1]         /dev/sdf1(125)

4.4.3.5. RAID 論理ボリュームのサイズ変更

RAID 論理ボリュームのサイズは、以下の方法で変更できます。
  • いずれのタイプの RAID 論理ボリュームのサイズも、lvresize コマンドまたは lvextend コマンドで増やすことができます。これは、RAID イメージの数を変更するものではありません。ストライプ化 RAID 論理ボリュームでは、ストライプ化 RAID 論理ボリュームの作成時と同じ、ストライプを丸める制約が適用されます。RAID ボリュームの拡張の詳細は、「RAID ボリュームの拡張」 を参照してください。
  • いずれのタイプの RAID 論理ボリュームのサイズも、lvresize コマンドまたは lvreduce コマンドで減らすことができます。これは、RAID イメージの数を変更するものではありません。lvextend コマンドでは、ストライプ化 RAID 論理ボリュームの作成時と同じストライプを丸める制約が適用されます。論理ボリュームのサイズを変更するコマンド例は、「論理ボリュームの縮小」 を参照してください。
  • Red Hat Enterprise Linux 7.4 では、lvconvert コマンドで --stripes N パラメーターを使用すると、ストライプ化 RAID 論理ボリューム(raid4/5/6/10)のストライプの数を変更できます。このように、ストライプを追加または削除することで、RAID 論理ボリュームのサイズを増減できます。raid10 ボリュームにはストライプを追加することしかできないため注意してください。この機能は、同じ RAID レベルを維持しながら、RAID 論理ボリュームの属性を変更することができる、RAID の 再成形 機能になります。RAID 再成形と、lvconvert コマンドを使用して RAID 論理ボリュームを再生成する例は、lvmraid(7)の man ページを参照してください。

4.4.3.6. 既存の RAID1 デバイス内のイメージ数の変更

既存の RAID1 アレイ内のイメージ数は、LVM ミラーリングの初期実装でイメージ数を変更する場合と同様に変更できます。lvconvert コマンドを使用して、追加または削除するメタデータ/データサブボリュームのペアの数を指定します。LVM ミラーリングの初期実装におけるボリューム設定の変更方法については、「ミラー化ボリューム設定の変更」 を参照してください。
lvconvert コマンドを使用して RAID1 デバイスにイメージを追加する場合は、作成されるデバイス用イメージの総数を指定するか、デバイスに追加するイメージ数を指定できます。メタデータ/データイメージのペアを置く物理ボリュームを指定することもできます。
メタデータサブボリューム( *_rmeta_*という名前)は、対応するデータサブボリューム( *_rimage_*)と同じ物理デバイスに常に存在します。メタデータ/データのサブボリュームのペアは、--alloc anywhere を指定しない限り、RAID アレイにある別のメタデータ/データサブボリュームのペアと同じ物理ボリュームには作成されません。
RAID1 ボリュームにイメージを追加するコマンドの形式は、以下のとおりです。
lvconvert -m new_absolute_count vg/lv [removable_PVs]
lvconvert -m +num_additional_images vg/lv [removable_PVs]
たとえば、以下のコマンドは、2 方向の RAID1 アレイである LVM デバイス my_vg/my_lv を表示します。
# lvs -a -o name,copy_percent,devices my_vg
  LV                Copy%  Devices
  my_lv             6.25    my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]         /dev/sde1(0)
  [my_lv_rimage_1]         /dev/sdf1(1)
  [my_lv_rmeta_0]          /dev/sde1(256)
  [my_lv_rmeta_1]          /dev/sdf1(0)
以下のコマンドは、2 方向の RAID1 デバイス my_vg/my_lv を、3 方向の RAID1 デバイスに変換します。
# lvconvert -m 2 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv              6.25 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sde1(0)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rimage_2]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sde1(256)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  [my_lv_rmeta_2]         /dev/sdg1(0)
イメージを RAID1 アレイに追加する場合は、イメージに使用する物理ボリュームを指定できます。次のコマンドは、2 方向の RAID1 デバイス my_vg/my_lv を 3 方向の RAID1 デバイスに変換し、物理ボリューム /dev/sdd1 がアレイに使用されるように指定します。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             56.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdb1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdb1(0)
# lvconvert -m 2 my_vg/my_lv /dev/sdd1
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             28.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdb1(1)
  [my_lv_rimage_2]        /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdb1(0)
  [my_lv_rmeta_2]         /dev/sdd1(0)
RAID1 アレイからイメージを削除するには、以下のコマンドを使用します。lvconvert コマンドを使用して RAID1 デバイスからイメージを削除する場合、作成されるデバイスのイメージの合計数を指定するか、デバイスから削除するイメージ数を指定できます。または、デバイスを削除する物理ボリュームを指定することもできます。
lvconvert -m new_absolute_count vg/lv [removable_PVs]
lvconvert -m -num_fewer_images vg/lv [removable_PVs]
また、イメージとその関連付けられたメタデータのサブボリュームを削除すると、それよりも大きな番号のイメージがそのスロットを引き継ぎます。lv_rimage_ 0、lv_rimage_ 1、および lv_rimage _2 で構成される 3 方向 RAID1 アレイからlv_rimage_ 1 を削除すると、これにより lv_rimage_ 0 と lv_rimage_ 1 で構成される RAID1 アレイが作成されます。サブボリューム lv_rimage_ 2 の名前が、空のスロットを引き継いで lv_rimage_ 1 になります。
以下の例は、3 方向の RAID1 論理ボリューム my_vg/my_lv のレイアウトを示しています。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rimage_2]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  [my_lv_rmeta_2]         /dev/sdg1(0)
以下のコマンドは、3 方向の RAID1 論理ボリュームを、2 方向の RAID1 論理ボリュームに変換します。
# lvconvert -m1 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
以下のコマンドは、3 方向の RAID1 論理ボリュームを 2 方向 RAID1 論理ボリュームに変換し、/dev/sde1 として削除するイメージを含む物理ボリュームを指定します。
# lvconvert -m1 my_vg/my_lv /dev/sde1
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sdf1(1)
  [my_lv_rimage_1]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sdf1(0)
  [my_lv_rmeta_1]         /dev/sdg1(0)

4.4.3.7. RAID イメージを複数の論理ボリュームに分割

RAID 論理ボリュームのイメージを分割して新しい論理ボリュームを形成できます。RAID イメージを分割する手順は、「ミラー化論理ボリュームの冗長イメージの分割」 で説明されているように、ミラー化論理ボリュームの冗長イメージを分割する手順と同じです。
RAID イメージを分割するコマンドの形式は、以下のとおりです。
lvconvert --splitmirrors count -n splitname vg/lv [removable_PVs]
既存の RAID1 論理ボリュームから RAID イメージを削除する場合と同様に (「既存の RAID1 デバイス内のイメージ数の変更」 で説明)、RAID データのサブボリューム (およびその関連付けられたメタデータのサブボリューム) をデバイスから削除する場合、それより大きい番号のイメージは、そのスロットを埋めるために番号が変更になります。そのため、RAID アレイを構成する論理ボリューム上のインデックス番号は連続する整数となります。
注記
RAID1 アレイがまだ同期していない場合は、RAID イメージを分割できません。
以下の例は、2 方向の RAID1 論理ボリューム my_lv を、my_lvnew の 2 つのリニア論理ボリュームに分割します。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             12.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
# lvconvert --splitmirror 1 -n new my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV      Copy%  Devices
  my_lv          /dev/sde1(1)
  new            /dev/sdf1(1)
以下の例は、3 方向の RAID1 論理ボリューム my_lv を、2 方向の RAID1 論理ボリューム my_lv とリニア論理ボリューム newに分割します。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rimage_2]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  [my_lv_rmeta_2]         /dev/sdg1(0)
# lvconvert --splitmirror 1 -n new my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV            Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  new                     /dev/sdg1(1)

4.4.3.8. RAID イメージの分割とマージ

lvconvert コマンドの --splitmirrors 引数とともに --trackchanges 引数を使用すると、すべての変更を追跡しながら、RAID1 アレイのイメージを一時的に読み取り専用に分割できます。これにより、イメージの分割後に変更になったアレイの部分のみを再同期する一方で、後でそのイメージをアレイにマージし直すことができます。
RAID イメージを分割する lvconvert コマンドの形式は、以下のとおりです。
lvconvert --splitmirrors count --trackchanges vg/lv [removable_PVs]
--trackchanges 引数を使用して RAID イメージを分割する場合、分割するイメージを指定することはできますが、分割されるボリューム名を変更することはできません。また、分割して作成されたボリュームには以下の制限があります。
  • 作成された新規ボリュームは読み取り専用です。
  • 新規ボリュームのサイズは変更できません。
  • 残りのアレイの名前は変更できません。
  • 残りのアレイのサイズは変更できません。
  • 新規のボリュームと、残りのアレイを個別にアクティブにすることはできません。
指定した --trackchanges 引数を使用して分割されたイメージをマージするには、lvconvert コマンドに --merge 引数を指定して実行します。イメージをマージすると、イメージが分割されてから変更したアレイの部分のみが再同期されます。
RAID イメージをマージする lvconvert コマンドの形式は、以下のとおりです。
lvconvert --merge raid_image
以下の例は、残りのアレイへの変更を追跡する一方で、RAID1 論理ボリュームを作成し、そのボリュームからイメージを分割します。
# lvcreate --type raid1 -m 2 -L 1G -n my_lv .vg
  Logical volume "my_lv" created
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sdb1(1)
  [my_lv_rimage_1]        /dev/sdc1(1)
  [my_lv_rimage_2]        /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sdb1(0)
  [my_lv_rmeta_1]         /dev/sdc1(0)
  [my_lv_rmeta_2]         /dev/sdd1(0)
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_lv_rimage_2 split from my_lv for read-only purposes.
  Use 'lvconvert --merge my_vg/my_lv_rimage_2' to merge back into my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sdb1(1)
  [my_lv_rimage_1]        /dev/sdc1(1)
  my_lv_rimage_2          /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sdb1(0)
  [my_lv_rmeta_1]         /dev/sdc1(0)
  [my_lv_rmeta_2]         /dev/sdd1(0)
以下の例は、残りのアレイへの変更の追跡時に、RAID1 ボリュームからイメージを分割します。その後、ボリュームをアレイにマージし直しています。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  lv_rimage_1 split from my_lv for read-only purposes.
  Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sdc1(1)
  my_lv_rimage_1          /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sdc1(0)
  [my_lv_rmeta_1]         /dev/sdd1(0)
# lvconvert --merge my_vg/my_lv_rimage_1
  my_vg/my_lv_rimage_1 successfully merged back into my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sdc1(1)
  [my_lv_rimage_1]        /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sdc1(0)
  [my_lv_rmeta_1]         /dev/sdd1(0)
RAID1 ボリュームからイメージを分割したら、2 番目の lvconvert --splitmirrors コマンドを実行し、--trackchanges 引数を指定せずにイメージを分割する初期 lvconvert コマンドを繰り返すことで、分割された永続化できます。これにより、--trackchanges 引数が作成されたリンクが破損します。
--trackchanges 引数を使用してイメージを分割した後に、意図的に追跡されているイメージを永続的に分割しない限り、そのアレイで後続の lvconvert --splitmirrors コマンドを発行することはできません。
以下の一連のコマンドは、イメージを分割してこれを追跡してから、追跡されるイメージを永久に分割します。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_lv_rimage_1 split from my_lv for read-only purposes.
  Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv
# lvconvert --splitmirrors 1 -n new my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV   Copy%  Devices
  my_lv          /dev/sdc1(1)
  new            /dev/sdd1(1)
ただし、以下の一連のコマンドは失敗する点に注意してください。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_lv_rimage_1 split from my_lv for read-only purposes.
  Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  Cannot track more than one split image at a time
同様に、以下の一連のコマンドも失敗します。分割されたイメージが追跡されていないためです。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_lv_rimage_1 split from my_lv for read-only purposes.
  Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sdc1(1)
  my_lv_rimage_1          /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sdc1(0)
  [my_lv_rmeta_1]         /dev/sdd1(0)
# lvconvert --splitmirrors 1 -n new my_vg/my_lv /dev/sdc1
  Unable to split additional image from my_lv while tracking changes for my_lv_rimage_1

4.4.3.9. RAID 障害ポリシーの設定

LVM RAID は、lvm.conf ファイルの raid_fault_policy フィールドで定義された設定に基づいて、デバイス障害を自動で処理します。
  • raid_fault_policy フィールドが allocate に設定されている場合、システムは障害が発生したデバイスをボリュームグループの予備デバイスに置き換えようとします。予備のデバイスがないと、システムログにレポートが送信されます。
  • raid_fault_policy フィールドが warn に設定されている場合、システムは警告を生成し、デバイスが失敗したことを示します。これにより、ユーザーは実施する一連の動作を確認できます。
残りのデバイスで該当するポリシーに対応できる限り、RAID 論理ボリュームは操作を続行します。
4.4.3.9.1. allocateRAID 障害ポリシー
以下の例では、raid_fault_policy フィールドは lvm.conf ファイルで allocate に設定されています。RAID 論理ボリュームは、以下のように配置されます。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rimage_2]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  [my_lv_rmeta_2]         /dev/sdg1(0)
/dev/sde デバイスに障害が発生した場合、システムログはエラーメッセージを表示します。
# grep lvm /var/log/messages 
Jan 17 15:57:18 bp-01 lvm[8599]: Device #0 of raid1 array, my_vg-my_lv, has failed.
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
250994294784: Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
250994376704: Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at 0:
Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
4096: Input/output error
Jan 17 15:57:19 bp-01 lvm[8599]: Couldn't find device with uuid
3lugiV-3eSP-AFAR-sdrP-H20O-wM2M-qdMANy.
Jan 17 15:57:27 bp-01 lvm[8599]: raid1 array, my_vg-my_lv, is not in-sync.
Jan 17 15:57:36 bp-01 lvm[8599]: raid1 array, my_vg-my_lv, is now in-sync.
raid_fault_policy フィールドが allocate に設定されているため、障害が発生したデバイスは、ボリュームグループの新しいデバイスに置き換えられます。
# lvs -a -o name,copy_percent,devices vg
  Couldn't find device with uuid 3lugiV-3eSP-AFAR-sdrP-H20O-wM2M-qdMANy.
  LV            Copy%  Devices
  lv            100.00 lv_rimage_0(0),lv_rimage_1(0),lv_rimage_2(0)
  [lv_rimage_0]        /dev/sdh1(1)
  [lv_rimage_1]        /dev/sdf1(1)
  [lv_rimage_2]        /dev/sdg1(1)
  [lv_rmeta_0]         /dev/sdh1(0)
  [lv_rmeta_1]         /dev/sdf1(0)
  [lv_rmeta_2]         /dev/sdg1(0)
障害が発生したデバイスを交換しても、LVM は、障害が発生したデバイスが見つけられないと示すことに注意してください。これは、障害が発生したデバイスが、RAID 論理ボリュームからは削除されても、ボリュームグループからは削除されていないためです。障害が発生したデバイスをボリュームグループから削除するには、vgreduce --removemissing VG を実行します。
raid_fault_policyallocate に設定されているが、予備のデバイスがない場合は、割り当てに失敗し、論理ボリュームはそのままになります。割り当てが失敗した場合は、「warnRAID 障害ポリシー」 で説明されているように、ドライブを修正し、その後で論理ボリュームを非アクティブ化およびアクティブ化できます。また、「RAID デバイスの交換」 で説明されているように、障害が発生したデバイスを置き換えることも可能です。
4.4.3.9.2. warnRAID 障害ポリシー
以下の例では、raid_fault_policy フィールドは lvm.conf ファイルで warn に設定されています。RAID 論理ボリュームは、以下のように配置されます。
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sdh1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rimage_2]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sdh1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  [my_lv_rmeta_2]         /dev/sdg1(0)
/dev/sdh デバイスが失敗すると、システムログはエラーメッセージを表示します。ただし、この場合、LVM はイメージの 1 つを置き換えて、RAID デバイスを自動的に修復しようとはしません。代わりに、デバイスに障害が発生した場合は、以下に示すように lvconvert コマンドの --repair 引数を使用してデバイスを置き換えることができます。
# lvconvert --repair my_vg/my_lv
  /dev/sdh1: read failed after 0 of 2048 at 250994294784: Input/output error
  /dev/sdh1: read failed after 0 of 2048 at 250994376704: Input/output error
  /dev/sdh1: read failed after 0 of 2048 at 0: Input/output error
  /dev/sdh1: read failed after 0 of 2048 at 4096: Input/output error
  Couldn't find device with uuid fbI0YO-GX7x-firU-Vy5o-vzwx-vAKZ-feRxfF.
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y

# lvs -a -o name,copy_percent,devices my_vg
  Couldn't find device with uuid fbI0YO-GX7x-firU-Vy5o-vzwx-vAKZ-feRxfF.
  LV               Copy%  Devices
  my_lv             64.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sde1(1)
  [my_lv_rimage_1]        /dev/sdf1(1)
  [my_lv_rimage_2]        /dev/sdg1(1)
  [my_lv_rmeta_0]         /dev/sde1(0)
  [my_lv_rmeta_1]         /dev/sdf1(0)
  [my_lv_rmeta_2]         /dev/sdg1(0)
障害が発生したデバイスを交換しても、LVM は、障害が発生したデバイスが見つけられないと示すことに注意してください。これは、障害が発生したデバイスが、RAID 論理ボリュームからは削除されても、ボリュームグループからは削除されていないためです。障害が発生したデバイスをボリュームグループから削除するには、vgreduce --removemissing VG を実行します。
デバイス障害が一時的な障害であったり、障害が発生したデバイスの修復が可能な場合は、lvchange コマンドの --refresh オプションを使用して、障害が発生したデバイスの復旧を開始できます。これまでは、論理ボリュームを非アクティブ化してからアクティブ化することが必要でした。
次のコマンドは、論理ボリュームを更新します。
# lvchange --refresh my_vg/my_lv

4.4.3.10. RAID デバイスの交換

RAID は従来の LVM ミラーリングとは異なります。LVM ミラーリングでは、障害が発生したデバイスを削除する必要がありました。削除しないと、ミラー化論理ボリュームがハングします。RAID アレイは、障害があるデバイスがあっても稼働し続けることができます。RAID1 以外の RAID タイプでデバイスを削除すると、レベルが低い RAID に変換されます (たとえば、RAID6 から RAID5、もしくは RAID4 または RAID5 から RAID0)。したがって、障害が発生したデバイスを無条件に削除してから交換するのではなく、lvconvert コマンドで --replace 引数を使用して、RAID ボリュームのデバイスを 1 回で置き換えることができます。
lvconvert --replace の形式は、以下のとおりです。
lvconvert --replace dev_to_remove vg/lv [possible_replacements]
以下の例では、RAID1 論理ボリュームを作成した後に、そのボリューム内のデバイスを交換しています。
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg
  Logical volume "my_lv" created
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sdb1(1)
  [my_lv_rimage_1]        /dev/sdb2(1)
  [my_lv_rimage_2]        /dev/sdc1(1)
  [my_lv_rmeta_0]         /dev/sdb1(0)
  [my_lv_rmeta_1]         /dev/sdb2(0)
  [my_lv_rmeta_2]         /dev/sdc1(0)
# lvconvert --replace /dev/sdb2 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             37.50 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sdb1(1)
  [my_lv_rimage_1]        /dev/sdc2(1)
  [my_lv_rimage_2]        /dev/sdc1(1)
  [my_lv_rmeta_0]         /dev/sdb1(0)
  [my_lv_rmeta_1]         /dev/sdc2(0)
  [my_lv_rmeta_2]         /dev/sdc1(0)
以下の例では、RAID1 論理ボリュームを作成した後に、そのボリュームのデバイスを交換し、交換したデバイスに使用する物理ボリュームを指定しています。
# lvcreate --type raid1 -m 1 -L 100 -n my_lv my_vg
  Logical volume "my_lv" created
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdb1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdb1(0)
# pvs
  PV          VG       Fmt  Attr PSize    PFree
  /dev/sda1   my_vg    lvm2 a--  1020.00m  916.00m
  /dev/sdb1   my_vg    lvm2 a--  1020.00m  916.00m
  /dev/sdc1   my_vg    lvm2 a--  1020.00m 1020.00m
  /dev/sdd1   my_vg    lvm2 a--  1020.00m 1020.00m
# lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             28.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdd1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdd1(0)
一度に 2 つ以上の RAID デバイスを交換するには、以下の例のように複数の replace 引数を指定します。
# lvcreate --type raid1 -m 2 -L 100 -n my_lv my_vg
  Logical volume "my_lv" created
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv            100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdb1(1)
  [my_lv_rimage_2]        /dev/sdc1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdb1(0)
  [my_lv_rmeta_2]         /dev/sdc1(0)
# lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
  LV               Copy%  Devices
  my_lv             60.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
  [my_lv_rimage_0]        /dev/sda1(1)
  [my_lv_rimage_1]        /dev/sdd1(1)
  [my_lv_rimage_2]        /dev/sde1(1)
  [my_lv_rmeta_0]         /dev/sda1(0)
  [my_lv_rmeta_1]         /dev/sdd1(0)
  [my_lv_rmeta_2]         /dev/sde1(0)
注記
lvconvert --replace コマンドを使用して交換ドライブを指定する場合、交換用のドライブは、アレイですでに使用されている追加領域から割り当てるべきではありません。たとえば、lv_rimage_0lv_rimage_ 1 は同じ物理ボリュームに配置しないでください。

4.4.3.11. RAID 論理ボリュームのスクラビング

LVM は、RAID 論理ボリュームのスクラビングに対応します。RAID スクラビングは、アレイ内のデータおよびパリティーブロックをすべて読み込み、それが一貫しているかどうかを確認するプロセスです。
lvchange コマンドの --syncaction オプションを使用して、RAID スクラビング操作を開始します。check または repair のいずれかの操作を指定します。check 操作はアレイを超え、アレイ内の不一致の数を記録しますが、それらを修復しません。修復 操作では、検出時に不一致が修正します。
RAID 論理ボリュームのスクラビングを実行するコマンドの形式は以下のとおりです。
lvchange --syncaction {check|repair} vg/raid_lv
注記
lvchange --syncaction repair vg/raid_lv 操作は、lvconvert --repair vg/raid_lv と同じ機能を実行しません。lvchange --syncaction repair 操作は、アレイでバックグラウンドの同期操作を開始しますが、lvconvert --repair 操作は、ミラーまたは RAID 論理ボリュームで障害が発生したデバイスを修復または交換するように設計されています。
新しい RAID スクラビング操作をサポートするため、lvs コマンドは、raid_sync_actionraid_mismatch_count の 2 つの新しい出力可能なフィールドをサポートするようになりました。これらのフィールドは、デフォルトでは出力されません。これらのフィールドを表示するには、以下のように lvs-o パラメーターを使用して指定します。
lvs -o +raid_sync_action,raid_mismatch_count vg/lv
raid_sync_action フィールドは、raid ボリュームが現在実行している同期操作を表示します。これには、以下のいずれかの値を使用できます。
  • idle: すべての同期操作が完了している(何も実行しません)。
  • 再同期: アレイを初期化、またはマシン障害後の復旧を実行する。
  • recover: アレイ内のデバイスの置き換え
  • check: アレイの不一致を検索する。
  • repair: 不整合を検索し、修復します。
raid_mismatch_count フィールドは、check 操作時に見つかった不一致の数を表示します。
lvs コマンドの Cpy%Sync フィールドは、check および repair を含む raid_sync_action 操作のいずれかの進捗を出力するようになりました。
lvs コマンドの lv_attr フィールドは、RAID スクラビング操作をサポートする追加のインジケーターを提供するようになりました。このフィールドのビット 9 は、論理ボリュームの正常性を示し、以下のインジケーターに対応するようになりました。
  • (m) ismatches (不一致) は、RAID 論理ボリュームに不一致があることを示します。この文字は、スクラビング操作で RAID に一貫性がない部分があることを検出した後に表示されます。
  • (r)efresh (更新) は、LVM がデバイスラベルを読み取り、デバイスを稼働できると認識した場合でも、RAID アレイのデバイスに障害が発生し、カーネルがこれを障害と認識していることを示します。この論理ボリュームを、デバイスが利用可能になったことをカーネルに通知するために更新する (refresh) か、もしくはデバイスに障害が発生したと思われる場合はデバイスを置き換える (replace) 必要があります。
lvs コマンドについての情報は、「オブジェクト表示フィールド」 を参照してください。
RAID スクラビング操作を実行する際に、sync 操作で必要になるバックグラウンド I/O は、その他の I/O 操作(ボリュームグループメタデータへの更新など)を LVM デバイスに押し出す可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。復旧スロットルを実装して RAID 論理ボリュームのスクラビングを実行する速度を制御できます。
sync 操作が実行される速度は、lvchange コマンドの --minrecoveryrate および --maxrecoveryrate オプションを使用して、これらの操作の最小および最大 I/O 速度を設定することにより制御できます。オプションは以下のように指定します。
  • --maxrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最大復旧速度を設定し、通常の I/O 操作が押し出されないようにします。速度 アレイ内の各デバイスに対して、1 秒あたりの量を指定します。接尾辞を指定しない場合は、kiB/sec/device (デバイスごとに kiB/秒) と見なされます。復旧速度を 0 に設定すると無制限になります。
  • --minrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、sync 操作の I/O が最小スループットを達成できるようにします。速度 アレイ内の各デバイスに対して、1 秒あたりの量を指定します。接尾辞を指定しない場合は、kiB/sec/device (デバイスごとに kiB/秒) と見なされます。

4.4.3.12. RAID テイクオーバー (Red Hat Enterprise Linux 7.4 以降)

LVM は、Raid テイクオーバー をサポートします。これは、RAID 論理ボリュームの RAID レベルを別のレベル (たとえば RAID 5 から RAID 6) へ変えることを意味します。RAID レベルの変更は、通常、デバイスの耐障害性を増減したり、論理ボリュームのストライプ化をやり直すために行われます。RAID テイクオーバーには lvconvert を使用します。RAID テイクオーバーの詳細と、lvconvert を使用して RAID 論理ボリュームを変換する例は、lvmraid(7)の man ページを参照してください。

4.4.3.13. RAID 論理ボリュームの再成形 (Red Hat Enterprise Linux 7.4 以降)

RAID 再成形 は、同じ RAID レベルを維持しつつ、RAID 論理ボリュームの属性を変更することを示しています。変更できる属性には、RAID レイアウト、ストライプのサイズ、ストライプの数などがあります。RAID 再成形と、lvconvert コマンドを使用して RAID 論理ボリュームを再生成する例は、lvmraid(7)の man ページを参照してください。

4.4.3.14. RAID1 論理ボリュームでの I/O 操作の制御

lvchange コマンドの --writemostly パラメーターおよび --writebehind パラメーターを使用して、RAID1 論理ボリュームのデバイスの I/O 操作を制御できます。これらのパラメーターを使用する書式は以下のとおりです。
  • --[RAID]writemostly PhysicalVolume[:{t|y|n}]
    RAID1 論理ボリュームのデバイスを write-mostly としてマークします。これらのドライブのすべての読み取りは、必要でない限り回避されます。このパラメーターを設定することにより、ドライブに対する I/O 操作の回数を最小限に抑えることができます。デフォルトでは、論理ボリュームに指定した物理ボリュームの write-mostly 属性を yes に設定します。:n を物理ボリュームに追加して write-mostly フラグを削除したり、:t を指定して値を切り替えたりすることができます。--writemostly 引数は、1 つのコマンドで複数回指定できるため、論理ボリューム内のすべての物理ボリュームに対して、一度に書き込み属性を切り替えることができます。
  • --[raid]writebehind IOCount
    write-mostly としてマークされている RAID1 論理ボリュームのデバイスに許可される未処理の書き込みの最大数を指定します。この値を上回ると書き込みは同期され、設定要素になっているデバイスへの書き込みがすべて、アレイが書き込みの完了を知らせる前に完了してしまいます。この値をゼロに設定すると、設定はクリアになり、システムが値を任意に選択できるようになります。

4.4.3.15. RAID 論理ボリュームのリージョンサイズの変更 (Red Hat Enterprise Linux 7.4 以降)

RAID 論理ボリュームを作成すると、論理ボリュームのリージョンサイズは、/etc/lvm/lvm.conf ファイルの raid_region_size パラメーターの値になります。このデフォルト値は、lvcreate コマンドの -R オプションで上書きできます。
RAID 論理ボリュームを作成したら、lvconvert コマンドの -R オプションを使用してボリュームのリージョンサイズを変更できます。以下の例では、論理ボリューム vg/raidlv のリージョンサイズを 4096K に変更します。リージョンサイズを変更する場合は、RAID ボリュームを同期する必要があります。
# lvconvert -R 4096K vg/raid1
Do you really want to change the region_size 512.00 KiB of LV vg/raid1 to 4.00 MiB? [y/n]: y
  Changed region size on RAID LV vg/raid1 to 4.00 MiB.

4.4.4. ミラー化ボリュームの作成

Red Hat Enterprise Linux 7.0 リリースの場合、「RAID 論理ボリューム」 で説明されているように、LVM は RAID 1/4/5/6/10 に対応します。RAID 論理ボリュームはクラスターには対応していません。RAID 論理ボリュームは、1 台のマシンに作成して排他的にアクティブにすることができますが、複数のマシンで同時にアクティブにすることはできません。排他的ではないミラー化されたボリュームが必要な場合は、このセクションで説明するように、セグメントタイプの mirror を指定してボリュームを作成する必要があります。
注記
mirror セグメントタイプを指定した既存の LVM デバイスを RAID1 LVM デバイスに変換する方法は、「ミラー化 LVM デバイスの RAID1 デバイスへの変換」 を参照してください。
注記
ミラー化された LVM 論理ボリュームをクラスター内に作成するには、単一ノード上に mirror のセグメントタイプでミラー化 LVM 論理ボリュームを作成するのと同じコマンドと手順が必要です。ただし、クラスター内にミラー化された LVM ボリュームを作成するには、クラスターとクラスターミラーインフラストラクチャーが実行中で、クラスターがクォーラムである必要があり、クラスターロッキングを有効にするには lvm.conf ファイルのロッキングタイプを適切に設定する必要があります。クラスター内におけるミラー化ボリュームの作成例は、「クラスター内でのミラー化 LVM 論理ボリュームの作成」 をご覧ください。
単一クラスター内の複数のノードから短時間に連続して複数の LVM ミラーを作成または変換するコマンドを実行しようとすると、これらのコマンドのバックログが生じる場合があります。これによって、要求した操作がタイムアウトになって失敗する可能性があります。この問題を回避するために、そのクラスターのいずれかのノードから、クラスターミラー作成コマンドを実行することを推奨します。
ミラー化ボリュームを作成する場合、lvcreate コマンドの -m 引数で作成するデータのコピー数を指定します。-m1 を指定すると、ファイルシステムの 2 つのコピー (リニア論理ボリュームと 1 つのコピー) が作成されます。同様に、-m2 を指定すると 2 つのミラーを作成し、ファイルシステムの 3 つのコピーを生成します。
以下のコマンドは、ミラーが 1 つあるミラー化論理ボリュームを作成します。ボリュームのサイズは 50 ギガバイトで、mirrorlv という名前であり、ボリュームグループ vg0 から取得されます。
# lvcreate --type mirror -L 50G -m 1 -n mirrorlv vg0
デフォルトでは、LVM ミラーデバイスは、複製されるデバイスを、サイズが 512KB のリージョンに分割します。lvcreate コマンドの -R 引数を使用して、リージョンサイズをメガバイトで指定できます。また、lvm.conf ファイルで mirror_region_size 設定を編集して、デフォルトのリージョンサイズを変更することもできます。
注記
クラスターインフラストラクチャーの制限により、デフォルトのリージョンサイズ (512KB) では、1.5TB を超えるクラスターミラーは作成できません。1.5TB よりも大きなミラーを必要とするユーザーは、リージョンサイズをデフォルトよりも大きくする必要があります。リージョンサイズが小さいままだと、LVM の作成がハングしてします。また、その他の LVM コマンドでもハングの可能性があります。
1.5TB を超えるミラーのリージョンサイズを指定する一般的なガイドラインとして、lvcreate コマンドの -R 引数としてその番号を使用して、ミラーサイズをテラバイトで取得し、その番号を次の 2 の累乗に上げることができます。たとえば、ミラーサイズが 1.5TB の場合は、-R 2 を指定できます。ミラーサイズが 3TB の場合は、-R 4 を指定できます。ミラーサイズが 5TB の場合、-R 8 を指定できます。
以下のコマンドは、リージョンサイズが 2MB のミラー化論理ボリュームを作成します。
# lvcreate --type mirror -m 1 -L 2T -R 2 -n mirror vol_group
ミラーが作成されると、ミラーのリージョンは同期されます。ミラーコンポーネントが大きい場合は、同期プロセスに時間がかかる可能性があります。回復する必要のないミラーを新規に作成する場合は、最初のデバイスからの初期同期が不要であることを示す --nosync 引数を指定できます。
LVM は、単一または複数のミラーと同期するリージョンを追跡するのに使用する小さなログを維持します。デフォルトでは、このログはディスクに保持され、再起動後も永続化するため、マシンが再起動/クラッシュするたびにミラーを再同期する必要はありません。--mirrorlog 引数を使用すると、このログがメモリーで保持されるように指定できるため、余分なログデバイスが不要になります。ただし、この場合は、再起動のたびにミラー全体を再同期する必要がでてきます。
以下のコマンドは、ボリュームグループ bigvg からミラー化論理ボリュームを作成します。論理ボリュームは ondiskmirvol という名前で、ミラーが 1 つあります。ボリュームのサイズは 12MB で、ミラーログをメモリーに保持します。
# lvcreate --type mirror -L 12MB -m 1 --mirrorlog core -n ondiskmirvol bigvg
  Logical volume "ondiskmirvol" created
このミラーログは、ミラーレッグが作成されるデバイスとは異なるデバイスで作成されます。ただし、vgcreate コマンドの --alloc anywhere 引数を使用して、ミラーレッグのいずれかと同じデバイスにミラーログを作成できます。ただし、これによりパフォーマンスが低下する場合がありますが、配下のデバイスが 2 つしかなくてもミラーを作成できます。
以下のコマンドは、単一のミラーを持つミラー化論理ボリュームを作成します。このミラーログはミラーレッグの 1 つと同じデバイス上にあります。この例では、ボリュームグループ vg0 は 2 つのデバイスのみで設定されます。このコマンドを使用すると、ボリュームグループ vg0 に、名前が mirrorlv という名前の 500 MB のボリュームが作成されます。
# lvcreate --type mirror -L 500M -m 1 -n mirrorlv -alloc anywhere vg0
注記
クラスター化されたミラーでは、ミラーログ管理は、その時点でクラスター ID の最も低いクラスターノードによって行われます。そのため、クラスターミラーログを保持するデバイスがクラスターのサブセット上で利用できなくなる場合、最も低い ID を持つクラスターノードがミラーログへのアクセスを保持する限り、クラスター化されたミラーは影響を受けることなく、機能を継続することができます。ミラーは影響を受けないため、自動修正アクション (修復) も実行されません。ただし、最も低い ID のクラスターノードがミラーログにアクセスできなくなると、(他のノードからログへのアクセスが可能かどうかにかかわらず) 自動アクションが作動します。
ミラーリングされているミラーログを作成するには、--mirrorlog ミラーリングされた 引数を指定できます。以下のコマンドは、ボリュームグループ bigvg からミラー化論理ボリュームを作成します。論理ボリュームは twologvol という名前で、1 つのミラーがあります。このボリュームのサイズは 12MB で、ミラーログがミラー化され、各ログは別個のデバイス上に保管されます。
# lvcreate --type mirror -L 12MB -m 1 --mirrorlog mirrored -n twologvol bigvg
  Logical volume "twologvol" created
標準のミラーログと同様に、vgcreate コマンドの --alloc anywhere 引数を使用すると、ミラーレッグと同じデバイスに冗長ミラーログを作成できます。これによってパフォーマンスが低下する可能性がありますが、各ログを別個のデバイス上に保管するための配下のデバイス数がミラーレッグに対して十分でない場合でも、冗長ミラーログの作成が可能となります。
ミラーが作成されると、ミラーのリージョンは同期されます。ミラーコンポーネントが大きい場合は、同期プロセスに時間がかかる可能性があります。回復する必要のないミラーを新規に作成する場合は、最初のデバイスからの初期同期が不要であることを示す --nosync 引数を指定できます。
ミラーレッグとログ用に使用するデバイス、およびそのデバイスで使用するエクステントを指定することができます。ログを特定のディスクに強制するには、それが配置されるディスク上のエクステントを正確に 1 つ指定します。LVM は、コマンドラインでデバイスがリスト表示される順序を必ずしも優先しません。物理ボリュームがリストにあれば、それが割り当てが実行される唯一の領域になります。割り当て済みの物理エクステントがリストにある場合、そのエクステントは無視されます。
以下のコマンドは、単一のミラーとミラー化されない単一ログを持つミラー化論理ボリュームを作成します。ボリュームのサイズは 500 MB で、これは mirrorlv という名前で、ボリュームグループ vg0 から取得されます。最初のミラーレッグはデバイス /dev/sda1 にあり、2 番目のミラーレッグはデバイス /dev/sdb1 にあり、ミラーログは /dev/sdc1 にあります。
# lvcreate --type mirror -L 500M -m 1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1
以下のコマンドは、ミラーが 1 つあるミラー化論理ボリュームを作成します。ボリュームのサイズは 500 MB で、これは mirrorlv という名前で、ボリュームグループ vg0 から取得されます。最初のミラーレッグは、デバイス /dev/sda1 のエクステント 0 から 499、ミラーの 2 番目のレッグは、デバイス /dev/sdb1 のエクステント 0 から 499 に、ミラーログはデバイス /dev/sdc1 のエクステント 0 から始まります。エクステントサイズは 1MB です。指定されたエクステントのいずれかが割り当て済みである場合は、それらは無視されます。
# lvcreate --type mirror -L 500M -m 1 -n mirrorlv vg0 /dev/sda1:0-499 /dev/sdb1:0-499 /dev/sdc1:0
注記
単一の論理ボリューム内でストライピングとミラーリングを併用することが可能です。論理ボリュームの作成と同時にミラーの数 (--mirrors X) とストライプの数 (--stripes Y) を指定すると、ミラーデバイスの設定デバイスがストライプ化されます。

4.4.4.1. ミラー化論理ボリュームの障害ポリシー

lvm.conf ファイルの activation セクションにある mirror_image_fault_policy パラメーターおよび mirror_log_fault_policy パラメーターを使用すると、デバイスの障害が発生した場合にミラー化論理ボリュームがどのように動作するかを定義できます。これらのパラメーターが remove に設定されると、システムは障害のあるデバイスを削除して、そのデバイスなしで実行しようとします。これらのパラメーターが 割り当て に設定されると、システムは障害のあるデバイスを削除し、そのデバイスの代わりとなる新しいデバイスの領域の割り当てを試みます。代替に適切なデバイスと領域を割り当てることができない場合、このポリシーは remove ポリシーのように機能します。
デフォルトでは、mirror_log_fault_policy パラメーターは allocate に設定されます。ログにこのポリシーを使用すると、処理が高速になり、クラッシュやシステムの再起動時にも同期状態を記憶する機能が維持されます。このポリシーを remove に設定すると、ログデバイスに障害が発生したときに、ミラーがインメモリーログを使用するよう変換されます。この場合、ミラーはクラッシュと再起動後に同期状態を記憶せず、ミラー全体が再同期されます。
デフォルトでは、mirror_image_fault_policy パラメーターは remove に設定されます。このポリシーでは、ミラーイメージに障害が発生すると、良好なコピーが 1 つしか残っていない場合は、ミラーが非ミラー化デバイスに変換されます。ミラーデバイス用にこのポリシーを allocate に設定するには、ミラーでデバイスを再同期する必要があります。これは処理に時間がかかりますが、デバイスのミラー特性を保持します。
注記
LVM ミラーにデバイス障害が発生すると、2 段階の回復プロセスが実行されます。第 1 段階では、障害が発生したデバイスの削除が行われます。これによってミラーは、単一のリニアデバイスに縮小されます。第 2 段階では、mirror_log_fault_policy パラメーターが allocate に設定されている場合、障害が発生したデバイスの置き換えを試みます。ただし、第 2 段階では、他のデバイスが利用可能である場合、ミラーが以前使用していたデバイスの中から、障害とは関係のないデバイスが選択されるという保証はない点に注意してください。
LVM ミラー障害の発生時に手作業で回復する方法については、「LVM ミラー障害からの回復」 を参照してください。

4.4.4.2. ミラー化論理ボリュームの冗長イメージの分割

ミラー化論理ボリュームの冗長イメージを分割して、新たな論理ボリュームを形成することができます。イメージを分割するには、lvconvert コマンドの --splitmirrors 引数を使用して、分割する冗長イメージの数を指定します。コマンドの --name 引数を使用して、newly-split-off 論理ボリュームの名前を指定する必要があります。
以下のコマンドは、ミラー化論理ボリューム vg/lv から、copy という名前の新しい論理ボリュームを分割します。新しい論理ボリュームには 2 つのミラーレッグが含まれます。この例では、LVM は分割するデバイスを選択しています。
# lvconvert --splitmirrors 2 --name copy vg/lv
分割するデバイスを指定することが可能です。以下のコマンドは、ミラー化論理ボリューム vg/lv から、copy という名前の新しい論理ボリュームを分割します。新しい論理ボリュームには、/dev/sdc1/dev/sde1 のデバイスで設定される 2 つのミラーレッグが含まれます。
# lvconvert --splitmirrors 2 --name copy vg/lv /dev/sd[ce]1

4.4.4.3. ミラー化論理ボリュームの修復

lvconvert --repair コマンドを使用すると、ディスク障害後にミラーを修復できます。これによって、ミラーは整合性のある状態に戻ります。lvconvert --repair コマンドは、インタラクティブなコマンドで、システムで障害が発生したデバイスの置き換えを試行するかどうかを指定するように求められます。
  • プロンプトを省略して、障害が発生したデバイスをすべて置き換えるには、コマンドラインで -y オプションを指定します。
  • プロンプトを省略して、障害が発生したデバイスのいずれも置き換えるには、コマンドラインで -f オプションを指定します。
  • プロンプトを省略し、それでもミラーイメージとミラーログの代替ポリシーを示すには、lvm.conf ファイルの mirror_log_fault_policy パラメーターおよび mirror_device_fault_policy パラメーターで指定されたデバイス置き換えポリシーを使用するように --use-policies 引数を指定します。

4.4.4.4. ミラー化ボリューム設定の変更

lvconvert コマンドを使用すると、論理ボリュームに含まれるミラーの数を増減できます。これにより、論理ボリュームをミラー化ボリュームからリニアボリュームに、またはリニアボリュームからミラー化ボリュームに変換できます。また、このコマンドを使用して、corelog などの既存の論理ボリュームの他のミラーパラメーターを再設定することもできます。
リニアボリュームをミラー化ボリュームに変換する際には、既存ボリューム用にミラーレッグを作成することになります。つまり、ボリュームグループにはミラーレッグ用とミラーログ用のデバイスと領域がなければならないことを意味します。
ミラーレッグを 1 つ失うと、LVM はそのボリュームをリニアボリュームに変換するため、ミラーの冗長性なしにボリュームに引き続きアクセスできます。レッグを置き換えたら、lvconvert コマンドを使用してミラーを復元します。この手順は、「LVM ミラー障害からの回復」 で提供されています。
以下のコマンドは、リニア論理ボリューム vg00/lvol1 をミラー化論理ボリュームに変換します。
# lvconvert -m1 vg00/lvol1
以下のコマンドは、ミラー化論理ボリューム vg00/lvol1 をリニア論理ボリュームに変換し、ミラーレッグを削除します。
# lvconvert -m0 vg00/lvol1
以下の例は、既存の論理ボリューム vg00/lvol1 にミラーレッグを追加します。この例は、lvconvert コマンドがボリュームを 2 つのミラーレッグを持つボリュームに変更する前後のボリュームの設定を示しています。
# lvs -a -o name,copy_percent,devices vg00
  LV                  Copy%  Devices
  lvol1               100.00 lvol1_mimage_0(0),lvol1_mimage_1(0)
  [lvol1_mimage_0]        /dev/sda1(0)
  [lvol1_mimage_1]        /dev/sdb1(0)
  [lvol1_mlog]            /dev/sdd1(0)
# lvconvert -m 2 vg00/lvol1
  vg00/lvol1: Converted: 13.0%
  vg00/lvol1: Converted: 100.0%
  Logical volume lvol1 converted.
# lvs -a -o name,copy_percent,devices vg00
  LV                  Copy%  Devices
  lvol1               100.00 lvol1_mimage_0(0),lvol1_mimage_1(0),lvol1_mimage_2(0)
  [lvol1_mimage_0]        /dev/sda1(0)
  [lvol1_mimage_1]        /dev/sdb1(0)
  [lvol1_mimage_2]        /dev/sdc1(0)
  [lvol1_mlog]            /dev/sdd1(0)

4.4.5. シンプロビジョニングされた論理ボリュームの作成

論理ボリュームは、シンプロビジョニングにできます。これにより、利用可能なエクステントよりも大きな論理ボリュームを作成できます。シンプロビジョニングを使用すると、シンプールと呼ばれる、空き領域のストレージプールを管理でき、アプリケーションで必要になった時に任意の数のデバイスに割り当てることができます。後でアプリケーションが実際に論理ボリュームに書き込むときに割り当てられるように、シンプールにバインドするデバイスを作成できます。シンプールは、ストレージ領域をコスト効率よく割り当てる必要がある場合に、動的に拡張できます。
注記
このセクションでは、シンプロビジョニングされた論理ボリュームを作成し、拡張するために使用する基本的なコマンドの概要を説明します。LVM シンプロビジョニングの詳細と、シンプロビジョニングされた論理ボリュームと共に LVM コマンドおよびユーティリティーを使用する方法は、lvmthin(7) man ページを参照してください。
注記
クラスターのノード間では、シンボリュームに対応していません。シンプールとそのすべてのシンボリュームは、1 つのクラスターノードで排他的にアクティブにする必要があります。
シンボリュームを作成する場合は、以下のタスクを実行します。
  1. vgcreate コマンドを使用して、ボリュームグループを作成します。
  2. lvcreate コマンドを使用して、シンプールを作成します。
  3. lvcreate コマンドを使用して、シンプール内にシンボリュームを作成します。
lvcreate コマンドに -T (または --thin)オプションを使用して、シンプールまたはシンボリュームを作成できます。また、lvcreate-T オプションを使用して、1 つのコマンドで同時にプール内にシンプールとシンボリュームの両方を作成することもできます。
以下のコマンドは、lvcreate コマンドの -T オプションを使用して、mythinpool という名前のシンプールを作成します。これは、ボリュームグループ vg001 にあり、サイズは 100M です。物理領域のプールを作成しているため、プールのサイズを指定する必要があります。lvcreate コマンドの -T オプションは引数を取りません。コマンドで指定する他のオプションから、作成されるデバイスのタイプが推測されます。
# lvcreate -L 100M -T vg001/mythinpool
  Rounding up size to full physical extent 4.00 MiB
  Logical volume "mythinpool" created
# lvs
  LV            VG     Attr     LSize   Pool Origin Data%  Move Log Copy% Convert
  my mythinpool vg001  twi-a-tz 100.00m               0.00
以下のコマンドは、lvcreate コマンドの -T オプションを使用して、シンプール vg001/mythinpoolthinvolume という名前のシンボリュームを作成します。ここでは、ボリュームを含むプールよりも大きなボリュームの仮想サイズを指定している点に注意してください。
# lvcreate -V 1G -T vg001/mythinpool -n thinvolume
  Logical volume "thinvolume" created
# lvs
  LV          VG       Attr     LSize   Pool       Origin Data%  Move Log Copy%  Convert
  mythinpool  vg001    twi-a-tz 100.00m                     0.00
  thinvolume  vg001    Vwi-a-tz   1.00g mythinpool          0.00
以下のコマンドは、lvcreate コマンドに -T オプションを使用して、プール内にシンプールとシンボリュームを作成します。これは、lvcreate コマンドにサイズと仮想サイズ引数の両方を指定します。このコマンドは、ボリュームグループ vg001 にシンプール mythinpool を作成し、そのプールに thinvolume という名前の シンボリューム も作成します。
# lvcreate -L 100M -T vg001/mythinpool -V 1G -n thinvolume
  Rounding up size to full physical extent 4.00 MiB
  Logical volume "thinvolume" created
# lvs
  LV           VG       Attr     LSize   Pool     Origin Data%  Move Log Copy%  Convert
  mythinpool   vg001    twi-a-tz 100.00m                   0.00
  thinvolume   vg001    Vwi-a-tz   1.00g mythinpool        0.00
また、lvcreate コマンドの --thinpool パラメーターを指定して、シンプールを作成することもできます。-T オプションとは異なり、- thinpool パラメーターには、作成するシンプール論理ボリュームの名前である引数が必要です。以下の例は、lvcreate コマンドで --thinpool パラメーターを指定して、mythinpool という名前のシンプールを作成します。これは、ボリュームグループ vg001 にあり、サイズは 100M です。
# lvcreate -L 100M --thinpool mythinpool vg001
  Rounding up size to full physical extent 4.00 MiB
  Logical volume "mythinpool" created
# lvs
  LV          VG     Attr     LSize   Pool Origin Data%  Move Log Copy% Convert
  mythinpool  vg001  twi-a-tz 100.00m               0.00
チャンクサイズを使用するには、以下の基準を使用します。
  • チャンクサイズが小さいほどメタデータが大きくなり、パフォーマンスが妨げられますが、スナップショットによる領域使用率が向上します。
  • 大規模なチャンクサイズではメタデータ操作が少なくなりますが、スナップショットの効率が低くなります。
LVM2 は、以下のようにチャンクサイズを計算します。
デフォルトでは、LVM は 64KiB のチャンクサイズで始まり、シンプールメタデータデバイスのサイズが 128MiB を超えると、その値を増やします。これにより、メタデータサイズが圧縮されます。これにより、チャンクサイズの値が大きくなるため、スナップショットの使用効率が低くなります。この場合、チャンクのサイズが小さく、メタデータサイズが大きくなる方が適しています。
ボリュームデータサイズが TiB の範囲にある場合は、サポートされる最大サイズであるメタデータサイズとして ~15.8GiB を使用し、要件に応じてチャンクサイズを設定します。ただし、このボリュームデータサイズを拡張し、チャンクサイズを小さくする必要がある場合は、メタデータサイズを拡大することはできません。
警告
Red Hat は、少なくともデフォルトのチャンクサイズを使用することを推奨します。チャンクサイズが小さすぎる場合で、ボリュームのメタデータの容量が不足すると、ボリュームはデータを作成できません。論理ボリュームを監視して、拡張またはメタデータボリュームが完全に満杯になる前にストレージをさらに作成します。メタデータ用の領域が不足しないように、シンプールのチャンクサイズは十分な大きさになるようにしてください。
プールの作成で、ストライピングに対応しています。以下のコマンドは、2 つの 64 kB ストライプと 256 kB のチャンクサイズを持つボリュームグループ vg001 に pool という名前の 100M シン プール を作成します。また、1T のシンボリューム vg00/thin_lv も作成します。
# lvcreate -i 2 -I 64 -c 256 -L 100M -T vg00/pool -V 1T --name thin_lv
lvextend コマンドを使用して、シンボリュームのサイズを拡張できます。ただし、シンプールのサイズを縮小することはできません。
以下のコマンドは、既存のシンプールのサイズ (100M) を変更し、100M 拡張します。
# lvextend -L+100M vg001/mythinpool
  Extending logical volume mythinpool to 200.00 MiB
  Logical volume mythinpool successfully resized
# lvs
  LV           VG       Attr     LSize   Pool     Origin Data%  Move Log Copy%  Convert
  mythinpool   vg001    twi-a-tz 200.00m                   0.00
  thinvolume   vg001    Vwi-a-tz   1.00g mythinpool          0.00
他の論理ボリュームのタイプと同様に、lvrename を使用してボリュームの名前を変更したり、lvremove でボリュームを削除したりできます。また、lvs コマンドおよび lvdisplay コマンドを使用してボリュームの情報を表示できます。
デフォルトでは、lvcreate コマンドは、式(Pool_LV_size / Pool_LV_chunk_size * 64)に従って、シンプールのメタデータ論理ボリュームのサイズを設定します。スナップショットが大量にある場合や、シンプールのサイズが小さく、後で大きくなることが予測される場合は、lvcreate コマンドの --poolmetadatasize パラメーターで、シンプールのメタデータボリュームのデフォルト値を大きくしないといけない場合があります。シンプールのメタデータ論理ボリュームでサポートされる値は 2MiB - 16GiB です。
lvconvert コマンドの --thinpool パラメーターを使用して、既存の論理ボリュームをシンプールボリュームに変換できます。既存の論理ボリュームをシンプールボリュームに変換する場合は、lvconvert--thinpool パラメーターとともに --poolmetadata パラメーターを使用して、既存の論理ボリュームをシンプールボリュームのメタデータボリュームに変換する必要があります。
注記
論理ボリュームをシンプールボリュームまたはシンプールメタデータボリュームに変換すると、論理ボリュームのコンテンツが破棄されます。これは、lvconvert はデバイスのコンテンツを保存するのではなく、コンテンツを上書きするためです。
以下の例は、ボリュームグループ vg001 の既存の論理ボリューム lv1 を、シンプールボリュームに変換します。また、ボリュームグループ vg001 の既存の論理ボリューム lv2 を、そのシンプールボリュームのメタデータボリュームに変換します。
# lvconvert --thinpool vg001/lv1 --poolmetadata vg001/lv2
  Converted vg001/lv1 to thin pool.

4.4.6. スナップショットボリュームの作成

注記
LVM は、シンプロビジョニングのスナップショットに対応しますシンプロビジョニングされたスナップショットボリュームの作成については、「シンプロビジョニングされたスナップショットボリュームの作成」 を参照してください。
スナップショットボリュームを作成するには、lvcreate コマンドの -s 引数を使用します。スナップショットボリュームは書き込み可能です。
注記
LVM スナップショットは、クラスターのノード間では対応していません。クラスター化されたボリュームグループ内にスナップショットボリュームは作成できません。ただし、クラスター論理ボリューム上でデータの一貫したバックアップ作成が必要な場合、ボリュームを排他的にアクティブ化した上で、スナップショットを作成することができます。1 つのノード上で論理ボリュームを排他的にアクティブ化する方法は、「クラスター内の個別ノードでの論理ボリュームのアクティブ化」 を参照してください。
注記
ミラー化論理ボリュームを対象とした LVM スナップショットがサポートされています。
RAID 論理ボリュームを対象としたスナップショットに対応しています。RAID 論理ボリュームの作成方法は、「RAID 論理ボリューム」 を参照してください。
LVM では、作成元のボリュームのサイズよりも大きく、そのボリュームのメタデータを必要とするスナップショットボリュームを作成できません。これよりも大きなスナップショットボリュームを指定しても、システムには、作成元のサイズに必要な大きさのスナップショットボリュームのみが作成されます。
デフォルトで、スナップショットボリュームは、通常のアクティブ化コマンドの実行時に省略されます。スナップショットボリュームのアクティブ化を制御する方法は、「論理ボリュームのアクティブ化の制御」 を参照してください。
以下のコマンドは、サイズが /dev/vg00/snap でサイズが 100 MB のスナップショット論理ボリュームを作成します。これにより、/dev/vg00/lvol1 という名前の元の論理ボリュームのスナップショットが作成されます。元の論理ボリュームにファイルシステムが含まれている場合は、任意のディレクトリー上でスナップショット論理ボリュームをマウントしてから、そのファイルシステムのコンテンツにアクセスし、元のファイルシステムが更新を継続している間にバックアップを実行できます。
# lvcreate --size 100M --snapshot --name snap /dev/vg00/lvol1
スナップショット論理ボリュームを作成したら、lvdisplay コマンドで作成元のボリュームを指定すると、すべてのスナップショット論理ボリュームとそのステータス(アクティブまたは非アクティブ)のリストが含まれる出力が表示されます。
以下の例は、論理ボリューム /dev/new_vg/lvol0 のステータスを示しています。これは、スナップショットボリューム /dev/new_vg/newvgsnap が作成されています。
# lvdisplay /dev/new_vg/lvol0
  --- Logical volume ---
  LV Name                /dev/new_vg/lvol0
  VG Name                new_vg
  LV UUID                LBy1Tz-sr23-OjsI-LT03-nHLC-y8XW-EhCl78
  LV Write Access        read/write
  LV snapshot status     source of
                         /dev/new_vg/newvgsnap1 [active]
  LV Status              available
  # open                 0
  LV Size                52.00 MB
  Current LE             13
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:2
デフォルトでは lvs コマンドは、作成元のボリュームと、使用されているスナップショットボリュームの現在の割合を表示します。以下の例は、論理ボリューム /dev/new_vg/lvol0 を含むシステム用の lvs コマンドのデフォルト出力を示しています。この出力では、スナップショットボリューム /dev/new_vg/newvgsnap が作成されています。
# lvs
  LV         VG     Attr   LSize  Origin Snap%  Move Log Copy%
  lvol0      new_vg owi-a- 52.00M
  newvgsnap1 new_vg swi-a-  8.00M lvol0    0.20
警告
複製元ボリュームが変更されると、スナップショットのサイズが拡大されるため、lvs コマンドを使用して、スナップショットボリュームのパーセンテージを定期的に監視して、満杯にならないように確認することが重要です。スナップショットは、100% になると完全に消失します。これは、作成元ボリュームの変更されていない部分に書き込みが行われるため、スナップショットが必ず破損するためです。
スナップショットが満杯になると、スナップショット自体が無効になるだけでなく、そのスナップショットデバイスにマウントされているすべてのファイルシステムのマウントが強制的に解除されます。これにより、マウントポイントへのアクセス時に必ず発生するファイルシステムエラーを回避できます。さらに、lvm.conf ファイルに snapshot_autoextend_threshold オプションを指定できます。このオプションにより、スナップショットの残りの領域が、設定されたしきい値を下回ると、常にスナップショットを自動的に拡張できるようになりました。この機能の利用に際しては、ボリュームグループに未割り当ての領域があることが条件になります
LVM では、作成元のボリュームのサイズよりも大きく、そのボリュームのメタデータを必要とするスナップショットボリュームを作成できません。同様に、スナップショットの自動拡張を実行しても、スナップショットに必要なサイズとして計算される最大サイズを超えて拡張されることはありません。スナップショットのサイズが複製元のボリュームを包含できるまで拡大されると、スナップショットの自動拡張はモニターされなくなります。
snapshot_autoextend_thresholdsnapshot_autoextend_percent の設定に関する情報は、lvm.conf ファイルに記載されています。lvm.conf ファイルの詳細は、付録B LVM 設定ファイル を参照してください。

4.4.7. シンプロビジョニングされたスナップショットボリュームの作成

Red Hat Enterprise Linux は、シンプロビジョニングのスナップショットボリュームのサポートを提供します。シンプロビジョニングされたスナップショットボリュームのメリットとデメリットの詳細は、「シンプロビジョニングされたスナップショットボリューム」 を参照してください。
注記
このセクションでは、シンプロビジョニングのスナップショットボリュームを作成し、拡張するために使用する基本的なコマンドの概要を説明します。LVM シンプロビジョニングの詳細と、シンプロビジョニングされた論理ボリュームと共に LVM コマンドおよびユーティリティーを使用する方法は、lvmthin(7) man ページを参照してください。
重要
シンプロビジョニングのスナップショットボリュームを作成する場合、ボリュームのサイズは指定しません。サイズパラメーターを指定すると、作成されるスナップショットはシンプロビジョニングのスナップショットボリュームにはならず、データを保管するためにシンプールを使用することもありません。たとえば、lvcreate -s vg/thinvolume -L10M コマンドは、作成元ボリュームがシンボリュームであっても、シンプロビジョニングのスナップショットを作成しません。
シンプロビジョニングのスナップショットは、シンプロビジョニングされた作成元ボリューム用に作成するか、シンプロビジョニングされていない作成元ボリューム用にも作成できます。
lvcreate コマンドの --name オプションを使用して、スナップショットボリュームの名前を指定できます。以下のコマンドは、シンプロビジョニングされた論理ボリューム vg001/thinvolume で、シンプロビジョニングされたスナップショットボリューム ( mysnapshot1 )を作成します。
# lvcreate -s --name mysnapshot1 vg001/thinvolume
  Logical volume "mysnapshot1" created
# lvs
  LV          VG       Attr     LSize   Pool       Origin     Data%  Move Log Copy%  Convert
  mysnapshot1 vg001    Vwi-a-tz   1.00g mythinpool thinvolume   0.00
  mythinpool  vg001    twi-a-tz 100.00m                         0.00
  thinvolume  vg001    Vwi-a-tz   1.00g mythinpool              0.00
注記
シンプロビジョニングを使用する場合は、ストレージ管理者がストレージプールを監視し、容量が満杯になり始めたら容量を追加することが重要です。シンボリュームのサイズを拡張する方法は、「シンプロビジョニングされた論理ボリュームの作成」 を参照してください。
シンプロビジョニングのスナップショットボリュームには、他のシンボリュームと同じ特性があります。ボリュームのアクティブ化、拡張、名前変更、削除、さらにはスナップショット作成も個別に行うことができます。
デフォルトで、スナップショットボリュームは、通常のアクティブ化コマンドの実行時に省略されます。スナップショットボリュームのアクティブ化を制御する方法は、「論理ボリュームのアクティブ化の制御」 を参照してください。
シンプロビジョニングされていない論理ボリュームの、シンプロビジョニングされたスナップショットを作成することもできます。シンプロビジョニングされていない論理ボリュームはシンプール内に含まれていないため、外部の複製元 と呼ばれます。外部の作成元ボリュームは、複数の異なるシンプールからであっても、多くのシンプロビジョニングのスナップショットボリュームで使用でき、共有できます。外部の作成元は、シンプロビジョニングのスナップショットが作成される際に非アクティブであり、かつ読み取り専用である必要があります。
外部の作成元のシンプロビジョニングされたスナップショットを作成する場合は、--thinpool オプションを指定する必要があります。以下のコマンドは、読み取り専用の非アクティブなボリューム origin_volume のシンプロビジョニングのスナップショットボリュームを作成します。このシンプロビジョニングのスナップショットボリュームの名前は mythinsnap です。論理ボリューム origin_volume は、既存のシンプール vg001 /pool を使用する、ボリュームグループ vg001 内のシンプロビジョニングのスナップショットボリューム mythinsnap に対する外部の作成元になります。作成元ボリュームは、スナップショットボリュームと同じボリュームグループに存在する必要があるため、作成元の論理ボリュームを指定する場合にボリュームグループを指定する必要はありません。
# lvcreate -s --thinpool vg001/pool origin_volume --name mythinsnap
以下のコマンドにあるように、最初のスナップショットボリュームの 2 番目のシンプロビジョニングのスナップショットボリュームを作成できます。
# lvcreate -s vg001/mythinsnap --name my2ndthinsnap
Red Hat Enterprise Linux 7.2 では、lvs コマンドのレポートフィールド lv_ancestors および lv_descendants を指定すると、シンスナップショット論理ボリュームのすべての先先と子孫のリストを表示できます。
以下の例では、下記の点を前提としています。
  • stack1 は、ボリュームグループ vg001 で元となるボリュームです。
  • stack2 は、stack1のスナップショットです。
  • stack3 は、stack2のスナップショットです。
  • stack4stack3のスナップショットです。
さらに
  • stack5stack2のスナップショットです。
  • stack6 は、stack5のスナップショットです。
$ lvs -o name,lv_ancestors,lv_descendants vg001
  LV      Ancestors              Descendants
  stack1                         stack2,stack3,stack4,stack5,stack6
  stack2  stack1                 stack3,stack4,stack5,stack6
  stack3  stack2,stack1          stack4
  stack4  stack3,stack2,stack1
  stack5  stack2,stack1          stack6
  stack6  stack5,stack2,stack1
  pool
注記
lv_ancestors フィールドおよび lv_descendants フィールドには、既存の依存関係が表示されますが、チェーンの途中でエントリーが削除されると、削除されたエントリーを追跡しないため、依存関係チェーンが壊れる可能性があります。たとえば、この設定例から論理ボリューム stack3 を削除すると、以下のように表示されます。
$ lvs -o name,lv_ancestors,lv_descendants vg001
  LV      Ancestors              Descendants
  stack1                         stack2,stack5,stack6
  stack2  stack1                 stack5,stack6
  stack4
  stack5  stack2,stack1          stack6
  stack6  stack5,stack2,stack1
  pool
ただし、Red Hat Enterprise Linux 7.3 では、削除した論理ボリュームを追跡および表示するようにシステムを設定できます。lv_ancestors_full フィールドおよび lv_descendants_full フィールドを指定することで、このボリュームを含む完全依存関係チェーンを表示できます。過去の論理ボリュームを追跡、表示、および削除する方法は、「過去の論理ボリュームの追跡および表示 (Red Hat Enterprise Linux 7.3 以降)」 を参照してください。

4.4.8. LVM 論理ボリュームの作成

Red Hat Enterprise Linux 7.1 リリースでは、LVM により LVM キャッシュ論理ボリュームが完全にサポートされます。キャッシュ論理ボリュームでは、高速なブロックデバイス (SSD ドライブなど) で設定される小規模な論理ボリュームが使用されるため、頻繁に使用されるブロックを、小規模で高速な論理ボリュームに格納することにより、大規模で低速な論理ボリュームのパフォーマンスが向上します。
LVM キャッシュは、LVM 論理ボリュームタイプを使用します。関連するこれらすべての論理ボリュームは、同じボリュームグループに存在する必要があります。
  • 作成元論理ボリューム - 大規模で低速な論理ボリューム
  • キャッシュプール論理ボリューム - 小規模で高速な論理ボリューム。キャッシュデータ論理ボリュームとキャッシュメタデータ論理ボリュームの 2 つのデバイスから設定されます。
  • キャッシュデータ論理ボリューム - キャッシュプール論理ボリューム用のデータブロックを含む論理ボリューム
  • キャッシュメタデータ論理ボリューム - キャッシュプール論理ボリューム用のメタデータを含む論理ボリューム。データブロックが保存された場所を指定するアカウンティング情報を保持します (たとえば、作成元の論理ボリューム上またはキャッシュデータ論理ボリューム上)。
  • キャッシュ論理ボリューム - 作成元の論理ボリュームとキャッシュプール論理ボリュームを含む論理ボリューム。これは、さまざまなキャッシュボリュームコンポーネントをカプセル化する使用可能なデバイスです。
以下の手順に従うと、LVM キャッシュ論理ボリュームを作成できます。
  1. 低速な物理ボリュームと高速な物理ボリュームを含むボリュームグループを作成します。この例では、/dev/sde1 は低速なデバイスで、/dev/sdf1 は高速なデバイスで、両方のデバイスはボリュームグループ VG に含まれます。
    # pvcreate /dev/sde1
    # pvcreate /dev/sdf1
    # vgcreate VG /dev/sde1 /dev/sdf1
  2. 作成元のボリュームを作成します。この例では、サイズが 10 ギガバイトで、/dev/sde1 (低速な物理ボリューム)で設定される、名前が lv という名前のボリュームが作成されます。
    # lvcreate -L 10G -n lv VG /dev/sde1
  3. キャッシュプール論理ボリュームを作成します。この例では、ボリュームグループ VG の一部である高速デバイス /dev/sdf1 に、キャッシュプール論理ボリューム cpool を作成します。このコマンドが作成するキャッシュプール論理ボリュームは、非表示のキャッシュデータ論理ボリューム cpool_cdata と、非表示のキャッシュメタデータ論理ボリューム cpool_cmeta で設定されます。
    # lvcreate --type cache-pool -L 5G -n cpool VG /dev/sdf1
      Using default stripesize 64.00 KiB.
      Logical volume "cpool" created.
    # lvs -a -o name,size,attr,devices VG
      LV              LSize  Attr       Devices
      [cpool]          5.00g Cwi---C--- cpool_cdata(0)
      [cpool_cdata]    5.00g Cwi-ao---- /dev/sdf1(4)
      [cpool_cmeta]    8.00m ewi-ao---- /dev/sdf1(2)
    
    さらに複雑な設定の場合は、キャッシュデータとキャッシュメタデータ論理ボリュームを個別に作成し、それらのボリュームをキャッシュプール論理ボリュームに結合しないといけない場合があります。この手順は、lvmcache(7) man ページを参照してください。
  4. キャッシュプール論理ボリュームを作成元論理ボリュームにリンクして、キャッシュ論理ボリュームを作成します。作成された、アクセス可能なキャッシュ論理ボリュームには、作成元の論理ボリュームの名前が付けられます。作成元の論理ボリュームは、_corig が元の名前に追加された非表示の論理ボリュームになります。これはライブ変換することが可能ですが、必ず最初にバックアップを実行してください。
    # lvconvert --type cache --cachepool cpool VG/lv
      Logical volume cpool is now cached.
    # lvs -a -o name,size,attr,devices vg
        LV              LSize  Attr       Devices
        [cpool]          5.00g Cwi---C--- cpool_cdata(0)
        [cpool_cdata]    5.00g Cwi-ao---- /dev/sdf1(4)
        [cpool_cmeta]    8.00m ewi-ao---- /dev/sdf1(2)
        lv              10.00g Cwi-a-C--- lv_corig(0)
        [lv_corig]      10.00g owi-aoC--- /dev/sde1(0)
        [lvol0_pmspare]  8.00m ewi------- /dev/sdf1(0)
    
  5. オプションとして、Red Hat Enterprise Linux リリース 7.2 では、キャッシュされた論理ボリュームをシンプール論理ボリュームに変換できます。プールから作成されたすべてのシン論理ボリュームがキャッシュを共有することに注意してください。
    以下のコマンドでは、高速デバイス /dev/sdf1 を使用してシンプールメタデータ(lv_tmeta)を割り当てます。これは、キャッシュプールボリュームで使用されるのと同じデバイスです。つまり、シンプールメタデータボリュームは、キャッシュデータ論理ボリューム cpool_cdata とキャッシュメタデータ論理ボリューム cpool_cmeta の両方と、そのデバイスを共有します。
    # lvconvert --type thin-pool VG/lv /dev/sdf1
       WARNING: Converting logical volume VG/lv to thin pool's data volume with metadata wiping.
       THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
     Do you really want to convert VG/lv? [y/n]: y
       Converted VG/lv to thin pool.
    # lvs -a -o name,size,attr,devices vg
       LV               LSize  Attr       Devices
       [cpool]           5.00g Cwi---C--- cpool_cdata(0)
       [cpool_cdata]     5.00g Cwi-ao---- /dev/sdf1(4)
       [cpool_cmeta]     8.00m ewi-ao---- /dev/sdf1(2)
       lv               10.00g twi-a-tz-- lv_tdata(0)
       [lv_tdata]       10.00g Cwi-aoC--- lv_tdata_corig(0)
       [lv_tdata_corig] 10.00g owi-aoC--- /dev/sde1(0)
       [lv_tmeta]       12.00m ewi-ao---- /dev/sdf1(1284)
       [lvol0_pmspare]  12.00m ewi------- /dev/sdf1(0)
       [lvol0_pmspare]  12.00m ewi------- /dev/sdf1(1287)
    
その他の管理例を含む LVM キャッシュボリュームの詳細は、lvmcache(7) man ページを参照してください。
シンプロビジョニングされた論理ボリュームの作成については、「シンプロビジョニングされた論理ボリュームの作成」 を参照してください。

4.4.9. スナップショットボリュームのマージ

lvconvert コマンドの --merge オプションを使用して、スナップショットを作成元のボリュームにマージできます。作成元とスナップショットボリュームの両方が閉じている状態になると、マージはただちに開始します。そうでない場合は、作成元またはスナップショットのいずれかがアクティブになり、かつ両方が閉じられている状態に初めてなったときにマージが開始します。root ファイルシステムのように、閉じることができない作成元へのスナップショットのマージは、次に作成元ボリュームがアクティブになるまで行われません。マージが開始すると、マージ後の論理ボリュームには、作成元の名前、マイナー番号、UUID が入ります。マージの進行中、作成元に対する読み取りまたは書き込みは、マージ中のスナップショットに対して実行されているかのように見えます。マージが完了すると、マージされたスナップショットは削除されます。
以下のコマンドは、スナップショットボリューム vg00/lvol1_snap をその作成元にマージします。
# lvconvert --merge vg00/lvol1_snap
コマンドライン上で複数のスナップショットを指定したり、LVM オブジェクトタグを使用して複数のスナップショットをそれぞれの作成元にマージしたりすることが可能です。以下の例では、論理ボリューム vg00/lvol1vg00/lvol2、および vg00/lvol3 はすべて @some_tag タグでタグ付けされています。以下のコマンドは、vg00/lvol1vg00/lvol2vg00/lvol3 の 3 つのボリュームすべてを順次マージします。--background オプションを使用している場合は、すべてのスナップショット論理ボリュームのマージが並行して開始します。
# lvconvert --merge @some_tag
LVM オブジェクトのタグ付けに関する情報は、付録D LVM オブジェクトタグ を参照してください。lvconvert --merge コマンドの詳細は、lvconvert(8)の man ページを参照してください。

4.4.10. 永続的なデバイス番号

メジャーデバイス番号とマイナーデバイス番号は、モジュールのロード時に動的に割り当てられます。一部のアプリケーションは、ブロックデバイスが常に同じデバイス (メジャーとマイナー) 番号でアクティブにされている場合に、最も効果的に機能します。これらは、lvcreatelvchange コマンドで以下の引数を使用して指定できます。
--persistent y --major major --minor minor
別のデバイスにすでに動的に割り当てられている番号を使用しないように、マイナー番号は大きくします。
NFS を使用してファイルシステムをエクスポートする場合は、そのエクスポートファイルで fsid パラメーターを指定すると、LVM 内で永続的なデバイス番号を設定する必要がなくなります。

4.4.11. 論理ボリュームグループのパラメーター変更

論理ボリュームのパラメーターを変更するには、lvchange コマンドを使用します。変更可能なパラメーターの一覧は、lvchange(8)の man ページを参照してください。
lvchange コマンドを使用して、論理ボリュームのアクティブ化と非アクティブ化を実行できます。ボリュームグループの論理ボリュームをすべて同時にアクティブまたは非アクティブにするには、「ボリュームグループのパラメーター変更」 の説明に従って、vgchange コマンドを使用します。
以下のコマンドは、ボリュームグループ vg00 内のボリューム lvol1 のパーミッションを読み取り専用に変更します。
# lvchange -pr vg00/lvol1

4.4.12. 論理ボリュームの名前変更

既存の論理ボリュームの名前を変更するには、lvrename コマンドを使用します。
以下のコマンドのいずれかを実行すると、ボリュームグループ vg02 の論理ボリューム lvold の名前が lvnew に変更されます。
# lvrename /dev/vg02/lvold /dev/vg02/lvnew
# lvrename vg02 lvold lvnew
root 論理ボリュームの名前を変更するには、追加の再設定が必要です。root ボリュームの名前変更の詳細は、How to rename root ボリュームグループまたは論理ボリューム in Red Hat Enterprise Linuxを参照してください。
クラスター内の個別ノード上で論理ボリュームをアクティブ化する方法は 「クラスター内の個別ノードでの論理ボリュームのアクティブ化」 を参照してください。

4.4.13. 論理ボリュームの削除

非アクティブな論理ボリュームを削除するには、lvremove コマンドを使用します。論理ボリュームが現在マウントされている場合は、削除する前にボリュームをアンマウントしてください。また、クラスター環境では削除前に論理ボリュームを非アクティブ化しておく必要があります。
以下のコマンドは、論理ボリューム /dev/testvg/testlv をボリュームグループ testvg から削除します。このケースでは、論理ボリュームは非アクティブ化されていないことに注意してください。
# lvremove /dev/testvg/testlv
Do you really want to remove active logical volume "testlv"? [y/n]: y
  Logical volume "testlv" successfully removed
lvchange -an コマンドを使用して論理ボリュームを削除する前に、明示的に非アクティブ化できます。その場合は、アクティブな論理ボリュームを削除するかどうかを確認するプロンプトは表示されません。

4.4.14. 論理ボリュームの表示

LVM 論理ボリュームのプロパティーを表示するのに使用できるコマンドは、lvslvdisplay、および lvscan の 3 つです。
lvs コマンド:論理ボリューム情報を設定可能な形式で提供して、1 論理ボリュームにつき 1 行ずつ表示します。lvs コマンドでは、形式をかなり自由に制御できるため、スクリプト作成時に便利です。lvs コマンドで出力をカスタマイズする詳細な方法は 「LVM 用のカスタム報告」 を参照してください。
lvdisplay コマンド:決められた形式で、論理ボリュームのプロパティー(サイズ、レイアウト、マッピングなど)を表示します。
以下のコマンドは、vg00 内 の lvol2 の属性を示しています。スナップショット論理ボリュームがこの元の論理ボリューム用に作成されている場合、このコマンドはすべてのスナップショット論理ボリュームとそのステータス (アクティブまたは非アクティブ) のリストを表示します。
# lvdisplay -v /dev/vg00/lvol2
lvscan コマンドは、システム内のすべての論理ボリュームをスキャンし、以下の例のように一覧表示します。
# lvscan
 ACTIVE                   '/dev/vg0/gfslv' [1.46 GB] inherit

4.4.15. 論理ボリュームの拡張

論理ボリュームのサイズを拡張するには、lvextend コマンドを使用します。
論理ボリュームを拡張する場合は、追加するボリュームの容量、または拡張後のボリュームのサイズを指定できます。
以下のコマンドは、論理ボリューム /dev/myvg/homevol を 12 ギガバイトに拡張します。
# lvextend -L12G /dev/myvg/homevol 
lvextend -- extending logical volume "/dev/myvg/homevol" to 12 GB
lvextend -- doing automatic backup of volume group "myvg"
lvextend -- logical volume "/dev/myvg/homevol" successfully extended
以下のコマンドは、論理ボリューム /dev/myvg/homevol に 1 ギガバイトを追加します。
# lvextend -L+1G /dev/myvg/homevol
lvextend -- extending logical volume "/dev/myvg/homevol" to 13 GB
lvextend -- doing automatic backup of volume group "myvg"
lvextend -- logical volume "/dev/myvg/homevol" successfully extended
lvcreate コマンドと同様に、lvextend コマンドの -l 引数を使用して、論理ボリュームのサイズを増やすエクステントの数を指定できます。また、この引数を使用してボリュームグループのパーセンテージ、またはボリュームグループに残ってる空き領域をパーセンテージで指定することもできます。以下のコマンドは、testlv という論理ボリュームを拡張して、ボリュームグループ myvg の未割り当て領域をすべて埋めます。
# lvextend -l +100%FREE /dev/myvg/testlv
  Extending logical volume testlv to 68.59 GB
  Logical volume testlv successfully resized
論理ボリュームを拡張したら、それに合わせてファイルシステムのサイズも拡張する必要があります。
多くのファイルシステムサイズ変更ツールは、デフォルトで、ファイルシステムのサイズを、その下の論理ボリュームのサイズまで拡大するため、2 つのコマンドに同じサイズを指定する必要はありません。

4.4.16. 論理ボリュームの縮小

論理ボリュームのサイズを縮小するには、lvreduce コマンドを使用します。
注記
GFS2 および XFS のファイルシステムでは縮小に対応していないため、GFS2 または XFS のファイルシステムが含まれる論理ボリュームのサイズは縮小できません。
縮小する論理ボリュームにファイルシステムが含まれている場合は、データの損失を防ぐため、ファイルシステムが、縮小する論理ボリュームにある領域を使用しないようにしてください。そのため、論理ボリュームにファイルシステムが含まれている場合は、lvreduce コマンドの --resizefs オプションを使用することが推奨されます。このオプションを使用すると、lvreduce コマンドは論理ボリュームを縮小する前にファイルシステムの縮小を試みます。ファイルシステムの縮小に失敗した場合(ファイルシステムが満杯であったり、ファイルシステムが縮小に対応していないと発生すると、lvreduce コマンドは失敗し、論理ボリュームを縮小しません)。
警告
ほとんどの場合、lvreduce コマンドはデータ損失の可能性を警告し、確認を要求します。しかし、論理ボリュームが非アクティブな状態であったり、--resizefs オプションが使用されなかった場合など、警告が表示されない場合があるため、データの損失を防ぐのに確認プロンプトのみを信頼しないようにしてください。
lvreduce コマンドの --test オプションは、ファイルシステムのチェックやファイルシステムのサイズ変更のテストを行わないため、操作が安全な場所を示しないことに注意してください。
以下のコマンドは、ボリュームグループ vg00 の論理ボリューム lvol1 を 64 メガバイトに縮小します。この例では、lvol1 にはファイルシステムが含まれ、このコマンドにより、論理ボリュームとともにサイズが変更されます。次の例は、コマンドの出力を示しています。
# lvreduce --resizefs -L 64M vg00/lvol1
fsck from util-linux 2.23.2
/dev/mapper/vg00-lvol1: clean, 11/25688 files, 8896/102400 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/vg00-lvol1 to 65536 (1k) blocks.
The filesystem on /dev/mapper/vg00-lvol1 is now 65536 blocks long.

  Size of logical volume vg00/lvol1 changed from 100.00 MiB (25 extents) to 64.00 MiB (16 extents).
  Logical volume vg00/lvol1 successfully resized.
サイズ変更値の前に-記号を指定すると、その値が論理ボリュームの実際のサイズから減算されます。以下の例は、論理ボリュームの絶対サイズを 64 メガバイトに縮小する代わりに、64 メガバイト分のボリュームを縮小する場合に使用するコマンドを示しています。
# lvreduce --resizefs -L -64M vg00/lvol1

4.4.17. ストライプ化ボリュームの拡張

ストライプ化論理ボリュームのサイズを拡大するには、ボリュームグループを設定している物理ボリュームに、ストライプをサポートする十分な空き領域が必要です。たとえば、ボリュームグループ全域を使用する 2 way ストライプがある場合は、ボリュームグループに物理ボリュームを 1 つ追加しただけでは、ストライプを拡張することはできません。ボリュームグループには物理ボリュームを 2 つ以上追加する必要があります。
たとえば、以下の vgs コマンドで表示された、2 つの物理ボリュームで設定されるボリュームグループ vg について考えてみましょう。
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     2   0   0 wz--n- 271.31G 271.31G
ボリュームグループの全領域を使用して、ストライプを作成できます。
# lvcreate -n stripe1 -L 271.31G -i 2 vg
  Using default stripesize 64.00 KB
  Rounding up size to full physical extent 271.31 GB
  Logical volume "stripe1" created
# lvs -a -o +devices
  LV      VG   Attr   LSize   Origin Snap%  Move Log Copy%  Devices
  stripe1 vg   -wi-a- 271.31G                               /dev/sda1(0),/dev/sdb1(0)
ボリュームグループの空き領域がなくなっていることに注意してください。
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     2   1   0 wz--n- 271.31G    0
以下のコマンドで、ボリュームグループに物理ボリュームをもう 1 つ追加します。 これで、135 ギガバイトの領域が追加されます。
# vgextend vg /dev/sdc1
  Volume group "vg" successfully extended
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     3   1   0 wz--n- 406.97G 135.66G
この時点では、ストライプ化論理ボリュームを、ボリュームグループの最大サイズまで拡大することはできません。データをストライプ化するには、基になる物理デバイスが 2 つ必要です。
# lvextend vg/stripe1 -L 406G
  Using stripesize of last segment 64.00 KB
  Extending logical volume stripe1 to 406.00 GB
  Insufficient suitable allocatable extents for logical volume stripe1: 34480
more required
ストライプ化論理ボリュームを拡張するには、もう 1 つの物理ボリュームを追加してから、論理ボリュームを拡張します。この例では、ボリュームグループに物理ボリュームを 2 つ追加することにより、ボリュームグループの最大サイズまで、論理ボリュームを拡張できるようになっています。
# vgextend vg /dev/sdd1
  Volume group "vg" successfully extended
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     4   1   0 wz--n- 542.62G 271.31G
# lvextend vg/stripe1 -L 542G
  Using stripesize of last segment 64.00 KB
  Extending logical volume stripe1 to 542.00 GB
  Logical volume stripe1 successfully resized
ストライプ化論理ボリュームを拡張するのに十分な物理デバイスがない場合でも、その拡張部分がストライプ化されなくても問題がないならば、ボリュームの拡張は可能です。ただし、これによりパフォーマンスが一定ではなくなる可能性があります。論理ボリュームに領域を追加する場合、デフォルトの動作では、既存の論理ボリュームの最後のセグメントと同じストライピングパラメーターを使用するようになっていますが、このパラメーターはオーバーライドできます。以下の例では、最初の lvextend コマンドが失敗した後に、既存のストライプ化論理ボリュームを拡張して残りの空き領域を使用します。
# lvextend vg/stripe1 -L 406G
  Using stripesize of last segment 64.00 KB
  Extending logical volume stripe1 to 406.00 GB
  Insufficient suitable allocatable extents for logical volume stripe1: 34480
more required
# lvextend -i1 -l+100%FREE vg/stripe1

4.4.18. RAID ボリュームの拡張

新しい RAID リージョンの同期を行わずに、lvextend コマンドを使用して RAID 論理ボリュームを拡張できます。
lvcreate コマンドで RAID 論理ボリュームを作成するときに --nosync オプションを指定すると、論理ボリュームの作成時に RAID リージョンは同期されません。--nosync オプション を使用して作成した RAID 論理ボリュームを後で拡張すると、RAID 拡張は同時に同期されません。
lvs コマンドを使用してボリュームの属性を表示することで、--nosync オプションを使用して既存の論理ボリュームが作成されているかどうかを判断できます。初期同期なしで作成された論理ボリュームでは、属性フィールドの最初の文字として R を示します。初期同期が行われて論理ボリュームが作成された場合は、r と表示されます。
以下のコマンドは、初期同期なしで作成された RAID 論理ボリューム lv の属性を表示し、属性フィールドの最初の文字として R を表示します。属性フィールドの 7 番目の文字は、RAID のターゲットタイプを示す r です。属性フィールドの意味は、表4.5「lvs 表示フィールド」 を参照してください。
# lvs vg
  LV   VG   Attr     LSize Pool Origin Snap%  Move Log Cpy%Sync  Convert
  lv   vg   Rwi-a-r- 5.00g                               100.00
この論理ボリュームを lvextend コマンドで拡張すると、RAID 拡張は再同期されません。
lvcreate コマンドの --nosync オプションを指定せずに RAID 論理ボリュームを作成した場合は、lvextend コマンドの --nosync オプション を指定して、ミラーを再同期せずに、論理ボリュームを大きくできます。
以下の例は、--nosync オプションを使用せずに作成した RAID 論理ボリュームを拡張し、RAID ボリュームが作成時に同期されたことを示しています。ただし、この例では、ボリュームの拡張時にボリュームが同期されていないことを示しています。ボリュームには r の属性がありますが、--nosync オプションを指定して lvextend コマンドを実行すると、ボリュームに R の属性があることに注意してください。
# lvs vg
  LV   VG   Attr     LSize  Pool Origin Snap%  Move Log Cpy%Sync  Convert
  lv   vg   rwi-a-r- 20.00m                               100.00
# lvextend -L +5G vg/lv --nosync
  Extending 2 mirror images.
  Extending logical volume lv to 5.02 GiB
  Logical volume lv successfully resized
# lvs vg
  LV   VG   Attr     LSize Pool Origin Snap%  Move Log     Cpy%Sync  Convert
  lv   vg   Rwi-a-r- 5.02g                                   100.00
RAID ボリュームが非アクティブの場合は、--nosync オプションを指定してボリュームを作成する場合でも、ボリュームを拡張すると自動的に同期が省略されません。その代わりに、論理ボリュームの拡張部分を完全に再同期するかどうかのプロンプトが出されます。
注記
RAID ボリュームが復旧を実行している場合は、--nosync オプションを指定してボリュームを作成または拡張した場合は、論理ボリュームを拡張することはできません。--nosync オプションを指定しないと、復旧中に RAID ボリュームを拡張することができます。

4.4.19. 割り当てポリシーを閉じた論理 ボリューム の拡張

LVM ボリュームを拡張する際には、lvextend コマンドの --alloc cling オプションを使用して、cling 割り当てポリシーを指定できます。このポリシーにより、既存の論理ボリュームの最終セグメントと同じ物理ボリュームの領域が選択されます。物理ボリューム上に十分な領域がなく、タグのリストが lvm.conf ファイルで定義されている場合には、LVM は、物理ボリュームにタグのいずれかが割り当てられているかどうかを確認し、既存のエクステントと新しいエクステントの間で、物理ボリュームのタグを一致させようとします。
たとえば、1 つのボリュームグループ内の 2 つのサイト間でミラーリングされる論理ボリュームがある場合は、@site1 タグと @site2 タグで物理ボリュームをタグ付けすることで、物理ボリュームをどこでタグ付けすることができます。次に、lvm.conf ファイルで次の行を指定できます。
cling_tag_list = [ "@site1", "@site2" ]
物理ボリュームのタグ付けに関する情報は、付録D LVM オブジェクトタグ を参照してください。
以下の例では、lvm.conf ファイルが変更され、次の行が含まれるようになりました。
cling_tag_list = [ "@A", "@B" ]
また、この例では、/dev/sdb1/dev/sdc1/dev/sdd1/dev/sde1、/dev/sde1、/dev/sdg1、および /dev/sdh1 の物理ボリュームで設定されるボリュームグループ taft が作成されています。これらの物理ボリュームには、AB、および C のタグが付けられます。この例では C タグを使用しませんが、LVM がタグを使用してミラーレッグに使用する物理ボリュームを選択することを示しています。
# pvs -a -o +pv_tags /dev/sd[bcdefgh]
  PV         VG   Fmt  Attr PSize  PFree  PV Tags
  /dev/sdb1  taft lvm2 a--  15.00g 15.00g A
  /dev/sdc1  taft lvm2 a--  15.00g 15.00g B
  /dev/sdd1  taft lvm2 a--  15.00g 15.00g B
  /dev/sde1  taft lvm2 a--  15.00g 15.00g C
  /dev/sdf1  taft lvm2 a--  15.00g 15.00g C
  /dev/sdg1  taft lvm2 a--  15.00g 15.00g A
  /dev/sdh1  taft lvm2 a--  15.00g 15.00g A
以下のコマンドは、ボリュームグループ taft から 10 ギガバイトのミラー化ボリュームを作成します。
# lvcreate --type raid1 -m 1 -n mirror --nosync -L 10G taft
  WARNING: New raid1 won't be synchronised. Don't read what you didn't write!
  Logical volume "mirror" created
以下のコマンドは、ミラーレッグおよび RAID メタデータのサブボリュームに使用されるデバイスを表示します。
# lvs -a -o +devices
  LV                VG   Attr       LSize  Log Cpy%Sync Devices
  mirror            taft Rwi-a-r--- 10.00g       100.00 mirror_rimage_0(0),mirror_rimage_1(0)
  [mirror_rimage_0] taft iwi-aor--- 10.00g              /dev/sdb1(1)
  [mirror_rimage_1] taft iwi-aor--- 10.00g              /dev/sdc1(1)
  [mirror_rmeta_0]  taft ewi-aor---  4.00m              /dev/sdb1(0)
  [mirror_rmeta_1]  taft ewi-aor---  4.00m              /dev/sdc1(0)
以下のコマンドは、ミラー化ボリュームのサイズを拡張し、cling 割り当てポリシーを使用して、同じタグが付いた物理ボリュームを使用して、ミラーレッグを拡張する必要があることを示します。
# lvextend --alloc cling -L +10G taft/mirror
  Extending 2 mirror images.
  Extending logical volume mirror to 20.00 GiB
  Logical volume mirror successfully resized
以下に表示したコマンドは、レッグとして同一のタグが付いた物理ボリュームを使用してミラーレッグが拡張されているのを示しています。C のタグが付いた物理ボリュームは無視されることに注意してください。
# lvs -a -o +devices
  LV                VG   Attr       LSize  Log Cpy%Sync Devices
  mirror            taft Rwi-a-r--- 20.00g       100.00 mirror_rimage_0(0),mirror_rimage_1(0)
  [mirror_rimage_0] taft iwi-aor--- 20.00g              /dev/sdb1(1)
  [mirror_rimage_0] taft iwi-aor--- 20.00g              /dev/sdg1(0)
  [mirror_rimage_1] taft iwi-aor--- 20.00g              /dev/sdc1(1)
  [mirror_rimage_1] taft iwi-aor--- 20.00g              /dev/sdd1(0)
  [mirror_rmeta_0]  taft ewi-aor---  4.00m              /dev/sdb1(0)
  [mirror_rmeta_1]  taft ewi-aor---  4.00m              /dev/sdc1(0)

4.4.20. 論理ボリュームのアクティブ化の制御

lvcreate コマンドまたは lvchange コマンドの -k オプションまたは --setactivationskip {y|n} オプションを使用して、通常のアクティベーションコマンドの実行時に、論理ボリュームを省略するようにフラグを設定できます。このフラグは非アクティブ化の実行中には適用されません。
lvs コマンドを使用して、このフラグが論理ボリュームに設定されているかどうかを判別できます。以下の例にあるように k 属性が表示されます。
# lvs vg/thin1s1
LV         VG  Attr       LSize Pool  Origin
thin1s1    vg  Vwi---tz-k 1.00t pool0 thin1
デフォルトでは、シンスナップショットボリュームには、アクティブ化のスキップのためにフラグが設定されます。標準の -ay オプションまたは --activate y オプションの他に、-K オプションまたは --ignoreactivationskip オプションを使用して、k 属性セットで論理ボリュームをアクティブにできます。
以下のコマンドはシンスナップショットの論理ボリュームをアクティブ化します。
# lvchange -ay -K VG/SnapLV
lvcreate コマンドの -kn オプションまたは --setactivationskip n オプションを指定すると、論理ボリュームが作成されると、永続的なアクティブ化スキップフラグをオフにできます。lvchange コマンドの -kn オプションまたは --setactivationskip n オプションを指定すると、既存の論理ボリュームに対してフラグをオフにできます。-ky オプションまたは --setactivationskip y オプションを使用して、フラグを再度オンにできます。
以下のコマンドは、アクティブ化スキップフラグがない、スナップショット論理ボリュームを作成します。
# lvcreate --type thin -n SnapLV -kn -s ThinLV --thinpool VG/ThinPoolLV
以下のコマンドは、スナップショット論理ボリュームから、アクティブ化スキップフラグを削除します。
# lvchange -kn VG/SnapLV
/etc/lvm/lvm.conf ファイルの auto_set_activation_skip 設定を使用して、デフォルトのアクティブ化スキップ設定を制御できます。

4.4.21. 過去の論理ボリュームの追跡および表示 (Red Hat Enterprise Linux 7.3 以降)

Red Hat Enterprise Linux 7.3 では、lvm.conf 設定ファイルで record_lvs_history メタデータオプションを有効にして、削除したシンプロビジョニングのスナップショットとシン論理ボリュームを追跡するようにシステムを設定できます。これにより、元の依存関係チェーンから削除され、過去の論理ボリュームになった論理ボリュームを含む、完全なシンスナップショット依存関係チェーンを表示できます。
lvm.conf 設定ファイルで lvs_history_retention_time メタデータオプションを使用し、保持時間(秒)を指定して、決められた期間、システムに過去のボリュームを保持するように設定できます。
過去の論理ボリュームでは、削除された論理ボリュームを単純化したものが保持され、以下の、ボリュームのレポートフィールドが含まれます。
  • lv_time_removed - 論理ボリュームの削除時間
  • lv_time - 論理ボリュームの作成時間
  • lv_name - 論理ボリュームの名前
  • lv_uuid - 論理ボリュームの UUID
  • vg_name - 論理ボリュームを含むボリュームグループ
ボリュームを削除すると、過去の論理ボリューム名には頭にハイフンが付きます。たとえば、論理ボリューム lvol1 を削除すると、過去のボリュームの名前は -lvol1 になります。過去の論理ボリュームは再アクティベートすることができません。
record_lvs_history メタデータオプションが有効になっている場合でも、lvremove コマンドの --nohistory オプションを指定して論理ボリュームを削除すると、過去の論理ボリュームを個別に保持しないようにできます。
ボリューム表示に過去の論理ボリュームを含むには、LVM 表示コマンドに -H|--history オプションを指定します。-H オプションとともに、レポートフィールド lv_full_ancestors および lv_full_descendants を指定すると、過去のボリュームを含む、完全にシンプロビジョニングされたスナップショットの依存関係チェーンを表示できます。
以下のコマンド群は、過去の論理ボリュームを表示および管理する例を示します。
  1. lvm.conf ファイルに record_lvs_history=1 を設定して、過去の論理ボリュームを保持します。このメタデータオプションは、デフォルトでは有効ではありません。
  2. 以下のコマンドを入力して、シンプロビジョニングのスナップショットチェーンを表示します。
    この例では、以下のように設定されています。
    • lvol1 は元のボリュームで、チェーン内で最初のボリュームになります。
    • lvol2 は、lvol1 のスナップショットです。
    • lvol3 は、lvol2 のスナップショットです。
    • lvol4 は、lvol3 のスナップショットです。
    • lvol5 も、lvol3 のスナップショットです。
    例の lvs 表示コマンドに -H オプションが含まれている場合でも、シンスナップショットボリュームは削除されておらず、過去の論理ボリュームは表示されないことに注意してください。
    # lvs -H -o name,full_ancestors,full_descendants
      LV    FAncestors        FDescendants
      lvol1                   lvol2,lvol3,lvol4,lvol5
      lvol2 lvol1             lvol3,lvol4,lvol5
      lvol3 lvol2,lvol1       lvol4,lvol5
      lvol4 lvol3,lvol2,lvol1
      lvol5 lvol3,lvol2,lvol1
      pool
    
  3. スナップショットチェーンから論理ボリューム lvol3 を削除してから再度 lvs コマンドを実行し、過去の論理ボリュームがどのようにその先先および子孫と表示されるかを確認します。
    # lvremove -f vg/lvol3
      Logical volume "lvol3" successfully removed
    # lvs -H -o name,full_ancestors,full_descendants
      LV     FAncestors         FDescendants
      lvol1                     lvol2,-lvol3,lvol4,lvol5
      lvol2  lvol1              -lvol3,lvol4,lvol5
      -lvol3 lvol2,lvol1        lvol4,lvol5
      lvol4  -lvol3,lvol2,lvol1
      lvol5  -lvol3,lvol2,lvol1
      pool
    
  4. 過去のボリュームが削除された時間を表示するには、lv_time_removed レポートフィールドを使用します。
    # lvs -H -o name,full_ancestors,full_descendants,time_removed
      LV     FAncestors         FDescendants              RTime
      lvol1                     lvol2,-lvol3,lvol4,lvol5
      lvol2  lvol1              -lvol3,lvol4,lvol5
      -lvol3 lvol2,lvol1        lvol4,lvol5               2016-03-14 14:14:32 +0100
      lvol4  -lvol3,lvol2,lvol1
      lvol5  -lvol3,lvol2,lvol1
      pool
    
  5. vgname/lvname フォーマットを以下の例のように指定すると、表示コマンドで過去の論理ボリュームを個別に参照できます。lv_attr フィールドの 5 番目のビットを h に設定して、ボリュームが過去のボリュームであることを示していることに注意してください。
    # lvs -H vg/-lvol3
      LV     VG   Attr       LSize
      -lvol3 vg   ----h-----    0
    
  6. ボリュームにライブの子孫がないと、LVM は過去の論理ボリュームを保持しません。これは、スナップショットチェーンの最後に論理ボリュームを削除すると、論理ボリュームが過去の論理ボリュームとして保持されないことを示しています。
    # lvremove -f vg/lvol5
      Automatically removing historical logical volume vg/-lvol5.
      Logical volume "lvol5" successfully removed
    # lvs -H -o name,full_ancestors,full_descendants
      LV     FAncestors         FDescendants
      lvol1                     lvol2,-lvol3,lvol4
      lvol2  lvol1              -lvol3,lvol4
      -lvol3 lvol2,lvol1        lvol4
      lvol4  -lvol3,lvol2,lvol1
      pool
    
  7. 以下のコマンドを実行して、ボリューム lvol1 および lvol2 を削除し、lvs コマンドでボリュームが削除されるとどのように表示されるかを確認します。
    # lvremove -f vg/lvol1 vg/lvol2
      Logical volume "lvol1" successfully removed
      Logical volume "lvol2" successfully removed
    # lvs -H -o name,full_ancestors,full_descendants
      LV     FAncestors           FDescendants
      -lvol1                      -lvol2,-lvol3,lvol4
      -lvol2 -lvol1               -lvol3,lvol4
      -lvol3 -lvol2,-lvol1        lvol4
      lvol4  -lvol3,-lvol2,-lvol1
      pool
    
  8. 過去の論理ボリュームを完全に削除するには、lvremove コマンドを再度実行します。以下の例のように、ハイフンが含まれる過去のボリューム名を指定します。
    # lvremove -f vg/-lvol3
    Historical logical volume "lvol3" successfully removed
    # lvs -H -o name,full_ancestors,full_descendants
      LV     FAncestors    FDescendants
      -lvol1               -lvol2,lvol4
      -lvol2 -lvol1        lvol4
      lvol4  -lvol2,-lvol1
      pool
    
  9. 子孫にライブボリュームが含まれるチェーンがある場合に限り、過去の論理ボリュームは保持されます。これは、以下の例のように、そのボリュームにリンクされている子孫がない場合に、過去の論理ボリュームを削除すると、チェーンの論理ボリュームがすべて削除されることを意味します。
    # lvremove -f vg/lvol4
      Automatically removing historical logical volume vg/-lvol1.
      Automatically removing historical logical volume vg/-lvol2.
      Automatically removing historical logical volume vg/-lvol4.
      Logical volume "lvol4" successfully removed