ボリューム グループは、物理ボリューム全体で構成されます。物理ボリュームは多くのエクステントで構成されます (エクステントは通常 4MB です)。各エクステントは異なる論理ボリュームに属する場合があります。論理ボリュームを別のグループに転送する場合、単純にエクステントを転送することはできません。これは、ソース VG とターゲット VG の間で物理ボリュームが分割される可能性があるためです。
vgsplit
を使用して、1 つ以上の PV をソース VG からターゲット VG に転送することができます。 指図。どの 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 Stretch (9.0) の LVM、つまり 2.02.168-2 では、vgmerge
の組み合わせを使用して、ボリューム グループ間で論理ボリュームのコピーを実行できます。 、 lvconvert
、および vgsplit
.移動はコピーと削除の組み合わせであるため、これは移動にも機能します。
または、 pvmove
を使用できます ボリュームを移動するだけです。
ループ デバイスとlvconvert
を使用した完全な自己完結型のサンプル セッション
まとめ:ボリューム グループ vg1
を作成します 論理ボリューム lv1
を使用 、および vg2
lv2
で 、および lv1
のコピーを作成します 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
次に、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) これらのコマンドのほとんどは、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