基本的に、いくつかの論理ボリューム(lv)を新しいボリュームグループ(vg)に移動/コピーしたいと思います。新しいボリュームグループは、新しい物理ボリュームのセットに存在します。これらの論理ボリューム内のデータに損傷を与えることなく安全に行う方法を知っている人はいますか?
基本的に、いくつかの論理ボリューム(lv)を新しいボリュームグループ(vg)に移動/コピーしたいと思います。新しいボリュームグループは、新しい物理ボリュームのセットに存在します。これらの論理ボリューム内のデータに損傷を与えることなく安全に行う方法を知っている人はいますか?
回答:
最初に.imgファイルにコピーする理由はありません。まずlvcreateを実行し、次に直接コピーします:
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume
さて、私は自分のやり方で状況を処理することができました。私が行ったステップは次のとおりです。
1)ターゲット論理ボリュームのスナップショットを作成します。
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
注:スナップショットのサイズは、必要に応じて大きくも小さくもできます。重要なのは、スナップショット期間中に変更をキャプチャするのに十分なスペースを確保することです。
2)を使用してスナップショットコンテンツのイメージコピーを作成する dd
dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img
3)ターゲティング(新しい)ボリュームグループに十分なサイズの新しい論理ボリュームを作成します。
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
4)を使用して、イメージバックアップから新しい論理ボリュームにデータを書き込みます dd
dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume
5)lvremove
とをrm
それぞれ使用して、スナップショットとイメージのバックアップを削除します。
それはすべての人々です...これが誰かに役立つことを願っています:)
Debianのストレッチ(9.0)でのLVMのとおり、すなわち2.02.168-2、それはの組み合わせを使用して、ボリューム・グループにまたがる論理ボリュームのコピーを行うことは可能だvgmerge
、lvconvert
とvgsplit
。移動はコピーと削除の組み合わせであるため、これは移動に対しても機能します。
または、pvmove
ボリュームを移動するだけで使用できます。
ループデバイスを使用した完全な自己完結型のセッション例は
lvconvert
次のとおりです。
概要:論理ボリュームlv1でボリュームグループvg1を作成し、lv2でvg2を作成し、vg2にlv1のコピーを作成します。
ファイルを作成します。
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
テストモードでマージコマンドを実行します。これにより、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
次に、を使用してRAID 1ミラーペアを作成lv1
しlvconvert
ます。<>引数が伝え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.
これまでの4つの答えはすべて見落としているため、ボリュームの正確なサイズはよくわからないことがよくあります。lvdisplay
小数点以下2桁に丸められた値のみを表示しman lvdisplay
、使用可能なオプションについては他のコマンドのみを示します。以下では、MiBを選択します。これは、デフォルトのLVMブロックサイズ4 MiBで十分に正確です。
lvdisplay --units m
MIBはまたのデフォルトの単位である--size
のlvcreate
。疑わしい場合はlvdisplay
、ターゲットボリュームを作成した後、正しいサイズを再確認してください。次に、他の回答のようにコピーを作成します。さらに、たとえばでコピーを検証することをお勧めしcmp
ます。
ここで、スナップショットが使用される理由と、スナップショットが保護するものと保護しないもの:
スナップショットは、スナップショットが作成された時点のすべてのデータがコピーされるように作成されます。コピープロセス中のソースボリュームでのアクティビティは、コピーに反映されません。
スナップショットは、dd
コマンドラインでの人為的エラーからソースボリュームも保護します。誤ってスナップショットに書き込んだ場合、スナップショットのデータのみが破損するため、スナップショットを削除して最初からやり直すことができます。
コピー処理中、ターゲットボリュームは保護されません。別の管理者(またはos-proberなどの自動プロセスdracut
)が不完全なボリュームをマウントすると、マウントによって問題が発生する可能性があります。(読み取り専用マウントでも、ジャーナルエントリをボリュームに書き込む場合があります。)
VG Aから別のVG Bに論理ボリュームをコピーする必要がある場合、を使用して興味深いバリアントを見つけましたpartclone
。スナップショットを作成してからddでコピーするのは良い方法ですが、ファイルシステムがいっぱいでない場合は遅くなる可能性があります。このソリューションは、使用済みブロックのみをコピーするため、非常に高速です。
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup
これ--size
は、スナップショットが無効になる前にどれだけの書き込みが発生する可能性があるかです
lvcreate --size <new_lv_size> /dev/destvg --name newlv
new_lv_size
少なくともソースLVのサイズである必要があります
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv
fs_type
することができext4
、fat32
、btrfs
、xfs
、...任意のFSはpartcloneでサポートされています
lvremove /dev/sourcevg/lv-backup