GNU/Linux >> Linux の 問題 >  >> Linux

あるボリューム グループから別のボリューム グループに論理ボリュームを移動する

ボリューム グループは、物理ボリューム全体で構成されます。物理ボリュームは多くのエクステントで構成されます (エクステントは通常 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

Linux
  1. すべてのファイル(非表示を含む)をあるディレクトリから別のディレクトリに移動するにはどうすればよいですか?

  2. Linux –論理ボリュームをあるボリュームグループから別のボリュームグループに移動しますか?

  3. あるマシンから別のマシンに設定をコピーする方法は?

  1. ある mysql データベースから別の mysql データベースにテーブルをコピーする方法

  2. あるファイルから別のファイルの単語を見つける方法は?

  3. ある Git リポジトリから別のリポジトリにコミットをコピーする方法は?

  1. あるボリューム グループから別のボリューム グループに論理ボリュームを移動/コピーする簡単な方法はありますか? (LVM2)

  2. あるドライブから別のドライブにファイル システム階層全体をコピーする

  3. あるマシンから別のマシンにポートを転送する方法は?