LVM(論理ボリュームマネージャー)
『LVM(Logical Volume Manager)』は、物理ディスクを柔軟に管理するための Linux のボリューム管理機構です。物理ボリューム(PV)・ボリュームグループ(VG)・論理ボリューム(LV)という3層構造でディスクを抽象化します。複数の物理ディスクをひとつの大きなストレージプールにまとめたり、サービスを停止せずにボリュームを拡張したり、スナップショットで一貫性のあるバックアップを取得したりできます。
構文
# -----------------------------------------------
# PV(物理ボリューム)操作
# -----------------------------------------------
# pvcreate {デバイスパス}
# → 指定したデバイスを PV として初期化します
# → パーティションまたはディスク全体を指定できます
# 例: sudo pvcreate /dev/sdb
# pvdisplay [{PVパス}]
# → PV の詳細情報(サイズ・UUID・所属 VG など)を表示します
# pvs
# → PV の一覧をコンパクトに表示します
# -----------------------------------------------
# VG(ボリュームグループ)操作
# -----------------------------------------------
# vgcreate {VG名} {PVパス} [{PVパス} ...]
# → 指定した PV をまとめて VG を作成します
# 例: sudo vgcreate kof_vg /dev/sdb
# vgdisplay [{VG名}]
# → VG の詳細情報(空き容量・PE サイズなど)を表示します
# vgs
# → VG の一覧をコンパクトに表示します
# vgextend {VG名} {PVパス}
# → 既存の VG に新しい PV を追加して容量を拡張します
# 例: sudo vgextend kof_vg /dev/sdc
# -----------------------------------------------
# LV(論理ボリューム)操作
# -----------------------------------------------
# lvcreate -L {サイズ} -n {LV名} {VG名}
# → 指定したサイズの LV を作成します
# → サイズは G(ギガバイト)・M(メガバイト)・T(テラバイト)で指定します
# 例: sudo lvcreate -L 10G -n kyo_lv kof_vg
# lvcreate -l {PE数|100%FREE} -n {LV名} {VG名}
# → PE(Physical Extent)の個数または VG の空き容量全体で LV を作成します
# 例: sudo lvcreate -l 100%FREE -n iori_lv kof_vg
# lvdisplay [{LVパス}]
# → LV の詳細情報(パス・サイズ・スナップショット情報など)を表示します
# lvs
# → LV の一覧をコンパクトに表示します
# lvextend -L +{追加サイズ} {LVパス}
# → 指定した分だけ LV を拡張します(ファイルシステムの拡張は別途必要)
# 例: sudo lvextend -L +5G /dev/kof_vg/kyo_lv
# lvreduce -L -{削減サイズ} {LVパス}
# → LV のサイズを縮小します(事前にファイルシステムの縮小が必要)
# 例: sudo lvreduce -L -2G /dev/kof_vg/iori_lv
# lvrename {VG名} {旧LV名} {新LV名}
# → LV の名前を変更します
# 例: sudo lvrename kof_vg iori_lv andy_lv
# -----------------------------------------------
# スナップショット
# -----------------------------------------------
# lvcreate -s -L {スナップショットサイズ} -n {スナップショット名} {元LVパス}
# → 指定した LV のスナップショット(読み書き可能なコピー)を作成します
# → スナップショットサイズは差分データの保存領域です。元 LV の変更量に応じて設定します
# 例: sudo lvcreate -s -L 2G -n kyo_snap /dev/kof_vg/kyo_lv
# -----------------------------------------------
# ファイルシステムの拡張
# -----------------------------------------------
# resize2fs {デバイスパス}
# → ext2 / ext3 / ext4 ファイルシステムを LV のサイズに合わせて拡張します
# → lvextend の後に実行します
# 例: sudo resize2fs /dev/kof_vg/kyo_lv
# xfs_growfs {マウントポイント}
# → XFS ファイルシステムをマウントしたまま拡張します
# → xfs はマウント中でも拡張できますが、縮小は非対応です
# 例: sudo xfs_growfs /mnt/kyo_data
構文一覧
| コマンド | 説明 |
|---|---|
pvcreate {デバイス} | デバイスを PV(物理ボリューム)として初期化します。LVM 管理の起点となります。 |
pvdisplay | PV の詳細情報(サイズ・所属 VG・空き PE 数など)を表示します。 |
pvs | PV の一覧をコンパクトに表示します。スクリプトでの確認に適しています。 |
vgcreate {VG名} {PV} | PV をまとめて VG(ボリュームグループ)を作成します。複数の PV を同時に指定できます。 |
vgdisplay | VG の詳細情報(合計容量・空き容量・PE サイズなど)を表示します。 |
vgs | VG の一覧をコンパクトに表示します。 |
vgextend {VG名} {PV} | 既存の VG に新しい PV を追加して容量を増やします。サービス稼働中でも実行できます。 |
lvcreate -L {サイズ} -n {LV名} {VG名} | 指定サイズの LV(論理ボリューム)を作成します。作成後にファイルシステムを作成してマウントします。 |
lvcreate -l 100%FREE -n {LV名} {VG名} | VG の空き容量をすべて使って LV を作成します。 |
lvdisplay | LV の詳細情報(パス・サイズ・スナップショット情報など)を表示します。 |
lvs | LV の一覧をコンパクトに表示します。 |
lvextend -L +{サイズ} {LVパス} | LV を拡張します。拡張後に『resize2fs』または『xfs_growfs』でファイルシステムも拡張します。 |
lvreduce -L -{サイズ} {LVパス} | LV を縮小します。事前にファイルシステムの縮小が必要です。誤操作によるデータ損失に注意してください。 |
lvrename {VG名} {旧名} {新名} | LV の名前を変更します。『/etc/fstab』のマウント設定も合わせて更新してください。 |
lvcreate -s -L {サイズ} -n {名前} {LVパス} | スナップショット LV を作成します。バックアップ前の一貫したデータコピーとして活用できます。 |
resize2fs {デバイスパス} | ext4 ファイルシステムを LV のサイズに合わせて拡張します。アンマウント不要で実行できます。 |
xfs_growfs {マウントポイント} | XFS ファイルシステムをマウントしたまま拡張します。縮小には対応していません。 |
使用例
LVM の初期構築(新しいディスクを追加してマウントするまでの手順)
# -----------------------------------------------
# 新しいディスク /dev/sdb を LVM で管理する
# 「草薙京」チームのデータ領域として構築します
# -----------------------------------------------
# ① /dev/sdb を PV(物理ボリューム)として初期化します
sudo pvcreate /dev/sdb
# ② PV から VG(ボリュームグループ)kof_vg を作成します
# 複数の PV をまとめる場合は空白区切りで続けて指定します
sudo vgcreate kof_vg /dev/sdb
# ③ kof_vg から 10GB の LV(論理ボリューム)kyo_lv を作成します
sudo lvcreate -L 10G -n kyo_lv kof_vg
# ④ LV 上に ext4 ファイルシステムを作成します
# デバイスパスは /dev/{VG名}/{LV名} の形式です
sudo mkfs.ext4 /dev/kof_vg/kyo_lv
# ⑤ マウントポイントを作成してマウントします
sudo mkdir -p /mnt/kyo_data
sudo mount /dev/kof_vg/kyo_lv /mnt/kyo_data
# ⑥ /etc/fstab に追記して再起動後も自動マウントされるようにします
# UUID を使うとデバイス名の変化に強くなります
sudo blkid /dev/kof_vg/kyo_lv
# → UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" と表示されます
# /etc/fstab に以下の行を追加します:
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/kyo_data ext4 defaults 0 2
# LV が正常に作成されたことを確認します
sudo lvs
実行するコマンドは次の通りです。
$ sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert kyo_lv kof_vg -wi-ao---- 10.00g
LV の拡張(既存ボリュームに容量を追加する)
# ----------------------------------------------- # kyo_lv を 10GB から 15GB に拡張します # VG に十分な空き容量があることを事前に確認してください # ----------------------------------------------- # VG の空き容量を確認します(Free PE / Size の欄を確認します) sudo vgdisplay kof_vg # LV を 5GB 拡張します(+付きで「追加」を意味します) sudo lvextend -L +5G /dev/kof_vg/kyo_lv # ext4 の場合: ファイルシステムを LV の新しいサイズに合わせて拡張します # -p オプションで進捗を表示できます sudo resize2fs /dev/kof_vg/kyo_lv # ※ XFS の場合は代わりに以下を実行します(マウント中でも OK): # sudo xfs_growfs /mnt/kyo_data # 拡張されたことを確認します df -h /mnt/kyo_data
実行するコマンドは次の通りです。
$ df -h /mnt/kyo_data Filesystem Size Used Avail Use% Mounted on /dev/mapper/kof_vg-kyo_lv 15G 1.2G 13G 9% /mnt/kyo_data
スナップショットの作成とバックアップへの活用
# ----------------------------------------------- # kyo_lv のスナップショットを作成してバックアップに使います # スナップショットは「作成時点の差分データ」を保存する領域です # 差分が 2GB を超えると無効化されるため、サイズは余裕を持って設定します # ----------------------------------------------- # kyo_lv のスナップショット kyo_snap を 2GB で作成します sudo lvcreate -s -L 2G -n kyo_snap /dev/kof_vg/kyo_lv # スナップショットをマウントして内容を確認・バックアップします sudo mkdir -p /mnt/kyo_snap sudo mount -o ro /dev/kof_vg/kyo_snap /mnt/kyo_snap # rsync でバックアップします(スナップショットなので一貫性が保証されます) sudo rsync -av /mnt/kyo_snap/ /backup/kyo_data/ # バックアップ完了後、スナップショットをアンマウントして削除します sudo umount /mnt/kyo_snap sudo lvremove /dev/kof_vg/kyo_snap # スナップショットの使用状況を確認します(Data% が 100% になると無効化されます) sudo lvs -o lv_name,lv_size,data_percent
実行するコマンドは次の通りです。
$ sudo lvs -o lv_name,lv_size,data_percent LV LSize Data% kyo_lv 15.00g kyo_snap 2.00g 3.45
VG に新しいディスクを追加して容量を増やす
# ----------------------------------------------- # 既存の kof_vg に新しいディスク /dev/sdc を追加します # サービスを稼働させたまま VG の容量を拡張できます # ----------------------------------------------- # 新しいディスク /dev/sdc を PV として初期化します sudo pvcreate /dev/sdc # kof_vg に /dev/sdc を追加します sudo vgextend kof_vg /dev/sdc # VG の容量が増えたことを確認します sudo vgs # 追加された空き容量を iori_lv として割り当てます # 八神庵チームのデータ領域として 8GB 確保します sudo lvcreate -L 8G -n iori_lv kof_vg sudo mkfs.ext4 /dev/kof_vg/iori_lv sudo mkdir -p /mnt/iori_data sudo mount /dev/kof_vg/iori_lv /mnt/iori_data
実行するコマンドは次の通りです。
$ sudo vgs VG #PV #LV #SN Attr VSize VFree kof_vg 2 2 0 wz--n- <39.99g <16.99g
概要
『LVM』は、物理ディスクの制約を超えて柔軟なストレージ管理を実現する Linux の仕組みです。PV(物理ボリューム)でディスクを LVM に登録し、VG(ボリュームグループ)でストレージプールにまとめ、VG から任意のサイズで LV(論理ボリューム)を切り出すという3層構造が特徴です。この抽象化により、物理ディスクの境界を意識せずにボリュームを動的に拡張・縮小できます。ボリュームを拡張する場合は『lvextend』でサイズを変更した後、ext4 なら『resize2fs』、XFS なら『xfs_growfs』でファイルシステムも拡張します。スナップショット機能を使うと、データベースや Web アプリのデータを書き込み中でも一貫性のある状態でバックアップできます。ディスクのパーティション構成については ディスクのパーティション管理(fdisk / parted) を、ファイルシステムの作成とマウントの詳細については ファイルシステムの作成とマウント(mkfs / mount) を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。