はじめに
Linuxサーバを運用していると、避けて通れないのが「ディスク容量不足」です。ログファイルの増加、データベース容量の拡大、アプリケーションの肥大化などにより、サーバのストレージ使用量は継続的に増えていきます。物理パーティションのみで運用している場合、容量拡張は簡単ではありません。パーティション再作成や停止作業が必要になることもあります。
そこで活躍するのが LVM(Logical Volume Manager)です。LVMを利用すると、物理ディスクを柔軟に管理できるようになり、オンラインで容量拡張を実施できるようになります。現在のLinuxサーバ運用では、LVMは非常に一般的な構成となっています。
本記事では、以下の内容を体系的に解説します。
- LVMの基本構成
- ディスク追加手順
- LVM容量拡張の流れ
- ext4 / XFS の違い
- オンライン拡張の仕組み
Linux初心者でも理解できるよう、概念から実践まで順番に解説していきます。
LVMの概要
LVM(Logical Volume Manager)は、Linuxでストレージを柔軟に管理するための仕組みです。
通常のパーティション管理では、ディスクサイズを後から変更するのは簡単ではありません。しかしLVMを利用すると、複数ディスクをまとめたり、論理的に容量を割り当てたりできます。
例えば以下のような運用が可能になります。
- 後から容量を追加する
- 複数ディスクを1つの領域として扱う
- オンラインで拡張する
- スナップショットを取得する
特に「停止時間を最小化しながら容量拡張できる」という点は、運用上非常に大きなメリットです。
LVMの基本構成
LVMは以下の3階層で構成されています。
PV(Physical Volume)
LVMで管理する物理ディスクやパーティションです。
例えば以下がPVになります。
- /dev/sdb
- /dev/sdc1
PVはLVM管理用のメタデータを持つ領域になります。
VG(Volume Group)
複数のPVをまとめたストレージプールです。VGは「容量の集合体」と考えると理解しやすいです。
例えば以下のような構成です。
- sdb 100GB
- sdc 100GB
これらをVGにまとめると、200GBの容量プールとして扱えます。
LV(Logical Volume)
VGから切り出される論理ボリュームです。実際には、このLVにファイルシステムを作成して利用します。Linuxから見ると、LVは通常のブロックデバイスとして扱われます。
例えば以下のように見えます。
- /dev/vg_data/lv_root
- /dev/vg_data/lv_home
LVM構成イメージ
LVMは以下のような構造になります。この構造を理解することが、LVM運用の第一歩です。

LVMディスク拡張
LVMのディスク拡張は、以下の順番で実施します。
- OSへディスク追加
- PV作成
- VGへ追加
- LV拡張
- ファイルシステム拡張
この順番は非常に重要です。
特に初心者が間違えやすいのは、「LVを拡張しただけではOS上の容量は増えない」という点です。ファイルシステム拡張まで実施して初めて、OSから利用可能になります。
今回はルート(/)パーティションの容量を拡張してみます。ルートパーティションの拡張に失敗すると、最悪のケースはシステムが起動不能になる可能性があるので、操作は慎重に実施することを推奨します。事前にスナップショットを取得しておくと良いでしょう。
拡張前のLVM構成の確認
まずは現在のディスク構成を確認します。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─almalinux-root 253:0 0 17G 0 lvm /
└─almalinux-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
[root@localhost ~]#
以下を確認します。
- 物理ディスク
- パーティション
- LVM構成
- マウントポイント
本例では以下の通りとなっていることが確認できます。
- 物理ディスク:sda
- パーティション:sda1、sda2
- LVM構成:sda2がLVM構成となっている
- マウントポイント:/(ルート)
続いて、ファイルシステムのディスク容量を確認します。
マウントポイント / (ルート)のSize(上限容量)が17GB、Used(使用量)が12G、Use%(使用率)が67%となっていることが確認できます。
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 732M 8.6M 723M 2% /run
/dev/mapper/almalinux-root 17G 12G 5.7G 67% /
/dev/sda1 960M 339M 622M 36% /boot
tmpfs 366M 0 366M 0% /run/user/0
tmpfs 366M 0 366M 0% /run/user/1000
[root@localhost ~]#PVを確認します。概要はpvsコマンド、詳細はpvdisplayコマンドで確認できます。
/dev/sda2 だけでVG almalinux を構成していることが分かります。
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 almalinux lvm2 a-- <19.00g 0
[root@localhost ~]#
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name almalinux
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID uHGhXs-QQ0q-fVT1-tBp8-y5nq-MOeo-NnMhtG
[root@localhost ~]#
VGを確認します。概要はvgsコマンド、詳細はvgdisplayコマンドで確認できます。
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
almalinux 1 2 0 wz--n- 18.99g 0
[root@localhost ~]#
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name almalinux
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 0 / 0
VG UUID sZz12c-7Q2h-OC0n-b3xV-LgX5-QLlE-jm4JJf
[root@localhost ~]#almalinuxというVGがLVMで作られていることが分かります。
LVを確認します。概要はlvsコマンド、詳細はlvdisplayコマンドで確認できます。
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root almalinux -wi-ao---- 16.99g
swap almalinux -wi-ao---- 2.00g
[root@localhost ~]#
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/almalinux/swap
LV Name swap
VG Name almalinux
LV UUID 2DL5Gj-cXef-nxev-5tgF-bcyp-06FD-XpfddE
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2026-01-31 10:23:25 +0900
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Path /dev/almalinux/root
LV Name root
VG Name almalinux
LV UUID 2bHqZO-vC7W-zv06-NRsw-jyY9-NU8o-OKR4qG
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2026-01-31 10:23:26 +0900
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
[root@localhost ~]#
rootとswap領域のLVがあることが分かります。
新しいディスクをOSへ追加する
今回はVirtualBoxを利用して検証します。
VirtualBoxの設定画面から新しい仮想ディスクを追加します。
対象のVMを選択して、”Setting”を押下します。

“Storage”を押下して、Controller: SATAのディスク追加アイコンをクリック。

例えば以下のように1 GBのディスクを追加してみます。


クラウド環境やVMwareでも基本的な流れは同じです。
OS側でlsblkコマンドを実行し、追加したディスクが認識されていることを確認します。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─almalinux-root 253:0 0 17G 0 lvm /
└─almalinux-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
sr0 11:0 1 1024M 0 rom
[root@localhost ~]#
sdbが追加されていることが確認できています。
PV(Physical Volume)の作成
pvcreateコマンドを実行し、追加したディスクsdbをLVM管理下へ登録します。
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[root@localhost ~]#以下の通り、sdbがPVとして認識されたことが確認できます。この時点ではまだVGには所属していません。
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 almalinux lvm2 a-- 18.66g 0
/dev/sdb lvm2 --- 1.00g 1.00g
[root@appserver-dev ~]#
[root@appserver-dev ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name almalinux
PV Size 19.66 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 5033
Free PE 0
Allocated PE 5033
PV UUID sqZLlZ-faAN-YQzp-7bMJ-EBZk-pHTO-MGumn6
"/dev/sdb" is a new physical volume of "1.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 1.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID t1a80d-8NAe-trBY-BjyM-qfML-5jOa-rbmYYf
[root@appserver-dev ~]#
※各PVには下記の通りUUIDが付与されます。LVMはUUIDベースで管理されるため、デバイス名変更に比較的強い設計になっています。
PV UUID t1a80d-8NAe-trBY-BjyM-qfML-5jOa-rbmYYf
VG(Volume Group)へ追加
追加したPVをVGへ組み込みます。事前に追加するVGの名前を確認しておいてください。下記の例ではalmalinuxがVG名となります。
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
almalinux 1 2 0 wz--n- 18.66g 0
[root@appserver-dev ~]#それでは、vgextendコマンドで先ほど作成したPVをVGに組み込みます。
[root@localhost ~]# vgextend almalinux /dev/sdb
Volume group "almalinux" successfully extended
[root@appserver-dev ~]#vgs、vgdisplayコマンドで結果を確認してみましょう。
vgsの結果から、Vsizeが19.66g 、VFreeが1020.00mに拡張されていることが分かります。また、vgdisplayの結果から、Free PEが1020.00 MiB確保されたことが確認できます。
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
almalinux 2 2 0 wz--n- <19.66g 1020.00m
[root@appserver-dev ~]#
[root@appserver-dev ~]# vgdisplay
--- Volume group ---
VG Name almalinux
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size <20.66 GiB
PE Size 4.00 MiB
Total PE 5288
Alloc PE / Size 5033 / 19.66 GiB
Free PE / Size 255 / 1020.00 MiB
VG UUID mTIEZi-Qobe-zo2c-fWic-5uOq-Qh76-kgwpbc
[root@appserver-dev ~]#※LVM内部では、PE(Physical Extent)という単位で容量管理されます。これはLVM内部の管理ブロックです。例えば4MB単位で管理されるケースがあります。LVMはこのPEを組み合わせてLVを構築しています。
LV(Logical Volume)を拡張
lvextendコマンドによりLVを拡張します。拡張サイズを指定することもできますが、今回は追加したディスクすべての容量を /dev/almalinux/root に追加します。
[root@localhost ~]# lvextend -l +100%FREE /dev/almalinux/root
Size of logical volume almalinux/root changed from 17.59 GiB (4504 extents) to <18.59 GiB (4759 extents).
Logical volume almalinux/root successfully resized.
[root@appserver-dev ~]#
※拡張サイズを指定する場合は、以下のようにコマンドを実行してください。
lvextend -L +512M /dev/almalinux/root
それでは拡張後のLVを確認してみましょう。
lvsの結果より、LV rootのLSizeが18.59gに拡張されていることが確認できます。
また、lvdisplayの結果からも LV Size が18.59 GiBに拡張されていることが確認できます。
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root almalinux -wi-ao---- <18.59g
swap almalinux -wi-ao---- <2.07g
[root@appserver-dev ~]#
[root@appserver-dev ~]# lvdisplay
--- Logical volume ---
LV Path /dev/almalinux/swap
LV Name swap
VG Name almalinux
LV UUID QXtGd3-CHQC-qnFx-N3tA-cg0e-lOmc-ZpmZhB
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2025-05-18 08:42:57 +0900
LV Status available
# open 2
LV Size <2.07 GiB
Current LE 529
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Path /dev/almalinux/root
LV Name root
VG Name almalinux
LV UUID dz0gNJ-jskZ-8GLe-2ds5-H88M-nKyV-ONCN8f
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2025-05-18 08:42:58 +0900
LV Status available
# open 1
LV Size <18.59 GiB
Current LE 4759
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
[root@appserver-dev ~]#
LVMの大きなメリットは、マウント中でも容量拡張できることです。物理ディスクと論理ボリュームが分離されていることにより、ファイルシステムから直接物理ディスクを見ていないためにオンライン状態(マウントしたままの拡張)での拡張が可能となります。これにより運用中でも柔軟に拡張を行うことができます。
ファイルシステムの拡張
ファイルシステムの種類によって拡張のコマンドが変わってきます。ここではXFSの拡張をします。
[root@localhost ~]# xfs_growfs /
meta-data=/dev/mapper/almalinux-root isize=512 agcount=4, agsize=1153024 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=4612096, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4612096 to 4873216
[root@appserver-dev ~]#
以下の通り、ルート(/)パーティションの容量が18GBに拡張されたことが確認できました。
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 732M 8.6M 723M 2% /run
/dev/mapper/almalinux-root 18G 12G 6.7G 63% /
/dev/sda1 960M 339M 622M 36% /boot
tmpfs 366M 0 366M 0% /run/user/0
tmpfs 366M 0 366M 0% /run/user/1000
[root@localhost ~]#※XFSの場合は拡張したファイルシステムを縮小することはできません。どうしても縮小するときは再作成が必要となりますのでご留意ください。
※ext4の場合は、”resize2fs /” を実行することで拡張が可能です。
まとめ
本記事では、LVM(Logical Volume Manager)の基本構成から、実際のディスク追加・容量拡張手順までを解説しました。
LVMでは、以下の3階層でストレージを管理します。
- PV(Physical Volume)
- VG(Volume Group)
- LV(Logical Volume)
この構造により、物理ディスクとファイルシステムを分離し、柔軟なストレージ運用が可能になります。
実際の拡張手順としては、以下の流れで作業を実施しました。
- OSへディスク追加
- pvcreate によるPV作成
- vgextend によるVGへの追加
- lvextend によるLV拡張
- xfs_growfs / resize2fs によるファイルシステム拡張
また、LVMの大きな特徴として、オンライン状態のまま容量拡張できる点があります。これは、LVMが物理ディスクとファイルシステムの間を抽象化しているためです。現在のLinuxサーバ運用では、停止時間を最小化するためにLVMは非常に重要な技術となっています。
Linuxサーバを運用する上で、LVMは非常に頻繁に利用される重要技術です。本記事が、LVMの理解や実際の運用・検証の助けになれば幸いです。


コメント