あるボリュームグループから別のボリュームグループへの論理ボリュームの移動

あるボリュームグループから別のボリュームグループへの論理ボリュームの移動

論理ボリューム全体をあるボリュームグループから別のボリュームグループに移動できますか?

どの程度一致するlvを作成してデータをコピーすることは可能ですが、LVMツールのみを使用してこれを行う方法はありますか?

そうでなければ、理論的理由や技術的限界(範囲サイズ)はありますか?

答え1

ボリュームグループは物理ボリューム全体で構成されます。物理ボリュームは複数のエクステントで構成されています(1つのエクステントは通常4 MB)。各エクステントは異なる論理ボリュームに属することができます。論理ボリュームを別のグループに転送するために、エクステントを単純に転送することはできません。これは、ソースVGとターゲットVGの間で物理ボリュームを分割できるためです。

あなたができることは、1つ以上のPVをソースVGからターゲットVGに転送することです。vgsplit注文する。送信するPVまたはLVを指定できます(ただし、一度に1つずつ)。 LVが指定されている場合は、ソースVGの他のLVとは異なるPVに配置する必要があります。指定された名前のVGが存在しない場合、ターゲットVGが生成されます。

vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99

使いたいかもしれませんpvmoveまず、別のPVから移動する論理ボリュームを配置します。

VGの物理的な境界を維持してデータを移動したい場合は、組み込みツールはありませんが、次のことができます。ミラーを作成し、元のミラーを削除します。

答え2

vgmergelvconvertDebian Stretch(9.0)(つまり2.02.168-2)のLVMから始めると、との組み合わせを使用してボリュームグループ間で論理ボリュームをコピーできますvgsplit。移動はコピーと削除の組み合わせなので、移動にも適用されます。

pvmoveまたはを使用して物理範囲を移動できます。見積もりU&L:物理的範囲の目的:

単一の物理拡張領域は、LVMが個別に管理できる最小のディスク容量単位です。

以下は、ループデバイスを使用した完全なスタンドアロンのセッション例です lvconvert

要約:vg1論理ボリュームを使用し、lv1ボリュームvg2グループを作成し、lv2コピーを作成します。lv1vg2

ファイルを作成します。

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

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

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

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

pvcreate /dev/loop1 /dev/loop2

/dev/loop1 および /dev/loop2 にそれぞれボリュームグループ vg1 および vg2 を作成します。

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

vg1とvg2にそれぞれ論理ボリュームlv1とlv2を作成します。

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

lv1とlv2にext4ファイルシステムを作成します。

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

または、後でコピーが正しく作成されたことを確認するために、lv1に何かを作成します。 vg1を無効にします。

vgchange -a n vg1

テストモードでマージコマンドを実行します。これにより、vg1がvg2にマージされます。

# 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

lv1次に、を使用してRAID 1ミラーペアを作成しますlvconvert。この dest-pvパラメータは画像lvconvertをにコピーするように指示します/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/lv1

lvchange -a n /dev/vg2/lv1

その後(テストモード)

# 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. これらのコマンドはほとんどルートで実行する必要があります。#一部のコマンドの接頭辞は、これがコメントであることを示します。ルートプロンプトを表しません。

  2. 両方のボリュームグループに論理ボリューム名が重複している場合、継続はvgmerge拒否されます。

  3. マージ時に論理ボリュームをvg1無効にする必要があります。そして、分割時にvg2その論理ボリュームをvg1無効にする必要があります。私たちの場合はlv1

答え3

私が直接提供します。

umount /somedir/

lvdisplay /dev/vgsource/lv0 --units b

lvcreate -L 12345b -n lv0 vgtarget

dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress

mount /dev/vgtarget/lv0 /somedir/

よろしければソースを削除してください

lvremove vgsource/lv0

答え4

次のファイルがあるとします。s0

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb   s0 lvm2 a--  <223.57g      0  <223.57g
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1     lvm2 ---   931.51g 931.51g       0 

新しいハードドライブ/dev/sdbに移動したいです。/dev/sdc1/dev/sdd1

sdd1に物理ボリュームを作成する

$ pvcreate /dev/sdd1

s0これで、新しいディスクにボリュームグループを拡張できます。

$ vgextend s0 /dev/sdd1

これでデータの移動を開始できます

$ pvmove /dev/sdb /dev/sdd1

完了を待つ

/dev/sdb: Moved: 10.0%
...

/dev/sdb: Moved: 50.0%
...

/dev/sdb: Moved: 100.0%

確認する

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used    
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb      lvm2 ---   223.57g 223.57g       0 
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1  s0 lvm2 a--  <931.51g 707.94g <223.57g

これでグループ/dev/sdbからs0削除できます。

$ vgreduce s0 /dev/sdb

同じ手順に従ってください。/dev/sdc1

関連情報