LinuxでLVMを使ったディスク管理の実践

LinuxでLVMを使ったディスク管理の実践

LVMは、Linuxでディスクを柔軟に扱うための代表的な仕組みになる。通常の固定パーティション構成では、あとから容量を増やしたい、複数ディスクをまとめたい、スナップショットを取りたい、といった要求に対して手間が大きくなりやすい。LVMでは、物理ディスクやパーティションを物理ボリュームとして束ね、ボリュームグループという容量プールを作り、その中から論理ボリュームを切り出す。この考え方を押さえると、サーバー運用で頻繁に出てくる「容量を後から増やしたい」「ディスクを追加したい」「ファイルシステムごと拡張したい」といった作業がかなり整理しやすくなる。

LVMとは何か

LVMは Logical Volume Manager の略で、物理デバイスから仮想的なブロックデバイスを作る仕組み。
固定的なパーティション管理より柔軟で、
・複数ディスクをまとめる
・あとから容量を拡張する
・論理ボリュームを切り分ける
・スナップショットを取る
といった操作をしやすい。
Linuxのストレージ管理ではかなり定番で、特にサーバー用途ではよく使われる。

まず覚えるべき3つの単位

LVMを理解するうえで最も重要なのは、次の3つ。
・PV(Physical Volume)
・VG(Volume Group)
・LV(Logical Volume)
流れとしては、

  1. 物理ディスクやパーティションをPVにする
  2. PVをまとめてVGを作る
  3. VGの中からLVを切り出す
    という順になる。
    この3段階を理解できれば、LVMのほとんどの基本操作は追いやすくなる。

PV・VG・LVの関係をイメージで捉える

たとえば、/dev/sdb/dev/sdc の2本のディスクがあるとする。
これらをPVにして、まとめて1つのVGへ入れると、そのVGは「容量プール」のような状態になる。
そこから、
・アプリ用のLV
・ログ用のLV
・バックアップ用のLV
を切り出せる。
つまり、物理ディスクの境界を意識せず、論理的に容量を配分しやすくなるのがLVMの強みになる。

LVMの対象デバイスを確認する

LVMを触る前に、まず現在のディスク構成を確認する。
代表的には lsblk が見やすい。

lsblk

ファイルシステムまで見たいなら次。

lsblk -f

これで、
・どのディスクがあるか
・どこにマウントされているか
・すでにLVMが使われているか
を確認しやすい。
いきなり pvcreate する前に、対象デバイスを間違えていないかを必ず確認した方がよい。

物理ボリュームを作成する

LVMの最初の実作業は、対象デバイスを物理ボリューム化すること。
pvcreate を使う。

sudo pvcreate /dev/sdb

複数デバイスをまとめて初期化することもできる。

sudo pvcreate /dev/sdb /dev/sdc

このコマンドを実行すると、そのデバイスはLVM用の物理ボリュームとして使えるようになる。
ただし、対象デバイス上の既存データは壊れる可能性があるため、空ディスクや用途が確定した領域に対して使うのが前提になる。

物理ボリュームの確認方法

PVを作成したら、正しく認識されているかを確認する。
代表的には pvspvdisplay を使う。

sudo pvs

詳細を見たいなら次。

sudo pvdisplay

ここで、
・PV名
・容量
・どのVGに所属しているか
などが確認できる。
複数ディスクを扱う環境では、まずこの一覧を見ながら進める方が安全。

ボリュームグループを作成する

PVを作成したら、それらを束ねてVGを作る。
vgcreate を使う。

sudo vgcreate vgdata /dev/sdb

複数PVをまとめるなら次のようにする。

sudo vgcreate vgdata /dev/sdb /dev/sdc

これで vgdata という名前のVGが作られる。
以後は、このVGの中から論理ボリュームを切り出して使う流れになる。
VGは「物理ディスクをまとめた容量のプール」と考えると理解しやすい。

ボリュームグループの確認方法

VGを作成したら、vgsvgdisplay で状態を見る。
まずは一覧表示が使いやすい。

sudo vgs

詳細確認なら次。

sudo vgdisplay

ここで、
・VG名
・総容量
・空き容量
・所属するPV数
などを確認できる。
LVM運用では「あとどれだけ空きがあるか」を見る機会が多いため、vgs はかなり使用頻度が高い。

論理ボリュームを作成する

VGの中から実際に使うストレージ領域を作るには lvcreate を使う。
たとえば 20GB の lvapp を作るなら次。

sudo lvcreate -L 20G -n lvapp vgdata

VGの空き領域をすべて使いたいなら次のような指定もできる。

sudo lvcreate -l 100%FREE -n lvbackup vgdata

これで作られたLVは、通常のブロックデバイスとして扱える。
パスは一般的に /dev/vgdata/lvapp のような形になる。

論理ボリュームの確認方法

LVを作ったあとは、lvslvdisplay で確認する。
一覧確認には lvs が使いやすい。

sudo lvs

詳細を見るなら次。

sudo lvdisplay

ここでは、
・LV名
・VG名
・サイズ
・属性
などが確認できる。
複数LVを運用するときは、この一覧を見ながら容量計画を整理しやすい。

ファイルシステムを作成してマウントする

LVを作成しただけでは、まだファイルシステムは無い。
通常のディスクと同じように mkfs してマウントする必要がある。
ext4の例は次。

sudo mkfs.ext4 /dev/vgdata/lvapp

マウントポイントを作ってマウントする。

sudo mkdir -p /data/app
sudo mount /dev/vgdata/lvapp /data/app

マウント確認。

df -h

これで、LVM上のLVを通常のストレージとして使えるようになる。

再起動後も自動マウントする設定

一時的に mount しただけでは、再起動後に消える。
恒久的に使うなら /etc/fstab へ登録する。

まずUUIDを確認する。

sudo blkid /dev/vgdata/lvapp

/etc/fstab に書く例。

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data/app ext4 defaults 0 0

書いたら、再起動せずに構文確認する。

sudo mount -a

ここでエラーが出なければ、再起動後の自動マウント設定として扱いやすい。

ディスク追加後にVGを拡張する

LVMの実務的な強みは、あとからディスクを追加しやすいこと。
たとえば、新しい /dev/sdd を追加した場合、まずPV化する。

sudo pvcreate /dev/sdd

そのあと既存VGへ追加する。

sudo vgextend vgdata /dev/sdd

これで vgdata の空き容量が増える。
通常の固定パーティション構成より、後からの拡張がかなり柔軟になるのがLVMの大きな利点。

論理ボリュームを拡張する方法

VGに空きがあるなら、既存LVを拡張できる。
たとえば 10GB 追加するなら次。

sudo lvextend -L +10G /dev/vgdata/lvapp

VGの空きを全部使うなら次。

sudo lvextend -l +100%FREE /dev/vgdata/lvapp

ただし、ここで終わりではなく、その上のファイルシステムも拡張する必要がある。
LVだけ大きくしても、ファイルシステムが追従しなければ df -h の見た目は変わらない。

ファイルシステムの拡張も忘れない

LV拡張後は、使っているファイルシステムに応じた拡張コマンドが必要。
ext4 なら resize2fs が代表例。

[code]
sudo resize2fs /dev/vgdata/lvapp
[/code]

XFSなら通常 xfs_growfs を使う。
マウントポイントが /data/app の場合は次のようになる。

sudo xfs_growfs /data/app

実務では、「LVは増えたのに df が変わらない」という失敗がかなり多い。
原因はほとんどがファイルシステム拡張忘れになる。

縮小は拡張よりずっと危険

LVMは拡張しやすい一方で、縮小は注意が必要。
特にファイルシステムの縮小を誤るとデータ破損のリスクがある。
基本的に、
・ext系は縮小手順をかなり慎重に踏む
・XFSは一般的にオンライン縮小ができない
という理解を持った方が安全。
拡張は比較的よく使うが、縮小は「できるか」より「本当にやる必要があるか」を先に考える方が実務では重要になる。

スナップショットの考え方

LVMにはスナップショット機能もある。
これは、ある時点のLVの状態を差分ベースで保持する仕組みとして使われることがある。
たとえばバックアップ前の一時固定や、変更前の退避で使うことがある。

簡易例。

sudo lvcreate -L 5G -s -n lvapp_snap /dev/vgdata/lvapp

ただし、スナップショットは容量管理や性能面の理解も必要で、初心者が常用するよりは、まずPV/VG/LVの基本運用を安定させてから触る方が安全。

よくある失敗と注意点

LVM運用でよくある失敗はかなり典型的。
・対象デバイスを間違えて pvcreate する
・VG名やLV名を混同する
・LVを拡張しただけでファイルシステム拡張を忘れる
・縮小を安易に実行する
・fstab へ誤記して再起動後にマウント失敗する
・空き容量確認なしに lvcreate しようとする
特に危険なのは「通常のパーティション感覚で縮小する」こと。
拡張より縮小の方がリスクが高い前提で扱う方がよい。

実務で進めやすい作業順

LVMを実務で扱うなら、次の順番がかなり分かりやすい。

  1. lsblk で対象ディスクを確認する
  2. pvcreate でPVを作る
  3. vgcreate または vgextend でVGを作る / 広げる
  4. lvcreate または lvextend でLVを作る / 広げる
  5. mkfsmount を行う
  6. 必要なら /etc/fstab へ登録する
  7. 拡張時はファイルシステム拡張まで行う
    この流れを固定しておくと、作業ミスがかなり減りやすい。

まとめ

LinuxでLVMを使ったディスク管理を理解するうえで重要なのは、
・PV、VG、LVの3層構造を押さえること
・LVMは固定パーティションより柔軟に容量管理しやすいこと
・ディスク追加後にVGを広げ、LVを後から拡張できること
・LV拡張後はファイルシステム拡張も必要なこと
・縮小は拡張よりずっと慎重に扱うべきこと
このあたりになる。
LVMは最初は概念が多く見えるが、PV→VG→LVの流れで捉えるとかなり整理しやすい。
サーバー運用で「あとから容量を増やしたい」という場面は非常に多いため、LVMを理解しておく価値はかなり大きい。