言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. LVM(論理ボリュームマネージャー)

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 管理の起点となります。
pvdisplayPV の詳細情報(サイズ・所属 VG・空き PE 数など)を表示します。
pvsPV の一覧をコンパクトに表示します。スクリプトでの確認に適しています。
vgcreate {VG名} {PV}PV をまとめて VG(ボリュームグループ)を作成します。複数の PV を同時に指定できます。
vgdisplayVG の詳細情報(合計容量・空き容量・PE サイズなど)を表示します。
vgsVG の一覧をコンパクトに表示します。
vgextend {VG名} {PV}既存の VG に新しい PV を追加して容量を増やします。サービス稼働中でも実行できます。
lvcreate -L {サイズ} -n {LV名} {VG名}指定サイズの LV(論理ボリューム)を作成します。作成後にファイルシステムを作成してマウントします。
lvcreate -l 100%FREE -n {LV名} {VG名}VG の空き容量をすべて使って LV を作成します。
lvdisplayLV の詳細情報(パス・サイズ・スナップショット情報など)を表示します。
lvsLV の一覧をコンパクトに表示します。
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) を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。