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

Linuxサーバーのストレージ管理で「ディスク容量が足りなくなった」という課題に直面した際、LVM(Logical Volume Manager)を使えばシステム稼働中に安全にストレージを拡張できます。物理ディスクを追加するだけで、既存のファイルシステムを停止することなく論理ボリュームを拡張できるため、サービスダウンタイムを最小限に抑えられます。本記事では、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は以下の階層構造で構成されています。

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 lvm2

Ubuntu/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_app

ext4ファイルシステムを拡張

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_app

XFSファイルシステムを拡張

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を拡張できない

解決策

  1. 新しいPVをVGに追加する
  2. sudo pvcreate /dev/sdd
    sudo vgextend vg_data /dev/sdd
      
  3. LVを拡張する
  4. sudo lvextend -L +50G /dev/vg_data/lv_app
      
  5. ファイルシステムを拡張する
  6. sudo resize2fs /dev/vg_data/lv_app
      

事例2: ファイルシステムの拡張に失敗

状況:resize2fs実行時に「Filesystem is too small」エラーが発生

原因:LVを拡張したが、ファイルシステムのサイズがLVより小さい

解決策

  1. LVのサイズを確認
  2. sudo lvdisplay /dev/vg_data/lv_app
      
  3. ファイルシステムのサイズを確認
  4. df -h /mnt/app
      
  5. ファイルシステムを拡張
  6. sudo resize2fs /dev/vg_data/lv_app
      

事例3: LVがマウントされているため拡張できない

状況:lvextend実行時に「Device or resource busy」エラーが発生

原因:LVがマウントされているため、拡張できない

解決策

  1. LVをアンマウント
  2. sudo umount /mnt/app
      
  3. LVを拡張
  4. sudo lvextend -L +50G /dev/vg_data/lv_app
      
  5. ファイルシステムを拡張
  6. sudo resize2fs /dev/vg_data/lv_app
      
  7. LVを再マウント
  8. sudo mount /dev/vg_data/lv_app /mnt/app
      

LVMの状態確認コマンド

LVMの状態を確認するためのコマンドを以下にまとめます。

PVの状態確認

sudo pvdisplay

VGの状態確認

sudo vgdisplay

LVの状態確認

sudo lvdisplay

LVM全体の状態確認

sudo vgscan sudo pvscan sudo lvscan

LVMの詳細情報

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関連のファイルやデバイスへのアクセス権を適切に設定してください。また、スナ

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