論理ボリューム全体をあるボリュームグループから別のボリュームグループに移動できますか?
どの程度一致する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
vgmerge
lvconvert
Debian Stretch(9.0)(つまり2.02.168-2)のLVMから始めると、との組み合わせを使用してボリュームグループ間で論理ボリュームをコピーできます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
メモ:
これらのコマンドはほとんどルートで実行する必要があります。
#
一部のコマンドの接頭辞は、これがコメントであることを示します。ルートプロンプトを表しません。両方のボリュームグループに論理ボリューム名が重複している場合、継続は
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