※本記事はプロモーションを含みます。

Linux環境でのディスク管理は本番サーバー運用において最重要なタスクの一つです。本記事では、LVM(Logical Volume Manager)を使うことで、固定化されたパーティション制約を超えてディスクを柔軟に拡張・管理する方法を、実務経験に基づいて詳しく解説します。読了時間の目安は10〜12分です。

LVMの必要性と基本概念

従来のパーティション管理の課題

Linuxの従来的なディスク管理では、パーティションテーブル(MBRやGPT)によって物理ディスクを区切り、各パーティションに直接ファイルシステムをマウントしてきました。この方式には柔軟性に欠ける課題があるとされています。

具体的には、以下のような問題が発生する可能性があります。ディスク容量が80%を超えてもパーティションサイズが固定されているため、新しいディスクを追加しても既存マウントポイントに容量を追加できない、という状況です。また、パーティションの縮小にはダウンタイムが伴い、アンマウント→fsck→parted操作という複雑な手順が必要になります。さらに、複数のディスクを管理する場合、パーティションの割り当てを事前に決定する必要があり、運用の変化に対応しにくいという課題もあります。

LVMが解決する問題

LVM(Logical Volume Manager)は、こうした課題を根本的に解決するLinuxの仮想ストレージ管理システムです。物理ディスクとマウントポイントの間に抽象化レイヤを挿入することで、以下の利点が実現されます。

  • オンライン拡張:マウント中のまま論理ボリュームを拡張でき、ファイルシステムを再構築する必要がない
  • 柔軟なサイズ変更:物理ディスクの追加後、既存マウントポイントに容量を動的に追加できる
  • 複数ディスクの統合管理:複数の物理ディスク・パーティションを1つのストレージプールとして扱える
  • スナップショット機能:バックアップやテスト環境の構築をスナップショット機能で実現できる

本番サーバーの緊急ディスク拡張では、LVMの存在がダウンタイムを最小化するという重要な役割を果たします。

LVMの3層構造

LVMの動作原理を理解するには、その3層構造を把握することが不可欠です。以下の関係を図示すると、物理ディスク→論理的なプール→マウントポイントという流れになります。

名称役割作成コマンド
1層PV(物理ボリューム)実際のディスク・パーティションをLVM管理下に置くpvcreate
2層VG(ボリュームグループ)複数のPVをまとめた仮想的なプールvgcreate
3層LV(論理ボリューム)VGから切り出した論理的なパーティションlvcreate

この3層構造により、物理的な制約を超えて、容量管理を動的に行えるようになります。

PV・VG・LVの詳細解説

PV(物理ボリューム)の役割

物理ボリューム(PV)は、LVM管理の最初のステップです。サーバーに接続された物理ディスクやパーティションを、LVM対応領域として初期化します。

PV作成時には、ディスク全体を指定することもできますし、特定のパーティション(例:/dev/sdb1)を指定することもできます。PVの初期化により、ディスクの先頭領域(LVM メタデータ領域)が予約され、それ以降の領域がLVM対応になります。複数のPVを1つのVGに統合することで、物理的に異なるディスクを論理的に1つのストレージプールとして扱えるようになります。

VG(ボリュームグループ)…

ボリュームグループ(VG)は、複数のPVを束ねた仮想的なストレージプールです。VGの概念により、複数の物理ディスクを1つの論理プールとして管理できます。

VGから論理ボリュームを切り出す際、物理ディスクがどこにあるかは意識する必要がなくなります。VGは「Physical Extent」(デフォルト4MB)という単位でディスク容量を管理しており、複数の物理ディスクに分散したエクステントをまとめて取り扱えます。VGに新しいPVを追加(vgextend)することで、既存のマウントポイントに容量を追加する基盤が作られます。

LV(論理ボリューム)の役割

論理ボリューム(LV)は、VGから切り出された仮想的なパーティションです。LVはファイルシステム(ext4・XFS等)をマウントするターゲットになります。

LVのサイズは、作成時に指定した容量に限定されず、後からlvextendコマンドで拡張できます。物理ディスクと異なり、LVは「どの物理ディスクに格納されるか」を意識する必要がなく、VGが自動的に最適な物理配置を行います。LVの縮小(lvreduce)も可能ですが、アンマウントが必要であり、拡張に比べて操作が複雑です。

LVM初期構築の完全手順

事前確認と準備

LVMの構築前に、現在のディスク構成を確認しておきましょう。fdiskコマンドでディスク一覧を表示し、新たに追加したディスクが認識されているか確認します。

$ fdisk -l
Disk /dev/sdb: 200 GiB, 214748364800 bytes, 419430400 sectors

このように/dev/sdbが認識されていることを確認したら、LVM構築を開始します。重要な注意点として、この操作はディスク内のデータをすべて消去するため、既存データがあれば事前にバックアップを取得してください。

コマンドによる構築

以下の手順で、新しいディスクをLVM管理下に置き、マウント可能な論理ボリュームを作成します。

ステップ1:物理ボリューム作成

$ sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

pvcreateコマンドは、指定されたディスク全体をLVM管理下に置きます。作成状況確認はpvdisplayコマンドで行えます。

ステップ2:ボリュームグループ作成

$ sudo vgcreate vg_data /dev/sdb
Volume group "vg_data" successfully created

vgcreateでVGを作成し、この例では/dev/sdbを統合します。VG名は任意ですが、用途を反映させると運用が効率化されます。

ステップ3:論理ボリューム作成

$ sudo lvcreate -L 100G -n lv_data vg_data
Logical volume "lv_data" created

lvcreateコマンドで、VG「vg_data」から100GBの論理ボリューム「lv_data」を切り出します。-Lオプションで容量を指定し、-nオプションでLV名を設定します。

ステップ4:ファイルシステムフォーマット

$ sudo mkfs.ext4 /dev/vg_data/lv_data
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 26214400 4k blocks

论理ボリュームにファイルシステムをフォーマットします。ext4は汎用的で安定しているため、多くの本番環境で採用されています。XFSを使用する場合は、mkfs.xfsコマンドを実行してください。

マウントと永続化設定

$ sudo mkdir /data
$ sudo mount /dev/vg_data/lv_data /data
$ df -h /data
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data  99G  0.3G  99G   1% /data

マウントが完了したら、/etc/fstabに登録して永続化します。サーバー再起動時に自動マウントされるようになります。

$ echo "/dev/vg_data/lv_data /data ext4 defaults 0 0" | sudo tee -a /etc/fstab

fstabへの登録後、mount -aコマンドで構文チェックを行い、エラーがないことを確認してください。

オンラインディスク拡張の実…

物理ディスク追加の手順

本番環境で「ディスクが80%超えた」という緊急局面では、以下の手順で容量を追加します。新しいディスク(例:/dev/sdc)がサーバーに接続されていることを前提とします。

$ sudo pvcreate /dev/sdc
$ sudo vgextend vg_data /dev/sdc

pvcreateで新しいディスクをPVとして初期化し、vgextendで既存のVGに追加します。この時点で、VGの総容量が増加していますが、まだマウントポイントの見かけ上の容量は変わりません。

論理ボリューム拡張

VGの容量が増加したら、そこから既存のLVへ容量を追加します。

$ sudo lvextend -L +50G /dev/vg_data/lv_data
Extending logical volume lv_data to 150.00 GiB
Logical volume lv_data successfully resized

lvextendコマンドの-Lオプションで追加容量(+50G)を指定します。この操作はマウントされたまま実行可能であり、ダウンタイムを回避できるという点がLVMの大きな利点です。

あるいは、VGの全体容量をLVに割り当てたい場合は、以下のように絶対値で指定することもできます。

$ sudo lvextend -l 100%VG /dev/vg_data/lv_data

ファイルシステム拡張

LVを拡張しただけでは、マウントポイントの見かけ上の容量は増えません。ファイルシステム内のブロックサイズ情報を更新する必要があります。使用しているファイルシステムの種類に応じて、異なるコマンドを実行します。

ext4の場合:

$ sudo resize2fs /dev/vg_data/lv_data
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/vg_data/lv_data to 39321600 (4k) blocks.
The filesystem on /dev/vg_data/lv_data is now 39321600 (4k) blocks long.

resize2fsはオンライン実行が可能であり、マウント中のまま実行できます。

XFSの場合:

$ sudo xfs_growfs /data
meta-data=/dev/mapper/vg_data-lv_data isize=512 agcount=4, agsize=3276800 blks

xfs_growfsはマウントポイントを指定して実行し、やはりマウント中のまま実行可能です。

拡張後の確認

ファイルシステムの拡張が完了したら、dfコマンドで実際にマウントポイントの容量が増えたことを確認します。

$ df -h /data
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data  150G  0.5G  150G   1% /data

容量が150Gに増えていることが確認できます。加えて、lvdisplayでLVの情報、vgdisplayでVGの情報も確認しておくと、構成把握がより確実になります。

$ sudo lvdisplay /dev/vg_data/lv_data
$ sudo vgdisplay vg_data

LVM縮小・スナップショッ…

論理ボリュームの安全な縮小

LVの縮小は拡張に比べてリスクが高いため、慎重に進める必要があります。ファイルシステムが縮小前の容量より大きい場合、データ損失の可能性があるからです。

縮小の基本手順は以下の通りです。まずLVをアンマウントし、次にファイルシステムを縮小し、その後LVを縮小します。

$ sudo umount /data
$ sudo resize2fs /dev/vg_data/lv_data 80G
$ sudo lvreduce -L 80G /dev/vg_data/lv_data
$ sudo mount /dev/vg_data/lv_data /data

縮小作業は本番環境では避けるべき操作とされており、どうしても必要な場合は、必ず事前にフルバックアップを取得してください。

スナップショット機能

LVMのスナップショット機能は、特定時点のLVの状態を保存し、それを別のLVとしてマウントできるというものです。テスト環境の構築やバックアップ直前の状態保存に有用とされています。

$ sudo lvcreate -L 10G -s -n lv_data_snap /dev/vg_data/lv_data
Logical volume "lv_data_snap" created

-sオプションでスナップショット作成を指定します。スナップショットは独立したLVとして機能し、異なるマウントポイントにマウント可能です。

よくあるトラブルと対応

「VGが見つからない」エラー

サーバー起動時にLVがマウントできないというトラブルが発生する可能性があります。これは物理ディスクが遅延初期化されている場合に起こるとされています。解決策として、LVMを初期化するudevルールの調整や、initramfsの再構築が有効です。

LVの拡張に失敗する

VGの利用可能容量が不足している場合、lvextendコマンドが失敗します。この場合、新しいディスクをPVとして追加し、vgextendでVGを拡張する必要があります。

ファイルシステム拡張後も容量が増えない

resize2fsやxfs_growfsを実行したにもかかわらず、dfコマンドで容量が増えない場合、キャッシュをクリアしてから再度dfコマンドを実行してみてください。それでも解決しない場合は、LVの状態をpvdisplay・vgdisplay・lvdisplayで詳細確認し、メタデータの整合性をチェックすることが推奨されます。

LVM運用上の注意点

LVM運用では、複数の重要な注意点があります。第一に、ディスク操作は誤ると深刻なデータ損失につながるため、本番環境での作業前には必ずスナップショットとバックアップを取得してください。

第二に、LVMメタデータは複数のコピーがPVに保存されるため、複数のディスク障害に対応できるとされていますが、メタデータ破損のリスクは常に存在します。定期的なメタデータバックアップ(vgcfgbackupコマンド)を習慣化することが推奨されます。

第三に、論理ボリュームの監視体制を整備しましょう。容量が閾値(例:80%)を超えた場合にアラートを発動するモニタリング設定により、緊急拡張を事前に計画的に実施できます。

まとめ

LVM(Logical Volume Manager)は、Linuxの本番サーバーにおいてディスク管理を大きく簡素化・柔軟化させるツールです。PV・VG・LVの3層構造を理解することで、物理ディスクとマウントポイントの間に抽象化レイヤを導入でき、その結果、ダウンタイムを最小化したまま容量を拡張できるようになります。

初期構築から拡張、スナップショット、トラブル対応まで、LVMの基本操作を身につけることは、インフラエンジニアの実務において必須の能力とされています。本記事で紹介した手順を参考にして、テスト環境で何度か実践してみることで、本番環境での緊急対応にも自信を持って臨めるようになるでしょう。ただし、重要な作業を実施する際は、本公式ドキュメント(Red Hat Enterprise Linux LVM Guide等)で最新情報を確認してから実行することをお勧めします。

ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営