状態:
私のサーバーには、次のようにLVMに4つの1TBドライブがあります。サーバーは、12個以上のopenvzコンテナを持つopenvzハードウェアノードです。現在、コンテナごとに1つのディスクのみが使用されます。これは、当時のほとんどのディスクIO負荷を制御し、分離したままにするように設計されています。
# pvdisplay -s
Device "/dev/sdd1" has a capacity of 227.51 GiB
Device "/dev/sdc1" has a capacity of 427.51 GiB
Device "/dev/sdb1" has a capacity of 427.51 GiB
Device "/dev/sda2" has a capacity of 407.02 GiB
ATM 各 PV は独自の個別の VG に設定されます。
# vgdisplay -s
"vg04" 931.51 GiB [704.00 GiB used / 227.51 GiB free]
"vg03" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
"vg02" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
"vg01" 931.02 GiB [524.00 GiB used / 407.02 GiB free]
これらのVGの上には多くのLVがあります。
# lvdisplay | grep Name
LV Name /dev/vg04/swap
VG Name vg04
LV Name /dev/vg04/vz
VG Name vg04
LV Name /dev/vg03/swap
VG Name vg03
LV Name /dev/vg03/vz
VG Name vg03
LV Name /dev/vg02/swap
VG Name vg02
LV Name /dev/vg02/vz
VG Name vg02
LV Name /dev/vg01/swap
VG Name vg01
LV Name /dev/vg01/root
VG Name vg01
LV Name /dev/vg01/vz
VG Name vg01
質問:
1つのコンテナが負荷を処理するために2つのディスクに分割する必要があるほど大きくなりました。
基本的に、2つのLV(/dev/vg03/vzと/dev/vg04/vz)を2つのディスクに分散した1つのLVにマージしたいと思います。
どうすればこれを最良に達成できますか? vgmergeはこれを行うことができますか? vgmergeのマンページはやや簡単で、その使用の詳細な説明が見つかりません。
最終的には物を移動して目標を達成することができますが、稼働中のデータが多く、実稼働サーバーなので、可能であればこれを避けようとします。
答え1
あなたの質問を正しく読んだら、実際にやりたいことは、2つのLVを別々のVGにマージすることです。これを行うには、あるLVから別のLVにデータを移動する必要があり、LVを直接マージする方法はありません。
だからあなたは一種のダウンタイムを見ています。
以下を実行してこれを制限できます。 LVA - すぐに大きくなる論理ボリューム LVB - すぐに削除される論理ボリューム
- LVBをLVAの位置にrsync(最も時間がかかります)
- **ダウンタイム開始** - リモートアクセスを無効にする
- 最後のrsyncを実行して、LVAのすべてのデータが最新であることを確認してください。
- リアルタイム放送の削除
- LVBがインストールされているかのように、LVAの同期データをその場所に移動します(これはLVAにある必要があるため、mvは単にinode操作であるため、非常に短いです)。
- **ダウンタイム終了** - リモートアクセスが再び有効になりました
- レジャー時にはライブ放送を中止し、VGB VGMergeをVGAに変更してください。
- その後、LVAを拡張できます(ファイルシステムをオンラインで拡張することもできます)。
答え2
2つのVGをマージできますが、最初に削除して再作成しないと、LVをlinear
LVに変換することはできません。striped
いずれにせよ、ループデバイスを使用してディスク容量をほとんど占有しないスパースファイルを簡単にテストできます。
truncate -s500G a
truncate -s500G b
sudo losetup /dev/loop0 a
sudo losetup /dev/loop1 b
sudo pvcreate /dev/loop0
sudo pvcreate /dev/loop1
sudo vgcreate A /dev/loop0
sudo vgcreate B /dev/loop1
sudo lvcreate ...
答え3
論理ボリュームをすべて破壊せずにスペースを再構成した後、新しいLVを作成せずに/dev/vg03/vz
これを行う方法がわかりません。/dev/vg04/vz
次の戦略は、(テストされていない)他のボリュームのダウンタイムなしで必要な構成を取得できる必要があります。削除する最大LVサイズまで、スクラッチディスクに一時スペースを残す必要があります。
- 削除する 2 つの LV のすべてのデータをバックアップします。
- LV(
lvchange -an
)を無効にします。 - スクラッチスペース()に物理ボリュームを作成します
pvcreate
。 vg03
()にスクラッチスペースを追加しますvgextend
。端の範囲をvg03
スクラッチスペースに移動します(適切なパーティション指定子と正しい範囲番号に置き換えますpvmove /dev/sdXX:MMM-NNN
)。新しいストライプLVで使用できるように変換する範囲を移動します。sdXX
MMM
NNN
pvresize
最後に解放したばかりのボリュームグループの物理ボリュームを縮小するために呼び出されます。- 縮小した物理ボリュームを含むパーティションを縮小するには、
fdisk
またはを使用します。parted
これにより、残りのスペース用の新しいパーティションが作成されます。 - 再度呼び出すと、
pvmove
ステージング空間のすべてのデータが元の(現在縮小された)PVに戻ります。 - 前の手順4を繰り返します
vg04
。その後、もはやスクラッチスペースは必要ありません。 - 今何もない2つの新しいパーティションがありました。これを物理ボリューム(
pvcreate
)に変換し、両方のPVのボリュームグループ()を作成しますvgcreate
。 - 新しいVGにストライプLVを作成します。