単一ドライブLVMボリュームを3つのドライブにまたがるストライプボリュームに変換

単一ドライブLVMボリュームを3つのドライブにまたがるストライプボリュームに変換

LVMを使用するサーバーには、単一ドライブ(PV)に単純な線形LVがあります。これで、サーバーに2つの(同じサイズ)ドライブ(PV)が追加されました。

可能であれば、オンラインで3つのドライブにわたって既存のリニアLVをストライプLV(RAID0など)に変換したいと思います。これにより、ストライピングによってパフォーマンスが向上します。私も知っています理論的に可能。

私はLVに基づいて縞模様のミラーを作るなど、多くのことを試しました。このウェブサイトの技術しかし、私の場合は、元のドライブを使い続けたいので、状況はより複雑です(ウェブサイトでは単一ドライブLVから3に移行することがわかります)。その他ドライバー)。

その他のLVMツールに精通していますが、成功しませんでしpvmoveた。lvconvert助けてください。 :)

必要に応じて他のドライブに余分なスペースがありません(元のLVサイズの約5%)。

私のlvdisplay -mものは次のとおりです。

--- Logical volume ---
LV Path                /dev/vg_space/vol_space
LV Name                vol_space
VG Name                vg_space
LV Status              available
# open                 1
LV Size                260.75 GiB
Current LE             66752
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0

--- Segments ---
Logical extent 0 to 66751:
  Type                linear       
  Physical volume     /dev/sda5
  Physical extents    0 to 66751

ベストアンサー1

ついにトリックを見つけました。

設定:元のドライブが/dev/sda(PVは/dev/sda1)、2つの新しいドライブは/dev/sdbと仮定します/dev/sdc。すべてのドライブのサイズは100MBです。

アイデア:すべてのデータがドライブの半分に入ることができるため、sdbドライブsdcの残りの3つの半分にLVのストライプミラーを作成しながら、データを一時的に配置できます。次に、(一時的な)ミラーの元の面を削除し、ストライプLVをフルサイズに拡張します。

この素晴らしい芸術作品は、より良い説明が必要です。

original state:

   sda       sdb       sdc
 _______   _______   _______
|       | |       | |       |
|       | |       | |       |
|lv_orig| | empty | | empty |
|       | |       | |       |
|       | |       | |       |
|       | |       | |       |
|       | |       | |       |
|_______| |_______| |_______|


partition sdb & sdc, pvmove, then partition sda:

   sda       sdb       sdc
 _______   _______   _______
|       | |       | |       |
| sda1  | | sdb1  | | sdc1  |
| empty | | empty | | empty |
|_______| |_______| |_______|
|       | |       | |       |
| sda2  | |lv_orig| |lv_orig| <= linear on 2 drives
| empty | |half 1 | |half 2 |
|_______| |_______| |_______|


add sda{1,2,3} to vg, mirror the LV on this in striped mode:

   sda       sdb       sdc
 _______   _______   _______
|lv_orig| |lv_orig| |lv_orig|
|mirror | |mirror | |mirror |  <= striped!
|stripe1| |stripe2| |stripe3|
|_______| |_______| |_______|
|       | |       | |       |
| sda2  | |lv_orig| |lv_orig|
| empty | |half 1 | |half 2 |
|_______| |_______| |_______|



get rid of the sd{b,c}2 side of the mirror:

   sda       sdb       sdc
 _______   _______   _______
|       | |       | |       |
|lv_orig| |lv_orig| |lv_orig|  <= still striped!
|stripe1| |stripe2| |stripe3|
|_______| |_______| |_______|
|       | |       | |       |
| sda2  | | sdb2  | | sdc2  |
| empty | | empty | | empty |
|_______| |_______| |_______|


delete sd{a,b,c}2 partitions to extend sd{a,b,c}1 on the whole disk,
finally, extend the lv:

   sda       sdb       sdc
 _______   _______   _______
|       | |       | |       |
| sda1  | | sdb1  | | sdc1  |
|       | |       | |       |
|lv_orig| |lv_orig| |lv_orig|  <= definitely striped!
|       | |       | |       |
|bigger&| |bigger&| |bigger&|
|striped| |striped| |striped|
|_______| |_______| |_______|

実行方法は次のとおりです。

免責事項:私は主に記憶に基づいて書いています。コマンドをもう一度確認してください。 (そして必要に応じて投稿を編集してください!)

  • それぞれ42MBと58MBのパーティションsdb1とを作成します。sdb2
  • についても同様ですsdc
  • pvcreate /dev/sd{b,c}{1,2}
  • vgextend vg_orig /dev/sdb2 /dev/sdc2
  • pvmove /dev/sda1sdb2すべてのLVデータをおよびに移動しますsdc2
  • vgreduce vg_orig /dev/sda1pvremove /dev/sda1LVMを完全に無効にしますsda
  • 42MBのパーティションを作成し(/dev/sda1必要に応じて古いパーティションを削除)pvcreate /dev/sda1、、vgextend vg_orig dev/sd{a,b,c}1
  • lvconvert --type mirror --mirrors 1 --stripes 3 vg_orig/lv_orig /dev/sd{a,b,c}1元のLVボリューム(私たちが探しているもの!)のストリップミラーが作成され、以下を使用して詳細を表示できますlvdisplay -am
  • LVの総拡張数が3の倍数ではない場合、前のコマンドは失敗する可能性があります。この場合、次のようにLVに1つまたは2つの拡張を簡単に追加できますlvextend -l +1 vg_orig/lv_orig
  • sdb2このコマンドを使用すると、内のデータの一時ミラーコピーを削除しますsdc2lvconvert --type mirror --mirrors 0 vg_orig/lv_orig /dev/sd{b,c}2
  • 不要になったsdX2パーティションの削除:vgreduce vg_orig /dev/sd{b,c}2、、pvremove /dev/sd{b,c}2
  • これで、元のデータのストライプバージョンがあるので、パーティションを大きくする必要があるので、パーティションを削除し、sd{a,b,c}1パーティションを再作成して同じセクタ番号で始まりますが、より高いセクタ番号で終わるようにします(恐れないでください)。sdb2sdc2sda1sdb1sdc1
  • partprobe /dev/sd{a,b,c}1カーネルパーティションテーブルをフラッシュします。
  • pvresize /dev/sd{a,b,c}1LVMにPVが大きいことを認識させ、
  • lvextend -l 100%VG vg_orig/lv_origそれでは、LVをもっと大きくしてみましょう。
  • resize2fs vg_orig/lv_origオンラインで拡張したい外部ファイルシステムがある場合。

ここに!

この種の作業用に設計されていると推定されるLVMなどのツールは、1つまたは2つのコマンドでこれを簡単に実行できないことが私にとって非常に混乱しています。

おすすめ記事