自宅のサーバーにある一連のディスクを再配置していますが、LVM論理ボリュームの束を別のボリュームグループに移動したいという立場にいます。これを行う簡単な方法はありますか?私はcplv
コマンドについて言及しましたが、これは古いものか、Linuxで利用できるものではないようです。
論理ボリュームを残りのソースボリュームグループとは別の物理ボリュームのサブセットに配置できる場合(lvconvert sourcevg/sourcelv /dev/pv1 ...
が役立つ場合があります)、vgsplit
を使用してlvを新しいvgとvgmerge
は、新しいvgをターゲットvgにマージします。
LVMにはミラーリング機能がありますが、ミラーの両方のレッグが同じvgに存在する必要があり、 関連付けが可能であるため、これを使用してボリュームグループ間でコピーを作成することはできません。壊れる 。
LVMボリュームを別のボリュームにコピーするには、ボリュームを別のボリュームにコピーする方法と同じです。適切なサイズのターゲットlvを作成してから、dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M
を使用して内容をコピーします。ソースボリュームがアクティブな場合、LVMを利用して一貫したコピーを作成できます。最初にlvcreate -s
を使用してソースlvのスナップショットを作成してから、スナップショットをコピーします。
pvmove -n lvol1 /dev/sdb1 /dev/sdc1
pvmoveは物理ボリューム間でデータを移動できます: LVM管理者ガイド
Debianストレッチ(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
ボリュームグループvg1
およびvg2
を/dev/loop1
および/dev/loop2
にそれぞれ作成します。
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
論理ボリュームlv1
およびlv2
をvg1
およびvg2
にそれぞれ作成します。
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
テストモードでマージコマンドを実行します。これにより、lv1
がlv2
にマージされます。
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
次に、lvconvert
を使用してlv1
からRAID 1ミラーペアを作成します。 <>引数は、lvconvert
にlv1_copy
にミラーコピー/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
を非アクティブにします。
vgchange -a n vg2
次に(テストモード)
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)マージ時:
Logical volumes in `vg1` must be inactive
そして分割すると:
Logical volume `vg2/lv1` must be inactive.