【LVM完全マスター第3回】複数のディスクを合体!ボリュームグループ(VG)の作成・拡張・縮小完全ガイド

「1TB」と「1TB」を足して、「2TB」のディスクを作れ。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、買ってきたハードディスクをLVMの素材である「PV(物理ボリューム)」に加工するところまで進めました。

今回は、いよいよLVMの醍醐味である「合体(マージ)」の工程に入ります。
バラバラの物理ディスクを束ねて、一つの巨大な「仮想ディスクプール」を作り上げる作業です。

コウ君

先生! 前回作ったPV(/dev/sdb1)があります!
これを使えば、ついにサーバーの容量が増えるんですね?
でも、もし後から「もっと容量が欲しい!」ってなったら、また作り直しなんですか?

リナックス先生

ふふふ、そこがLVMの凄いところよ。
今回作る「VG(ボリュームグループ)」は、言わば「魔法の貯蔵庫」。
後から新しいディスクを買ってきて、ポイッと投げ込むだけで、貯蔵庫のサイズは無限に大きくなるの。
作り直しなんて不要。サーバーを動かしたまま拡張できるわよ!

本記事では、LVMの核となるVGの作成(vgcreate)から、ディスクの追加(vgextend)、そして意外と知らない「PEサイズ」の設計論まで、実務で必要な知識を網羅的に解説します。

📚 LVM完全マスター(全8回)目次

現在地:【第3回】ボリュームグループ(VG)の作成と管理


第1章:VG(ボリュームグループ)とは何か?

作業に入る前に、VGの役割を再確認しましょう。

VGは、「複数のPV(物理ディスク)を束ねて作られた、一つの巨大な仮想ディスク」です。
Linux OSから見ると、個々の物理ディスク(/dev/sdb, /dev/sdc…)の存在は隠蔽され、一つの「VG」という大きな空き容量のプールに見えます。

なぜ「グループ」を作るのか?

例えば、/home ディレクトリに1.5TBの容量が欲しいとします。
しかし、手元には1TBのHDDしかありません。
LVMを使えば、1TBのHDDを2本用意し、それらを「同じVG」に所属させることで、合計2TBのプールを作成できます。
そこから1.5TBを切り出せば、物理ディスクのサイズ(1TB)を超えたパーティションを作成可能になるのです。


第2章:【設計】PE(物理エクステント)サイズを知ろう

ここが初心者向けの解説書では省略されがちな、しかし極めて重要なポイントです。
VGを作成する時、内部ではディスクを細切れのブロックに分割して管理します。
この最小管理単位を「PE(Physical Extent:物理エクステント)」と呼びます。

PEのデフォルトは「4MB」

通常、LVMは4MB単位でディスクを管理します。

  • メリット: 小さなサイズのボリュームを細かく作れる。
  • デメリット: 超巨大な容量(数百TB)を扱う場合、管理簿(メタデータ)が肥大化し、パフォーマンスに影響が出る可能性がある。

昔のLVM(LVM1)では、「PEサイズによって作成できる最大容量に制限がある(例:PE 4MBだと最大256GBまで)」という厳しい制約がありました。
現在のLVM2ではこの制限はほぼ撤廃されていますが、数TB〜数十TBの大規模サーバーを構築する場合は、パフォーマンスを考慮してPEサイズを大きめ(32MBや64MBなど)に設定するのが「通(ツウ)」の設計です。

※今回は一般的なサーバー構築なので、デフォルト(4MB)または少し大きめの32MB程度で進めます。


第3章:VGを作成する「vgcreate」

それでは、前回作成したPV(/dev/sdb1)を使って、新しいVGを作成しましょう。

1. VG名を決める

VGには名前が必要です。分かりやすい名前を付けましょう。
一般的には以下のような命名規則が使われます。

  • vg_data (データ用)
  • vg01 (連番)
  • VolGroup00 (CentOS系のデフォルト)
  • cl (RHEL/AlmaLinux系のデフォルト)

今回は分かりやすく vg_storage という名前にします。

2. コマンド実行

基本の構文は vgcreate [VG名] [PV名] です。

sudo vgcreate vg_storage /dev/sdb1

もしPEサイズを指定したい場合(例:32MB)は、-s オプションを付けます。

sudo vgcreate -s 32M vg_storage /dev/sdb1

実行結果:

  Volume group "vg_storage" successfully created

これで、/dev/sdb1(20GB)を飲み込んだ vg_storage というプールが完成しました。


第4章:VGの状態を確認する「vgs / vgdisplay」

作成したら必ず確認します。

1. 簡易確認「vgs」

sudo vgs

出力例:

  VG         #PV #LV #SN Attr   VSize  VFree 
  cl           1   2   0 wz--n- 49.00g    0 
  vg_storage   1   0   0 wz--n- 19.97g 19.97g
  • #PV: 所属している物理ディスクの数(現在は1個)。
  • #LV: 切り出された論理ボリュームの数(まだ作っていないので0)。
  • VSize: VG全体のサイズ(約20GB)。
  • VFree: 使用可能な空き容量(まだ何も使っていないので全量)。

2. 詳細確認「vgdisplay」

より詳しい情報、特にPEサイズなどを確認する時に使います。

sudo vgdisplay vg_storage

出力の注目ポイント:

  --- Volume group ---
  VG Name               vg_storage
  Format                lvm2
  VG Access             read/write
  VG Status             resizable
  ...
  PE Size               32.00 MiB  ←★指定したPEサイズになっているか
  Total PE              639        ←★総ブロック数
  Alloc PE / Size       0 / 0      ←★使用済み
  Free  PE / Size       639 / 19.97 GiB  ←★空き

第5章:【魔法】後から容量を増やす「vgextend」

ここからがLVMの本領発揮です。
運用開始から半年後、「容量が足りなくなったので、新しいHDD(/dev/sdc1:50GB)を追加した」というシナリオを実践してみましょう。

まず、新ディスクをPV化します(第2回の復習)。

sudo pvcreate /dev/sdc1

次に、既存の vg_storage にこのPVを追加します。
使うコマンドは vgextend です。

sudo vgextend vg_storage /dev/sdc1

実行結果:

  Volume group "vg_storage" successfully extended

これだけです!
もう一度 vgs を見てみましょう。

  VG         #PV #LV ... VSize  VFree 
  vg_storage   2   0 ... 69.97g 69.97g

VSize が約20GBから約70GBに増えているのが分かりますか?
サーバーを止めることもなく、コマンド一発でプール容量が3.5倍になりました。
これがLVMの威力です。


第6章:VGの整理整頓「vgreduce / vgremove」

増やすだけでなく、減らしたり削除したりする方法も覚えておきましょう。

1. ディスクをVGから追い出す「vgreduce」

「やっぱり追加した50GBのディスクは別の用途に使いたい」となった場合、VGから切り離すことができます。
(※ただし、そのディスク上のPEが「使用中」でないことが条件です。使用中の場合はデータを移動させる必要がありますが、それは第6回で解説します)

sudo vgreduce vg_storage /dev/sdc1

これで /dev/sdc1 は自由の身になります。

2. VG自体を爆破する「vgremove」

VGそのものが不要になった場合は削除します。
(※中にLVが残っていると削除できません)

sudo vgremove vg_storage

第7章:【プロの運用術】VGメタデータのバックアップ

これは上級者向けのTipsですが、非常に重要です。
VGの情報(どのディスクがどのVGに属しているか等)は、ディスクの先頭部分にある「メタデータ領域」に書き込まれています。

もし操作ミスでVG構成を壊してしまった場合、LVMは自動的にバックアップを取ってくれています。
場所は /etc/lvm/archive です。

ls -l /etc/lvm/archive/

ここには、vg_storage_00001-xxxx.vg のようなテキストファイルが保存されています。
中身を見ると、VGの設定情報がそのまま書かれています。
万が一の時は、vgcfgrestore コマンドとこのファイルを使って、「VGを壊す前の状態」に戻すことができるのです。
(この復旧手順は第8回トラブルシューティング編で詳しくやります!)


第8章:VG管理の豆知識・トラブルQ&A

Q1. VG名を後から変えたい

A. vgrename コマンドで可能です。

sudo vgrename vg_storage vg_data

ただし、fstabなどにVG名でマウント設定を書いている場合、それらも修正しないとOSが起動しなくなるので注意が必要です。

Q2. “Volume group name … already exists” エラー

A. 同じ名前のVGが既に存在します。
特に、他のサーバーで使っていたディスクをそのまま接続した場合によく起こります。
LVMはVG名ではなく内部のUUIDで管理しているので動作はしますが、人間が混乱するので vgrename で名前を変えるのが無難です。

Q3. VGをアクティブ/非アクティブにする

メンテナンス時など、一時的にVGへのアクセスを停止させたい場合は vgchange を使います。

# 非アクティブ化(停止)
sudo vgchange -a n vg_storage

# アクティブ化(開始)
sudo vgchange -a y vg_storage

レスキューモードで起動した時など、LVMが見えない場合は手動でアクティブ化が必要なことがあります。


まとめ:巨大なプールの準備完了!

お疲れ様でした!
今回はLVMの心臓部であるVGの操作をマスターしました。

今回の重要ポイント:

  • VGは複数のPVを束ねた「巨大な仮想ディスク」。
  • vgcreate で作成し、vgextend で後から無限に拡張できる。
  • PEサイズ(デフォルト4MB)は設計時に意識するとプロっぽい。
  • 困ったときは /etc/lvm/archive にバックアップがある。

現在、あなたの手元には70GBの空っぽのプール(vg_storage)があります。
次回、第4回は「論理ボリューム(LV)の切り出しとフォーマット」です。
いよいよこのプールから、実際の使用領域(パーティション)を切り出し、ファイルシステムを作ってデータを保存できる状態にします。

ここからが一番楽しいところです。お楽しみに!

▼ エンジニアとしてのキャリアを加速させる ▼

LVMを実践練習
「VPS」で環境構築

おすすめVPSを見る

インフラ技術を仕事に
「ITエンジニア転職」

転職エージェントを見る

コメント