LVM入門|Linuxで論理ボリュームを拡張する方法

LVM入門|Linuxで論理ボリュームを拡張する方法
Linuxサーバーのストレージ管理で「ディスク容量が足りなくなった」という課題に直面した際、LVM(Logical Volume Manager)を使えばシステム稼働中に安全にストレージを拡張できます。物理ディスクを追加するだけで、既存のファイルシステムを停止することなく論理ボリュームを拡張できるため、サービスダウンタイムを最小限に抑えられます。本記事では、LVMの基本概念から実践的な拡張手順まで、具体的なコマンド操作とトラブルシューティングを含めて解説します。LVMを活用すれば、ストレージ管理の柔軟性が飛躍的に向上し、システムの拡張性と信頼性が大幅に改善します。
目次
- LVMの概要とメリット
- LVMの基本用語と構成要素
- LVM環境の準備と初期設定
- 論理ボリュームの作成手順
- 論理ボリュームの拡張手順(実践ガイド)
- ファイルシステムの拡張と反映
- LVM拡張時のトラブルシューティング
- LVM運用のベストプラクティスと注意点
- まとめと次のステップ
LVMの概要とメリット
LVM(Logical Volume Manager)は、Linuxシステムにおけるストレージ管理を柔軟に行うためのフレームワークです。従来のパーティション方式では、ストレージの拡張や再配分に制約がありましたが、LVMを導入することで、物理ディスク(PV: Physical Volume)をグループ化し、論理ボリューム(LV: Logical Volume)として柔軟に管理できます。これにより、以下のようなメリットが得られます。
主なメリット
- オンライン拡張:システム稼働中にストレージを拡張できるため、サービス停止が不要
- 柔軟なストレージ管理:複数の物理ディスクを1つの論理ボリュームとして扱える
- スナップショット機能:データのバックアップやテスト環境の作成が容易
- パフォーマンス最適化:ストライピング(RAID 0相当)やミラーリング(RAID 1相当)が可能
- 容量の効率的利用:未使用領域を他の論理ボリュームに再配分できる
例えば、Webサーバーのログ領域が不足した場合、新しいディスクを追加して既存の論理ボリュームに拡張することで、即座にストレージ容量を増やせます。これは、従来のパーティション方式では不可能な柔軟性です。
LVMの基本用語と構成要素
LVMを理解するためには、以下の基本用語と構成要素を押さえておく必要があります。これらの用語は、LVMの操作コマンドや設定ファイルで頻繁に登場します。
LVMの主要コンポーネント
| コンポーネント | 説明 | コマンド例 |
|---|---|---|
| 物理ボリューム(PV: Physical Volume) | 実際の物理ディスクやパーティション。LVMで管理する最小単位 | pvcreate, pvdisplay |
| ボリュームグループ(VG: Volume Group) | 複数のPVを束ねたグループ。LVの作成元となるストレージプール | vgcreate, vgdisplay |
| 論理ボリューム(LV: Logical Volume) | VG内に作成される仮想的なストレージ領域。ファイルシステムとしてマウント可能 | lvcreate, lvdisplay |
| 物理エクステント(PE: Physical Extent) | PV内の最小単位(通常4MB)。VG内で均等に管理される | (直接操作することは少ない) |
| 論理エクステント(LE: Logical Extent) | LV内の最小単位。PEと同じサイズで管理される | (直接操作することは少ない) |
LVMの階層構造
LVMは以下の階層構造で構成されています。

出典: O’Reilly Media “Linux Device Drivers”
この階層構造により、物理ディスクから論理ボリュームまで、柔軟にストレージを管理できます。例えば、2つの物理ディスク(/dev/sdb、/dev/sdc)を1つのVG(vg_data)にまとめ、その中にLV(lv_app)を作成してファイルシステムとして利用する、といった運用が可能です。
LVM環境の準備と初期設定
LVMを使用するためには、まず環境を整える必要があります。ここでは、CentOS 7/8、RHEL 7/8、Ubuntu 20.04/22.04などの主要なLinuxディストリビューションを対象に、LVMのセットアップ手順を解説します。
前提条件の確認
- root権限またはsudo権限が利用可能
- 拡張対象の物理ディスクが接続済み(例: /dev/sdb、/dev/sdc)
- LVMパッケージがインストール済み(通常は標準リポジトリに含まれる)
LVMパッケージのインストール
以下のコマンドでLVM関連パッケージをインストールします。
CentOS/RHEL系
sudo yum install -y lvm2Ubuntu/Debian系
sudo apt update sudo apt install -y lvm2
インストール後、LVMサービスを有効化します。
sudo systemctl enable lvm2-lvmetad sudo systemctl start lvm2-lvmetad
物理ディスクの準備
LVMで使用する物理ディスクは、パーティションテーブルを削除して、LVM専用の領域として初期化する必要があります。以下の手順で実施します。
1. ディスクの確認
使用するディスクを特定します。
lsblk
例: /dev/sdb(100GB)を使用する場合
2. パーティションテーブルの削除
fdiskコマンドでパーティションテーブルを削除します。
sudo fdisk /dev/sdb
fdisk内で以下の操作を実行します。
o:新しい空のDOSパーティションテーブルを作成w:変更を書き込んで終了
3. 物理ボリューム(PV)の作成
パーティションテーブルを削除したディスクを、LVMの物理ボリュームとして初期化します。
sudo pvcreate /dev/sdb
確認コマンドでPVが作成されたことを確認します。
sudo pvdisplay
出力例:
--- Physical volume --- PV Name /dev/sdb VG Name PV Size 100.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 25599 Free PE 25599 Allocated PE 0
ボリュームグループ(VG)…
物理ボリュームを束ねて、ボリュームグループを作成します。これにより、複数の物理ディスクを1つのストレージプールとして扱えます。
sudo vgcreate vg_data /dev/sdb
vgcreateコマンドのオプション:
vg_data:VG名/dev/sdb:PV名
VGの作成を確認します。
sudo vgdisplay vg_data
出力例:
--- Volume group --- VG Name vg_data System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 100.00 GiB PE Size 4.00 MiB Total PE 25599 Alloc PE / Size 0 / 0 Free PE / Size 25599 / 100.00 GiB
VGの作成が完了したら、論理ボリューム(LV)を作成する準備が整いました。
論理ボリュームの作成手順
ボリュームグループ(VG)が作成されたら、次に論理ボリューム(LV)を作成します。論理ボリュームは、ファイルシステムとしてマウントして使用します。
論理ボリューム(LV)の作成
以下のコマンドで、VG内にLVを作成します。ここでは、50GBの論理ボリュームを作成します。
sudo lvcreate -n lv_app -L 50G vg_data
lvcreateコマンドの主なオプション:
-n lv_app:LV名-L 50G:サイズ(50GB)vg_data:VG名
LVの作成を確認します。
sudo lvdisplay
出力例:
--- Logical volume --- LV Path /dev/vg_data/lv_app LV Name lv_app VG Name vg_data LV UUID 5QJ4b3-8eX2-3fG1-9hK0-lM5n6oP7qR8 LV Write Access read/write LV Creation host, time server1, 2023-10-15 12:34:56 +0900 LV Status available # open 0 LV Size 50.00 GiB Current LE 12800 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
ファイルシステムの作成
論理ボリュームにファイルシステムを作成します。一般的なファイルシステムとして、ext4またはXFSが使用されます。
ext4ファイルシステムの場合
sudo mkfs.ext4 /dev/vg_data/lv_app
XFSファイルシステムの場合
sudo mkfs.xfs /dev/vg_data/lv_app
ファイルシステムの作成が完了したら、LVをマウントポイントにマウントします。
sudo mkdir /mnt/app sudo mount /dev/vg_data/lv_app /mnt/app
マウントを確認します。
df -h /mnt/app
出力例:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_data-lv_app 50G 45M 47G 1% /mnt/app
自動マウントの設定
システム再起動後も自動的にマウントされるように、/etc/fstabにエントリを追加します。
sudo vi /etc/fstab
以下の行を追加します(ファイルシステムに応じて調整)。
/dev/vg_data/lv_app /mnt/app ext4 defaults 0 0
またはXFSの場合:
/dev/vg_data/lv_app /mnt/app xfs defaults 0 0
設定を反映させるため、以下のコマンドでマウントを再実行します。
sudo mount -a
これで、論理ボリュームの作成とマウントが完了しました。次に、この論理ボリュームを拡張する手順を解説します。
論理ボリュームの拡張手順(実践ガイド)
LVMの最大のメリットは、システム稼働中に論理ボリュームを拡張できる点です。ここでは、既存の論理ボリュームを拡張する具体的な手順を解説します。拡張作業は、以下の手順で実施します。
拡張前の確認
拡張前に、現在のLVM構成を確認します。
sudo vgdisplay vg_data sudo lvdisplay /dev/vg_data/lv_app
出力例(VGの空き領域を確認):
VG Size 100.00 GiB Free PE / Size 12799 / 50.00 GiB
この例では、VG内に50GBの空き領域があるため、LVを50GB拡張できます。
物理ボリューム(PV)の追加
新しい物理ディスクを追加して、VGに組み込みます。ここでは、新たに100GBのディスク(/dev/sdc)を追加します。
1. 新しいPVの作成
sudo pvcreate /dev/sdc
2. VGへのPV追加
sudo vgextend vg_data /dev/sdc
3. VGの空き領域確認
sudo vgdisplay vg_data
出力例:
VG Size 200.00 GiB Free PE / Size 38399 / 150.00 GiB
VGのサイズが200GBに拡大され、150GBの空き領域が確認できます。
論理ボリューム(LV)の拡張
論理ボリュームを拡張するには、lvextendコマンドを使用します。ここでは、LVを100GBに拡張します。
1. LVの拡張
sudo lvextend -L +50G /dev/vg_data/lv_app
lvextendコマンドの主なオプション:
-L +50G:50GB拡張(絶対値の場合は-L 100G)/dev/vg_data/lv_app:LV名
拡張後のLVサイズを確認します。
sudo lvdisplay /dev/vg_data/lv_app
出力例:
LV Size 100.00 GiB
2. ファイルシステムの拡張
論理ボリュームを拡張しただけでは、ファイルシステムのサイズは変わりません。ファイルシステムを拡張する必要があります。ファイルシステムの種類に応じて、以下のコマンドを実行します。
ext4の場合
sudo resize2fs /dev/vg_data/lv_app
XFSの場合
sudo xfs_growfs /mnt/app
ファイルシステムの拡張を確認します。
df -h /mnt/app
出力例:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_data-lv_app 100G 45M 95G 1% /mnt/appこれで、論理ボリュームとファイルシステムの拡張が完了しました。システムを再起動しても、拡張された容量が維持されます。
ファイルシステムの拡張と反映
LVMで論理ボリュームを拡張した後、ファイルシステムも同時に拡張する必要があります。ファイルシステムの種類によって、拡張方法が異なるため、注意が必要です。ここでは、ext4とXFSそれぞれの拡張手順を解説します。
ext4ファイルシステムの拡張
ext4ファイルシステムを拡張するには、resize2fsコマンドを使用します。このコマンドは、論理ボリュームの拡張後に実行します。
拡張手順
論理ボリュームを拡張(例: 50GB追加)
sudo lvextend -L +50G /dev/vg_data/lv_appext4ファイルシステムを拡張
sudo resize2fs /dev/vg_data/lv_app拡張が完了したら、dfコマンドでサイズを確認します。
df -h /mnt/app注意点
- ext4の場合、resize2fsはオンラインで実行できます(マウント状態で実行可能)
- 拡張前のLVサイズが小さすぎると、resize2fsが失敗する場合があります
- ext4の最大サイズは1EB(エクサバイト)ですが、実際の制限は使用するカーネルやファイルシステムの設定に依存します
XFSファイルシステムの拡張
XFSファイルシステムを拡張するには、xfs_growfsコマンドを使用します。XFSは、ext4とは異なり、マウントされている状態でのみ拡張できます。
拡張手順
論理ボリュームを拡張(例: 50GB追加)
sudo lvextend -L +50G /dev/vg_data/lv_appXFSファイルシステムを拡張
sudo xfs_growfs /mnt/app
拡張が完了したら、dfコマンドでサイズを確認します。
df -h /mnt/app
注意点
- XFSは、マウントされている状態でのみ拡張可能
- XFSの最大サイズは8EB(エクサバイト)ですが、実際の制限は使用するカーネルに依存します
- XFSは、拡張後に即座にサイズが反映されます
ファイルシステム拡張の自動化
LVMとファイルシステムの拡張を自動化するために、以下のようなスクリプトを作成できます。
#!/bin/bash論理ボリュームの拡張
sudo lvextend -L +50G /dev/vg_data/lv_appファイルシステムの種類に応じた拡張
if [ "$(df -T /mnt/app | awk 'NR==2 {print $2}')" = "ext4" ]; then sudo resize2fs /dev/vg_data/lv_app elif [ "$(df -T /mnt/app | awk 'NR==2 {print $2}')" = "xfs" ]; then sudo xfs_growfs /mnt/app fi
このスクリプトを定期的に実行することで、ストレージの拡張を自動化できます。
LVM拡張時のトラブルシューティング
LVMの拡張作業中にエラーが発生することがあります。ここでは、一般的なトラブルとその解決策を解説します。トラブルシューティングを行う際は、必ずバックアップを取得した上で実施してください。
よくあるエラーと対処法
| エラー | 原因 | 解決策 |
|---|---|---|
| 「No space left on device」 | VG内に空き領域がない | 新しいPVをVGに追加するか、不要なLVを削除して空き領域を確保 |
| 「Filesystem is too small」 | ファイルシステムのサイズがLVより小さい | ファイルシステムを拡張する(resize2fsまたはxfs_growfs) |
| 「Device or resource busy」 | LVがマウントされているか、使用中 | LVをアンマウントしてから再実行(XFSの場合はxfs_growfsで対応) |
| 「Invalid argument」 | コマンドの引数が間違っている | コマンドの構文を確認し、正しい引数を指定 |
| 「PV is in use」 | PVが他のVGで使用されている | pvremoveでPVを初期化してから再実行 |
具体的なトラブル事例と解決策
事例1: VG内に空き領域がない
状況:lvextendコマンド実行時に「No space left on device」エラーが発生
原因:VG内に空き領域がなく、LVを拡張できない
解決策:
- 新しいPVをVGに追加する
- LVを拡張する
- ファイルシステムを拡張する
sudo pvcreate /dev/sdd sudo vgextend vg_data /dev/sdd
sudo lvextend -L +50G /dev/vg_data/lv_app
sudo resize2fs /dev/vg_data/lv_app
事例2: ファイルシステムの拡張に失敗
状況:resize2fs実行時に「Filesystem is too small」エラーが発生
原因:LVを拡張したが、ファイルシステムのサイズがLVより小さい
解決策:
- LVのサイズを確認
- ファイルシステムのサイズを確認
- ファイルシステムを拡張
sudo lvdisplay /dev/vg_data/lv_app
df -h /mnt/app
sudo resize2fs /dev/vg_data/lv_app
事例3: LVがマウントされているため拡張できない
状況:lvextend実行時に「Device or resource busy」エラーが発生
原因:LVがマウントされているため、拡張できない
解決策:
- LVをアンマウント
- LVを拡張
- ファイルシステムを拡張
- LVを再マウント
sudo umount /mnt/app
sudo lvextend -L +50G /dev/vg_data/lv_app
sudo resize2fs /dev/vg_data/lv_app
sudo mount /dev/vg_data/lv_app /mnt/app
LVMの状態確認コマンド
LVMの状態を確認するためのコマンドを以下にまとめます。
PVの状態確認
sudo pvdisplayVGの状態確認
sudo vgdisplayLVの状態確認
sudo lvdisplayLVM全体の状態確認
sudo vgscan sudo pvscan sudo lvscanLVMの詳細情報
sudo lvs -a -o +devices
これらのコマンドを活用して、LVMの状態を常に把握し、トラブル発生時に迅速に対応できるようにしましょう。
LVM運用のベストプラクティスと注意点
LVMを効果的に運用するためには、いくつかのベストプラクティスと注意点を押さえておく必要があります。これらを実践することで、システムの安定性とパフォーマンスを向上させられます。
ベストプラクティス
1. 複数のPVを1つのVGにまとめる
複数の物理ディスクを1つのVGにまとめることで、ストレージの柔軟性が向上します。例えば、2つの1TBディスクをVGにまとめれば、2TBのストレージプールとして扱えます。これにより、LVの作成や拡張が容易になります。
sudo vgcreate vg_data /dev/sdb /dev/sdc
2. スナップショットを活用する
LVMのスナップショット機能を使用すれば、データのバックアップやテスト環境の作成が容易になります。スナップショットを作成することで、データの状態を保存し、必要に応じて復元できます。
sudo lvcreate --size 10G --snapshot --name snap_lv_app /dev/vg_data/lv_app
3. ストライピング(RAID 0)を活用する
複数のPVを使用してストライピング(RAID 0)を構成することで、パフォーマンスを向上させられます。例えば、2つのPVを使用してストライピングを構成すれば、読み書き速度が向上します。
sudo lvcreate -i 2 -l 100%FREE -n lv_stripe vg_data
4. ミラーリング(RAID 1)を活用する
データの冗長性を確保するために、ミラーリング(RAID 1)を構成できます。これにより、1つのPVに障害が発生してもデータが保護されます。
sudo lvcreate --mirror 1 -l 100%FREE -n lv_mirror vg_data
5. 定期的なバックアップを実施する
LVMの構成情報やデータを定期的にバックアップすることで、障害発生時の復旧を容易にします。以下のコマンドでLVMの構成情報をバックアップできます。
sudo vgcfgbackup -f /backup/vg_data.cfg vg_data
注意点
1. LVMのバージョン依存
LVMの機能やコマンドは、使用するLinuxディストリビューションやバージョンによって異なる場合があります。例えば、古いバージョンのLVMでは、一部の機能がサポートされていないことがあります。そのため、使用する環境に応じた公式ドキュメントを参照してください。
参考リンク:LVM公式マニュアル
2. セキュリティ設定
LVMを使用する際は、セキュリティ設定にも注意が必要です。例えば、不正アクセスを防ぐために、LVM関連のファイルやデバイスへのアクセス権を適切に設定してください。また、スナ




