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/sda1
sdb2
すべてのLVデータをおよびに移動しますsdc2
。vgreduce vg_orig /dev/sda1
pvremove /dev/sda1
LVMを完全に無効にします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
このコマンドを使用すると、内のデータの一時ミラーコピーを削除しますsdc2
。lvconvert --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
パーティションを再作成して同じセクタ番号で始まりますが、より高いセクタ番号で終わるようにします(恐れないでください)。sdb2
sdc2
sda1
sdb1
sdc1
partprobe /dev/sd{a,b,c}1
カーネルパーティションテーブルをフラッシュします。pvresize /dev/sd{a,b,c}1
LVMにPVが大きいことを認識させ、lvextend -l 100%VG vg_orig/lv_orig
それでは、LVをもっと大きくしてみましょう。resize2fs vg_orig/lv_orig
オンラインで拡張したい外部ファイルシステムがある場合。
ここに!
この種の作業用に設計されていると推定されるLVMなどのツールは、1つまたは2つのコマンドでこれを簡単に実行できないことが私にとって非常に混乱しています。