
論理ボリュームをあるボリューム グループから別のボリューム グループに丸ごと移動することは可能ですか?
(ほぼ)一致する lv を作成してデータをコピーすることは可能ですが、LVM ツールだけでこれを行う方法はありますか?
そうでない場合、理論的な理由または技術的な制限(エクステントのサイズ)があるのでしょうか?
答え1
ボリューム グループは、物理ボリューム全体から構成されます。物理ボリュームは多数のエクステントから構成されます (エクステントは通常 4MB)。各エクステントは異なる論理ボリュームに属することができます。論理ボリュームを別のグループに転送する場合、エクステントを転送するだけでは不十分です。そうすると、物理ボリュームがソース VG とターゲット VG の間で分割される可能性があるためです。
1つまたは複数のPVをソースVGからターゲットVGに転送することができます。vgsplit
コマンド。転送する 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の物理的な境界を維持したままデータを移動したい場合、組み込みツールはありませんが、鏡を作り、元のものを削除する。
答え2
Debian Stretch (9.0) の LVM、つまり 2.02.168-2 では、、、および の組み合わせを使用して、ボリューム グループ間で論理ボリュームのコピーを行うことができますvgmerge
。lvconvert
移動vgsplit
はコピーと削除の組み合わせであるため、これは移動にも機能します。
代わりに、pvmove
物理的な範囲を移動するために を使用することもできます。引用するとU&L: 物理範囲の目的:
単一の物理エクステントは、LVM によって個別に管理できるディスク領域の最小単位です。
ループ デバイスを使用した完全な自己完結型サンプル セッションを
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
ノート:
これらのコマンドのほとんどは、root として実行する必要があります。
#
一部のコマンドの先頭の は、コメントであることを示します。これは、root プロンプトを表すものではありません。2 つのボリューム グループ内の論理ボリュームの名前が重複している場合は、
vgmerge
続行が拒否されます。マージ時には、 の論理ボリュームは
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