変更要約: 初版(主題2.02・副主題2.02.1〜2.02.3に対応)
2.3LVM の設定と管理
LVM(論理ボリュームマネージャ)による柔軟なストレージ管理を学びます。全体設定のlvmコマンド/lvm.conf、物理ボリューム(PV)を扱うpv系コマンド、ボリュームグループ(VG)を扱うvg系コマンド、論理ボリューム(LV)を扱うlv系コマンドという3階層の構造と、リサイズ・拡張の実務を押さえます。
パーティションを直接ファイルシステムにすると、後から容量を柔軟に増減させるのが困難です。LVMは物理ディスクの制約を1段抽象化し、稼働中のシステムでもボリュームの拡張・縮小・複数ディスクにまたがる統合を可能にする、実運用で欠かせない仕組みです。
2.3.1LVMの3階層構造
- 物理ボリューム(PV)=LVMが使う最下層の実体(パーティションやディスク丸ごと)。pv系コマンドで扱う:
pvcreate(PVとして初期化)・pvdisplay(詳細表示)・pvs(一覧を簡潔表示)・pvremove(PV解除)。 - ボリュームグループ(VG)=複数のPVをまとめてプールした中間層。vg系コマンドで扱う:
vgcreate(PVからVG作成)・vgextend(PV追加でVG拡大)・vgreduce(PV除去)・vgdisplay/vgs(表示)。 - 論理ボリューム(LV)=VGというプールから必要な分だけ切り出す、実際にファイルシステムを作る対象。lv系コマンドで扱う:
lvcreate(VGから作成)・lvextend(拡大)・lvreduce(縮小)・lvremove(削除)・lvdisplay/lvs(表示)。
2.3.2lvm コマンドと lvm.conf
- lvm=PV/VG/LVすべてのサブコマンド(
pvcreate等)を単一の対話的シェル/統合フロントエンドとしても呼び出せるコマンド(lvm pvcreate ...のように使う、あるいはlvm単体で対話モードに入る)。 - lvm.conf=LVM全体の動作を制御する設定ファイル(デバイスのスキャン対象・フィルタ、ロギング、バックアップ先等)。通常は既定値のままで運用でき、特殊な絞り込み(特定デバイスのみLVM対象にする等)で編集する。
「PV→VG→LVの3階層」「pvcreateが最初の一歩・vgcreateはPVから・lvcreateはVGから」「LVの拡張はlvextend、その後にファイルシステム側の拡張コマンドも必要」「VGの拡張はvgextendでPVを追加」が最頻出です。コマンドの接頭辞(pv/vg/lv)と操作対象の階層の対応を正確に覚えることが得点に直結します。
LVMの真価は「容量が足りなくなったら止めずに増やせる」運用性にあります。典型的な拡張シナリオを追いましょう。まずディスクを1台追加し、パーティションを切ったらpvcreate /dev/sdc1でPV化します。次に既存のVG(例vg_data)へこのPVを組み込むのがvgextend vg_data /dev/sdc1=VGの拡大です。この時点でプール(VG)の空き容量は増えましたが、実際に使っているLV(例/dev/vg_data/lv_home)はまだ元のサイズのままなので、lvextend -L +20G /dev/vg_data/lv_homeのようにLV自体を拡張します。ここで見落としがちな最後の一手が、ファイルシステム側の拡張です。LVMがブロックデバイスの容量を増やしても、その上のext4やXFSは「自分のサイズはまだ元のまま」と認識しているため、resize2fs(ext系)やxfs_growfs(XFS。マウントしたまま実行できる点がXFSの特徴)といったファイルシステム側のコマンドを別途実行しないと、増えた領域は使える状態になりません。逆に縮小は、LVの縮小(lvreduce)の前にファイルシステム側を縮小しておく必要があり、順序を誤るとデータ損失につながるため、拡張よりも慎重な手順が要求されます(ext4は拡張はマウントしたまま行える一方、縮小はアンマウント(オフライン)が必須で、XFSはそもそも縮小に対応していないという非対称性も実務上の重要な違いです)。
| 階層 | 作成コマンド | 拡張コマンド |
|---|---|---|
| 物理ボリューム(PV) | pvcreate | (PV自体は拡張対象外) |
| ボリュームグループ(VG) | vgcreate | vgextend(PVを追加) |
| 論理ボリューム(LV) | lvcreate | lvextend(+ ファイルシステム側resize) |
ひっかけ: 「lvextend でLVを拡張すれば、その上のファイルシステムも自動的に拡張される」は誤りです。LVMのブロックデバイス拡張とファイルシステムの拡張は別工程で、ext系ならresize2fs、XFSならxfs_growfsを追加で実行しなければ増えた容量は使えません。また「vgcreate は物理ディスクから直接VGを作る」も誤り=VGはPVから作られるため、先にpvcreateでPV化しておく必要があります。
2.3.3この節のまとめ
- PV(pv*)→VG(vg*)→LV(lv*)の3階層。作成は
pvcreate→vgcreate→lvcreateの順、拡張はvgextendでPV追加→lvextendでLV拡張 - LV拡張後は必ずファイルシステム側resize(resize2fs/xfs_growfs)も実行。縮小はファイルシステム側が先。全体設定はlvm.conf
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 新規に追加したディスク /dev/sdc をLVMで利用可能にし、既存のボリュームグループ vg_data に組み込みたい。正しい手順の順序は?
Q2. 論理ボリューム /dev/vg_data/lv_home の容量が逼迫している。lvextend -L +20G で拡張した直後、追加した容量をアプリケーションから実際に使えるようにするために必要な作業は?
Q3. 論理ボリュームの容量を縮小する必要が生じた。安全な作業手順として正しいのは?

