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

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

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

論理ボリュームを作成するには、lvcreate コマンドを使用します。論理ボリュームに名前を指定しないと、デフォルトの名前 lvol# が使用されます (# の部分には論理ボリュームの内部番号が入ります)。
論理ボリュームを作成すると、論理ボリュームがボリュームグループから作成され、ボリュームグループを構成する物理ボリュームの空きエクステントが使用されます、通常、論理ボリュームは、その下層の物理ボリュームで次に使用可能な空き領域を使用します。論理ボリュームを変更すると、物理ボリューム領域の確保と再割り当てが可能になります。
以下のコマンドは、ボリュームグループ vg1 に、10 ギガバイトの論理ボリュームを作成します。
# lvcreate -L 10G vg1
論理ボリュームサイズのデフォルト単位はメガバイトです。次のコマンドは、ボリュームグループ testvg 内に、名前が testlv でサイズが 1500 メガバイトのリニア論理ボリュームを作成し、ブロックデバイス /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 引数を使用すれば、ボリュームグループ全域を使用する論理ボリュームを作成できます。もしくは、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 つの物理ボリュームにまたがってストライプ化論理ボリュームを作成します。論理ボリュームは、ボリュームグループ vg0 から作成され、サイズが 50 ギガバイトで、名前が gfslv になります。
# lvcreate -L 50G -i 2 -I 64 -n gfslv vg0
リニアボリュームと同じく、ストライプに使用する物理ボリュームのエクステントを指定できます。以下のコマンドは、2 つの物理ボリュームにまたがってストライプ化する、名前が stripelv でサイズが 100 エクステントのストライプ化ボリュームを、ボリュームグループ 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 論理ボリュームを作成するには、lvcreate コマンドの --type 引数に raid タイプを指定します。表4.1「RAID のセグメントタイプ」 で、使用できる RAID セグメントタイプについて説明しています。

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

セグメントタイプ説明
raid1RAID1 ミラーリング。これは lvcreate コマンドの --type 引数のデフォルト値で、-m を指定してもストライピングを指定しない場合に使用されます。
raid4RAID4 専用パリティーディスク
raid5raid5_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 + データ再起動
raid6raid6_zr と同じ
raid6_zr
RAID6 zero restart
ローテートパリティーゼロ (左から右) + データ再起動
raid6_nr
RAID6 N restart
ローテートパリティー N (左から右) + データ再起動
raid6_nc
RAID6 N continue
ローテートパリティー N (左から右) + データを継続
raid10
ストライプ化ミラー。これは lvcreate コマンドの --type 引数のデフォルト値で、-m を指定し、ストライプを 2 つ以上指定する場合に使用されます。
ミラーセットのストライピング
raid0/raid0_meta (Red Hat Enterprise Linux 7.3 以降)ストライピング。RAID0 では、ストライプ単位で、複数のデータサブボリュームに論理ボリュームデータが分散されます。これは、パフォーマンスを向上させるために使用します。論理ボリュームのデータは、いずれかのデータサブボリュームで障害が発生すると失われます。RAID0 ボリュームの作成については、「RAID0 ボリュームの作成 (Red Hat Enterprise Linux 7.3 以降)」 を参照してください。
ほとんどのユーザーでは、raid1raid4raid5raid6、および raid10 の 5 つのプライマリータイプの 1 つを指定すれば十分です。
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_0lv_rmeta_1lv_rmeta_2、および lv_rmeta_3)、データサブボリュームが 4 つ (lv_rimage_0lv_rimage_1lv_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 オプションで、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 は、ボリュームグループメタデータへの更新などの他の I/O 操作を、LVM デバイスに押し出す可能性があります。これはとくに RAID 論理ボリュームを多数作成している場合に生じる可能性があります。これにより、他の LVM 操作の速度が遅くなる場合があります。
RAID 論理ボリュームが初期化される速度は、復旧スロットルを実装することで制御することができます。sync 操作が実施される速度は、lvcreate コマンドの --minrecoveryrate および --maxrecoveryrate オプションで、I/O 速度の最小および最大を設定することで制御できます。
  • --maxrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最大復旧速度を設定し、通常の I/O 操作が押し出されないようにします。速度 は、アレイ内の各デバイスに対して、1 秒あたりの量を指定します。サフィックスを指定しない場合は、kiB/sec/device と見なされます。復旧速度を 0 に設定すると無制限になります。
  • --minrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、sync 操作の I/O が最小スループットを達成できるようにします。速度 アレイ内の各デバイスに対して、1 秒あたりの量を指定します。サフィックスを指定しない場合は、kiB/sec/device と見なされます。
以下のコマンドは、最大速度が 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 リニアボリュームに変換する場合、削除する物理ボリュームを指定できます。以下の例は、/dev/sda1/dev/sdb1 の 2 つのイメージで構成される 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_0lv_rimage_1、および lv_rimage_2 で構成される 3 方向の RAID1 アレイから lv_rimage_1 を削除すると、RAID1 アレイを構成するイメージの名前は lv_rimage_0lv_rimage_1 になります 。サブボリューム 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 ボリュームからイメージを分割後、その分割を永続的にするには 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. 「allocate」RAID 障害ポリシー
以下の例では、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 に設定され、予備のデバイスがない場合、割り当ては失敗し、論理ボリュームはそのまま残ります。割り当てが失敗した場合は、「「warn」RAID 障害ポリシー」 で説明されているように、ドライブを修正し、その後で論理ボリュームを非アクティブ化およびアクティブ化できます。また、「RAID デバイスの交換」 で説明されているように、障害が発生したデバイスを置き換えることも可能です。
4.4.3.9.2. 「warn」RAID 障害ポリシー
以下の例では、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 引数を使用すれば、LVM から、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)
1 度に 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 操作はアレイ全体を対象に、アレイ内の不一致の数を記録しますが、不一致を修復することはありません。repair 操作が、不一致が見つかる際に修復します。
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: すべての同期操作が完了しています (何も実行していません)
  • resync: アレイを初期化、またはマシン障害後の復旧を実行します
  • 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 と見なされます。復旧速度を 0 に設定すると無制限になります。
  • --minrecoveryrate Rate[bBsSkKmMgG]
    RAID 論理ボリュームの最小復旧速度を設定し、負荷の高い通常の I/O がある場合でも、sync 操作の I/O が最小スループットを達成できるようにします。速度 アレイ内の各デバイスに対して、1 秒あたりの量を指定します。サフィックスを指定しない場合は、kiB/sec/device と見なされます。

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 つのコマンドで複数回指定することができるため、1 回で論理ボリュームのすべての物理ボリュームで、write-mostly 属性を切り替えることができます。
  • --[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.conf ファイルでロッキングタイプが正しく設定されている必要があります。クラスター内におけるミラー化ボリュームの作成例は、「クラスター内でのミラー化 LVM 論理ボリュームの作成」 をご覧ください。
単一クラスター内の複数のノードから短時間に連続して複数の LVM ミラーを作成または変換するコマンドを実行しようとすると、これらのコマンドのバックログが生じる場合があります。これによって、要求した操作がタイムアウトになって失敗する可能性があります。この問題を回避するために、そのクラスターのいずれかのノードから、クラスターミラー作成コマンドを実行することを推奨します。
ミラー化ボリュームを作成する場合、lvcreate コマンドの -m 引数を使用して、データのコピー数を指定します。-m1 と指定すると、ミラーが 1 つ作成され、ファイルシステムのコピーが合計 2 つとなります (リニア論理ボリューム 1 つと、コピーが 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 を超えるミラー用のリージョンサイズを指定するには、ミラーサイズをテラバイト単位で考えて、2 の次の累乗に切り上げ、その数を lvcreate コマンドの -R 引数として使用することが一般的な方法です。たとえば、ミラーサイズが 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 は、単一または複数のミラーと同期するリージョンを追跡するのに使用する小さなログを維持します。デフォルトでは、このログはディスクに保持され、再起動後も永続化するため、マシンが再起動/クラッシュするたびにミラーを再同期する必要はありません。代わりに、--corelog 引数を使用すると、このログがメモリーで保持されるように指定できるため、余分なログデバイスが不要になります。ただし、この場合は、再起動のたびにミラー全体を再同期する必要がでてきます。
以下のコマンドは、ボリュームグループ bigvg からミラー化論理ボリュームを作成します。論理ボリュームの名前は ondiskmirvol で、ミラー が 1 つあります。ボリュームのサイズは 12MB で、ミラーログをメモリーに保持します。
# lvcreate --type mirror -L 12MB -m 1 --mirrorlog core -n ondiskmirvol bigvg
  Logical volume "ondiskmirvol" created
このミラーログは、ミラーレッグが作成されるデバイスとは異なるデバイスで作成されます。しかし、vgcreate コマンドに --alloc anywhere 引数を使用すれば、ミラーレッグの 1 つと同じデバイス上ミラーログを作成することができます。ただし、これによりパフォーマンスが低下する場合がありますが、配下のデバイスが 2 つしかなくてもミラーを作成できます。
以下のコマンドは、単一のミラーを持つミラー化論理ボリュームを作成します。このミラーログはミラーレッグの 1 つと同じデバイス上にあります。この例では、ボリュームグループ vg0 は 2 つのデバイスで構成されています。このコマンドによって、ボリュームグループ vg0 内に、名前が mirrorlv で、サイズが 500 MB のボリュームが作成されます。
# lvcreate --type mirror -L 500M -m 1 -n mirrorlv -alloc anywhere vg0

注記

クラスター化されたミラーでは、ミラーログ管理は、その時点でクラスター ID の最も低いクラスターノードによって行われます。そのため、クラスターミラーログを保持するデバイスがクラスターのサブセット上で利用できなくなる場合、最も低い ID を持つクラスターノードがミラーログへのアクセスを保持する限り、クラスター化されたミラーは影響を受けることなく、機能を継続することができます。ミラーは影響を受けないため、自動修正アクション (修復) も実行されません。ただし、最も低い ID のクラスターノードがミラーログにアクセスできなくなると、(他のノードからログへのアクセスが可能かどうかにかかわらず) 自動アクションが作動します。
自動的にミラー化されるミラーログを作成するために、--mirrorlog mirrored 引数を指定することができます。以下のコマンドはボリュームグループ bigvg からミラー化論理ボリュームを作成します。論理ボリュームは twologvol という名前で、単一のミラーを持ちます。このボリュームのサイズは 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 から構築されます。第 1 のミラーレッグはデバイス /dev/sda1 上にあり、第 2 のミラーレッグはデバイス /dev/sdb1 上にあり、そのミラーログは /dev/sdc1 上にあります。
# lvcreate --type mirror -L 500M -m 1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1
以下のコマンドは、単一のミラーを持つミラー化論理ボリュームを作成します。このボリュームは、サイズは 500 MB、名前は mirrorlv であり、ボリュームグループ vg0 から構築されます。第 1 のミラーレッグは、エクステントが 0 から 499 のデバイス /dev/sda1 にあり、第 2 のミラーレッグはエクステントが 0 から 499 のデバイス /dev/sdb1 にあります。ミラーログは、エクステントが 0 のデバイス /dev/sdc1 から始まります。エクステントサイズは 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_policymirror_log_fault_policy のパラメーターを使用すると、デバイスの障害が発生した場合にミラー化論理ボリュームがどのような動作をするかを定義することができます。これらのパラメーターが remove に設定されると、システムは障害のあるデバイスを削除して、そのデバイスなしで実行しようとします。これらのパラメーターが allocate に設定されていると、システムは障害のあるデバイスを削除して、そのデバイスの代わりとなる新たなデバイス上での領域の割り当てを試みます。代わりに割り当てることができる適切なデバイスと領域がない場合、このポリシーは 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 引数を使用する必要があります。
以下のコマンドは、ミラー化論理ボリューム 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 オプションを指定します。
  • プロンプトを省略し、かつミラーイメージとミラーログを対象とする異なる置き換えポリシーを示すには、--use-policies 引数を指定して、lvm.conf ファイル内の mirror_log_fault_policy および mirror_device_fault_policy パラメーターによって指定されているデバイス置き換えポリシーを使用することができます。

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
ストライピングはプールを作成するためにサポートされています。以下のコマンドは、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 を使用してボリュームの削除、lvslvdisplay のコマンドを使用してボリュームの情報の表示を行うことができます。
デフォルトでは、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 オプションを使用してスナップショットボリューム名を指定することができます。以下のコマンドは、mysnapshot1 と呼ばれるシンプロビジョニングされた論理ボリューム vg001/thinvolume のシンプロビジョニングされたスナップショットボリュームを作成します。
# 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 指定すると、シンスナップショット論理ボリュームのすべての先祖 (ancestor) と子孫 (descendant) をそれぞれ表示できます。
下記の例は以下を意味します。
  • stack1 は、ボリュームグループ vg001 で元となるボリュームです。
  • stack2 は、stack1 のスナップショットです。
  • stack3 は、stack2 のスナップショットです。
  • stack4 は、stack3 のスナップショットです。
さらに
  • stack5 も、stack2 のスナップショットです。
  • 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 では、キャッシュされた論理ボリュームをシンプール論理ボリュームに変換できます。プールから作成されたすべてのシン論理ボリュームがキャッシュを共有することに注意してください。
    以下のコマンドでは、シンプールメタデータ (lv_tmeta) を割り当てるために高速なデバイス /dev/sdf1 を使用します。これは、キャッシュプールボリュームで使用されるのと同じデバイスです。つまり、シンプールメタデータボリュームはキャッシュデータ論理ボリューム 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 タグが付きます。以下のコマンドは、この 3 つのボリュームのスナップショット論理ボリュームを連続的にマージします。マージは vg00/lvol1vg00/lvol2vg00/lvol3 の順で行われます。--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
クラスター内の個別ノード上で論理ボリュームをアクティブ化する方法は 「クラスター内の個別ノードでの論理ボリュームのアクティブ化」 を参照してください。

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 方向ストライプがある場合は、ボリュームグループに物理ボリュームを 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 論理ボリュームは、新規の RAID リージョンの同期を実行しなくても、lvextend コマンドを使って拡張することができます。
lvcreate コマンドで RAID 論理ボリュームを作成する場合は、--nosync オプションを指定すると、論理ボリュームを作成する際に RAID リージョンが同期されません。--nosync オプションを使って作成した RAID 論理ボリュームを後に拡張する場合も、その時に RAID 拡張が同期されることはありません。
--nosync オプションを使用して既存の論理ボリュームが作成されたかどうかを判別するには、lvs コマンドを使用してボリュームの属性を表示します。論理ボリュームが、初期同期を行わずに作成された RAID ボリュームの場合は、その論理ボリュームの属性フィールドの先頭に「R」と表示されます。初期同期が行われて論理ボリュームが作成された場合は、「r」と表示されます。
以下のコマンドは、初期同期を行わずに作成した RAID 論理ボリューム lv の属性を表示します。属性フィールドの先頭に「R」文字が表示されます。属性フィールドの 7 番目が「r」文字になっていますが、これは RAID 対象のタイプであることを示しています。属性フィールドの意味は、表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 論理ボリュームを拡張し、その論理ボリュームの作成時にそれが同期されたことを示しています。ただし、この例では、ボリュームの拡張時にボリュームが同期されていないことを示しています。ボリュームには「r」の属性が設定されていますが、lvextend コマンドに --nosync オプションを付けて実行すると、ボリュームには「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. cling 割り当てポリシーを使用した論理ボリュームの拡張

LVM ボリュームを拡張する際には、lvextend コマンドの --alloc cling オプションを使用して、cling 割り当てポリシーを指定することができます。このポリシーによって、同一の物理ボリューム上のスペースが、既存の論理ボリュームの最終セグメントとして選択されます。物理ボリューム上に十分な領域がなく、タグの一覧が lvm.conf ファイル内で定義されている場合には、LVM は、その物理ボリュームにいずれかのタグが付けられているかを確認し、既存エクステントと新規エクステント間で、物理ボリュームのタグを適合させようとします。
たとえば、ご使用の論理ボリュームが単一のボリュームグループ内の 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/sdf1/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 コマンドを実行し、過去の論理ボリュームが、先祖 (ancestor) と子孫 (descendant) とともに、どのように表示されるかを確認します。
    # 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