論理ボリュームを1つのボリュームグループから別のボリュームグループに移動/コピーする簡単な方法はありますか?(LVM2)


15

自宅のサーバーにあるディスクの束を再配置しているのですが、LVMの論理ボリュームの束を別のボリュームグループに移動したいと思っています。これを行う簡単な方法はありますか?cplvコマンドの言及を見ましたが、これは古いか、Linuxで利用可能なものではないようです。

回答:


20

論理ボリュームを、ソースボリュームグループの残りの部分とは別の物理ボリュームのサブセットに配置できる場合(lvconvert sourcevg/sourcelv /dev/pv1 ...役立つ場合があります)、vgsplitlvを新しいvgに分割しvgmerge、新しいvgを目標平均

LVMにはミラーリング機能がありますが、ミラーの両方のレッグが同じvgに存在する必要があり、関連付けを解除できないため、ボリュームグループ間でコピーを作成するために(正常に)使用することはできません

任意のボリュームを別のボリュームにコピーする方法で、LVMボリュームを別のボリュームにコピーできますdd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M。適切なサイズのターゲットlvを作成してから、でコンテンツをコピーします。ソースボリュームがアクティブな場合、LVMを使用して一貫したコピーを作成できます。最初にソースlvのスナップショットを取得しlvcreate -s、次にスナップショットをコピーします。


1
Brilliant Gilles .... vgsplit / vgmergeはおそらく大丈夫でしょう。その後、pvmoveを使用して物理エクステントを新しいディスクに移動し、VGから古いボリュームを削除できます。
jkp

残念ながら、エクステントサイズが異なるため、これは最終的には機能しませんでした。これが問題にならない場合は、この方法が最も簡単であることをお勧めします。
jkp

dd(古いボリュームを急ぐ必要がない場合)、新しいファイルシステムのUUIDを変更することを忘れないでください:tune2fs -U random / dev / targetvg / targetlv
midenok

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmoveは物理ボリューム間でデータを移動できます:LVM管理者ガイド


10
ただし、ボリュームグループ間ではありません。
マットビアンコ

繰り返しますが、これは2つの別々のボリュームグループでは機能しません
-kissgyorgy

最初にvgextend新しいpvを持つvg1、次に新しいpv pvmoveへのlv 、vg2にvgsplitある一時的なvg vgmerge。次にpvmove、lvからvg2の元のpv、vgreducevg2で中間pvの読み取りを取得します。または中間コピーを避けるために、することができますVG2、中に単に最初のマージVG1 pvmoveLV1、及びvgsplitVG2から再びVG1。これは、@マット・ビアンコと@kissgyorgyの異議に答えると@Gillesの溶液と同等ですが、スナップショットと低レベルを交換する必要があるddことでpvmove
marcz

1

Debianのストレッチ(9.0)でのLVMのとおり、すなわち2.02.168-2、それはの組み合わせを使用して、ボリューム・グループにまたがる論理ボリュームのコピーを行うことは可能だvgmergelvconvertvgsplit。移動はコピーと削除の組み合わせであるため、これは移動に対しても機能します。

または、pvmoveボリュームを移動するだけで使用できます。

ループデバイスを使用した完全な自己完結型のセッション例は lvconvert次のとおりです。

要約:vg1論理ボリュームlv1、およびvg2でボリュームグループを作成しlv2lv1inのコピーを作成しvg2ます。

ファイルを作成します。

truncate pv1 --size 100MB
truncate pv2 --size 100MB

ファイルにループデバイスを設定します。

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

ループデバイス上に物理ボリュームを作成します(LVMで使用するためにループデバイスを初期化します)。

pvcreate /dev/loop1 /dev/loop2

ボリュームグループを作成vg1し、vg2/dev/loop1/dev/loop2 それぞれ。

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

論理ボリュームを作成lv1し、lv2vg1vg2それぞれ。

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

lv1およびでext4ファイルシステムを作成しますlv2

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

オプションでlv1、コピーが正しく作成されたことを後で確認できるように、何かを書き込みます。確認しvg1、非アクティブ。

vgchange -a n vg1

テストモードでマージコマンドを実行します。これはにマージlv1されlv2ます。

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

そして実際に。

vgmerge -A y -l -v vg2 vg1

次に、を使用してRAID 1ミラーペアを作成lv1lvconvertます。<>引数が伝えlvconvertミラーコピーを作成すること lv1_copy/dev/loop2

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

次に、ミラーを分割します。新しいLVは今lv1_copyです。

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

確認しvg2、非アクティブ。

vgchange -a n vg2

その後(テストモード)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

まじ?実際に

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

結果の出力:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

ノート:

1)これらのコマンドのほとんどは、rootとして実行する必要があります。

2)2つのボリュームグループ内の論理ボリュームの名前に重複がある場合、vgmerge続行を拒否します。

3)マージ時:

Logical volumes in `vg1` must be inactive

分割して:

Logical volume `vg2/lv1` must be inactive.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.