回答:
ボリュームグループは、物理ボリューム全体で構成されます。物理ボリュームは多くのエクステントで構成されます(エクステントは通常4MBです)。各エクステントは異なる論理ボリュームに属する場合があります。論理ボリュームを別のグループに転送するには、エクステントを単純に転送することはできません。これにより、物理ボリュームがソースVGとターゲットVGの間で分割される可能性があるためです。
できることは、vgsplit
コマンドを使用して、ソースVGからターゲットVGに1つ以上のPVを転送することです。転送するPVまたはLV(一度に1つのみ)を指定できます。LVを指定する場合、その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の物理的な境界を保持してデータを移動する場合、組み込みツールはありませんが、ミラーを作成してから元のを削除できます。
Debianのストレッチ(9.0)、即ち2.02.168-2でLVMのように、それはの組み合わせを使用してボリュームグループにまたがる論理ボリュームのコピーを行うことが可能だvgmerge
、lvconvert
とvgsplit
。移動はコピーと削除の組み合わせであるため、これは移動に対しても機能します。
または、pvmove
ボリュームを移動するだけに使用できます。
ループデバイスを使用した完全な自己完結型のセッション例と
lvconvert
次のとおりです。
要約:vg1
論理ボリュームlv1
、およびvg2
でボリュームグループを作成しlv2
、lv1
inのコピーを作成しますvg2
ます。
ファイルを作成します。
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
次に、を使用してRAID 1ミラーペアを作成lv1
し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)これらのコマンドのほとんどは、rootとして実行する必要があります。
2)2つのボリュームグループ内の論理ボリュームの名前に重複がある場合、vgmerge
続行を拒否します。
3)マージ時には、論理ボリュームはvg1
非アクティブでなければなりません。また、スプリットでは、vg2
所属する論理ボリュームvg1
が非アクティブでなければなりません。私たちの場合、これはlv1
です。
私は自分のものを提供します:
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