Show Table of Contents
4.4.19.
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
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 のセグメントタイプ
セグメントタイプ | 説明 | ||
---|---|---|---|
raid1 | RAID1 ミラーリング。これは lvcreate コマンドの --type 引数のデフォルト値で、-m を指定してもストライピングを指定しない場合に使用されます。 | ||
raid4 | RAID4 専用パリティーディスク | ||
raid5 | raid5_ls と同じ | ||
raid5_la |
| ||
raid5_ra |
| ||
raid5_ls |
| ||
raid5_rs |
| ||
raid6 | raid6_zr と同じ | ||
raid6_zr |
| ||
raid6_nr |
| ||
raid6_nc |
| ||
raid10 |
| ||
raid0/raid0_meta (Red Hat Enterprise Linux 7.3 以降) | ストライピング。RAID0 では、ストライプ単位で、複数のデータサブボリュームに論理ボリュームデータが分散されます。これは、パフォーマンスを向上させるために使用します。論理ボリュームのデータは、いずれかのデータサブボリュームで障害が発生すると失われます。RAID0 ボリュームの作成については、「RAID0 ボリュームの作成 (Red Hat Enterprise Linux 7.3 以降)」 を参照してください。 |
ほとんどのユーザーでは、
raid1
、raid4
、raid5
、raid6
、および 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_0
、lv_rmeta_1
、lv_rmeta_2
、および lv_rmeta_3
)、データサブボリュームが 4 つ (lv_rimage_0
、lv_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
オプションで、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_0
、lv_rimage_1
、および lv_rimage_2
で構成される 3 方向の RAID1 アレイから lv_rimage_1
を削除すると、RAID1 アレイを構成するイメージの名前は lv_rimage_0
と lv_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_lv
と new
の 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_policy
が allocate
に設定され、予備のデバイスがない場合、割り当ては失敗し、論理ボリュームはそのまま残ります。割り当てが失敗した場合は、「「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_0
と lv_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_action
と raid_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_policy
と mirror_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 つのクラスターノードでのみ排他的にアクティブ化する必要があります。
シンボリュームを作成するには、以下のタスクを実行します。
vgcreate
コマンドを使用して、ボリュームグループを作成します。lvcreate
コマンドを使用して、シンプールを作成します。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/mythinpool
に thinvolume
という名前のシンボリュームを作成します。ここでは、仮想サイズを指定して、ボリュームを含むプールよりも大きなボリュームの仮想サイズを指定している点に注意してください。
#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 では、少なくともデフォルトのチャンクサイズを使用することを推奨しています。チャンクサイズが小さすぎて、ボリュームのメタデータ用の容量が不足すると、ボリュームhデータを作成できません。メタデータボリュームが完全に満杯になる前に、論理ボリュームを拡張するか、またはストレージが満杯にならないようにします。シンプールを十分なチャンクサイズで設定し、メタデータ用に容量が不足するようにします。
ストライピングはプールを作成するためにサポートされています。以下のコマンドは、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_threshold
と snapshot_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 キャッシュ論理ボリュームを作成できます。
- 低速な物理ボリュームと高速な物理ボリュームを含むボリュームグループを作成します。この例では、
/dev/sde1
は低速なデバイスであり、/dev/sdf1
は高速なデバイスです。両方のデバイスはボリュームグループVG
に含まれます。#
pvcreate /dev/sde1
#pvcreate /dev/sdf1
#vgcreate VG /dev/sde1 /dev/sdf1
- 作成元のボリュームを作成します。この例では、サイズが 10 ギガバイトであり、低速な物理ボリュームである
/dev/sde1
から構成されるlv
という名前の作成元ボリュームが作成されます。#
lvcreate -L 10G -n lv VG /dev/sde1
- キャッシュプール論理ボリュームを作成します。この例では、ボリュームグループ
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 ページを参照してください。 - キャッシュプール論理ボリュームを作成元論理ボリュームにリンクして、キャッシュ論理ボリュームを作成します。作成されたユーザー使用可能なキャッシュ論理ボリュームには、作成元の論理ボリュームの名前が付けられます。作成元の論理ボリュームは、
_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) - オプションとして、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/lvol1
、vg00/lvol2
、および vg00/lvol3
にはすべて @some_tag
タグが付きます。以下のコマンドは、この 3 つのボリュームのスナップショット論理ボリュームを連続的にマージします。マージは vg00/lvol1
、vg00/lvol2
、vg00/lvol3
の順で行われます。--background
オプションを使用している場合は、すべてのスナップショット論理ボリュームのマージが並行して開始されます。
# lvconvert --merge @some_tag
LVM オブジェクトのタグ付けに関する情報は、「付録D LVM オブジェクトタグ」を参照してください。
lvconvert --merge
コマンドについては、lvconvert
(8) の man ページをご覧ください。
4.4.10. 永続的なデバイス番号
メジャーデバイス番号とマイナーデバイス番号はモジュールのロード時に動的に割り当てられます。一部のアプリケーションは、ブロックデバイスが常に同じデバイス (メジャーとマイナー) 番号でアクティブ化されている場合に、最も効果的に機能します。これらは
lvcreate
と lvchange
コマンドで、以下の引数を使用することによって指定できます。
--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 ボリュームの名前を変更する詳細は、『Red Hat Enterprise Linux 7 で root のボリュームグループまたは論理ボリュームの名前を変更する』を参照してください。
クラスター内の個別ノード上で論理ボリュームをアクティブ化する方法は 「クラスター内の個別ノードでの論理ボリュームのアクティブ化」 を参照してください。
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 論理ボリュームのプロパティーを表示するのに使用できるコマンドは、
lvs
、lvdisplay
、および 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
が作成されています。これらの物理ボリュームには、A
、B
および 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
- 論理ボリュームの UUIDvg_name
- 論理ボリュームを含むボリュームグループ
ボリュームを削除すると、過去の論理ボリューム名には頭にハイフンが付きます。たとえば、論理ボリューム
lvol1
を削除すると、過去のボリューム名は -lvol1
となります。過去の論理ボリュームは再アクティベートすることができません。
record_lvs_history
メタデータオプションを有効にしていても、lvremove
コマンドの --nohistory
オプションを指定して論理ボリュームを削除すれば、過去の論理ボリュームを個別に保持しないようにすることができます。
ボリューム表示に過去の論理ボリュームを含むには、LVM 表示コマンドに
-H|--history
オプションを指定します。-H
オプションとともに、レポートフィールド lv_full_ancestors
および lv_full_descendants
を指定すると、過去のボリュームを含む完全なシンスナップショット依存関係チェーンを表示できます。
以下のコマンド群は、過去の論理ボリュームを表示および管理する例を示します。
lvm.conf
ファイルにrecord_lvs_history=1
を設定して、過去の論理ボリュームを保持します。このメタデータオプションは、デフォルトでは有効ではありません。- 以下のコマンドを入力して、シンプロビジョニングスナップショットチェーンを表示します。この例では、以下のように設定されています。
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 - スナップショットチェーンから論理ボリューム
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 - 過去のボリュームが削除された時間を表示するには、
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 - vgname/lvname フォーマットを以下の例のように指定すると、表示コマンドで過去の論理ボリュームを個別に参照できます。
lv_attr
フィールドの 5 番目の例をh
に設定して、ボリュームが過去のボリュームであることを示すように設定されています。#
lvs -H vg/-lvol3
LV VG Attr LSize -lvol3 vg ----h----- 0 - ボリュームにライブの子孫がないと、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 - 以下のコマンドを実行して、ボリューム
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 - 過去の論理ボリュームを完全に削除したら、
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 - 子孫にライブボリュームが含まれるチェーンがある場合に限り、過去の論理ボリュームは保持されます。これは、以下の例のように、そのボリュームにリンクされている子孫がない場合に、過去の論理ボリュームを削除すると、チェーンの論理ボリュームがすべて削除されることを意味します。
#
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
このページには機械翻訳が使用されている場合があります (詳細はこちら)。