こんにちは!いつもブログを読んでいただき、ありがとうございます。
前回の記事では「2.02.2 ファイルシステムの管理②」として、XFS・Btrfs・SMART を解説しました。まだご覧になっていない方は先にそちらをどうぞ!
👉 【前々回記事】 2.02.2 ファイルシステムの管理②
👉 【前回記事】 2.02.2 ファイルシステムの管理③
今回は主題2.02の最終テーマ、「2.02.3 論理ボリュームマネージャ(LVM)の設定と管理」 です。
「LVMって名前は聞いたことあるけど、仕組みがよく分からない…」という方、多いのではないでしょうか。LVMを使うと、ディスク領域をまるで「パズルのピース」のように柔軟に組み合わせて管理できるようになります。実務でも超頻出のスキルなので、しっかりマスターしていきましょう!
| 項目 | 内容 |
|---|---|
| 主題番号 | 2.02.3 論理ボリュームマネージャの設定と管理 |
| 重要度 | 3 |
| 主なコマンド | pvcreate, pvdisplay, pvremove, vgcreate, vgdisplay, vgextend, lvcreate, lvdisplay, lvextend, lvreduce 他 |
| 設定ファイル | /etc/lvm/lvm.conf |
📌 この記事のゴール
- PV・VG・LVの3層構造を説明できる
- LVMの基本操作(作成・確認・削除・拡張)ができる
- スナップショットの作成・削除ができる
- デバイスマッパーのパス形式を理解できる
- 物理エクステント(PE)の仕組みを説明できる
LVM(Logical Volume Manager)は、複数のディスクやパーティションをまとめて、柔軟にサイズ変更や管理ができる仕組みです。
LVMの3層構造
【物理ディスク】 /dev/sdb /dev/sdc
↓ pvcreate(初期化)
┌──────────────────────────┐
│ PV(物理ボリューム) │ /dev/sdb1, /dev/sdc1
└──────────────────────────┘
↓ vgcreate(グループ化)
┌──────────────────────────┐
│ VG(ボリュームグループ) │ vg_data(PVをまとめた大きな「器」)
└──────────────────────────┘
↓ lvcreate(切り出し)
┌──────────────────────────┐
│ LV(論理ボリューム) │ /dev/vg_data/lv_home など
└──────────────────────────┘
↓ mkfs(フォーマット)・mount
【ファイルシステムとして利用】
★ ここがポイント!
LVMは PV → VG → LV の順に作成します。この順番は試験で必ず問われます!
LVMを使うメリット
- 後からサイズを変更できる(通常のパーティションは変更が大変)
- 複数ディスクをまとめて1つのボリュームとして使える
- スナップショットでバックアップが簡単
LVMを理解するうえで 物理エクステント(PE:Physical Extent) は外せないキーワードです。試験でもよく問われるので、しっかり押さえておきましょう!
PEの概念
PEとは、VG(ボリュームグループ)内でデータを管理するときの「最小単位のブロック」です。LVMはディスク領域をこのPE単位で切り出して管理しています。
VG(ボリュームグループ)の中身イメージ
┌────────────────────────────────────────────┐
│ [PE][PE][PE][PE][PE][PE][PE][PE][PE][PE]... │
│ ←── 4MB ──→ ←── 4MB ──→ ←── 4MB ──→ │
└────────────────────────────────────────────┘
↑ LVはPEを何個使うかで容量が決まる
★ 試験頻出!PE のデフォルトサイズは 4MB
vgcreateでVGを作成したとき、PEサイズはデフォルトで 4MB に設定されます。
「10GBのLVを作成する」= 「4MBのPEを2,560個使う」ということです!
PEサイズの確認・指定
# vgcreate 時に PE サイズを変更する(-s オプション)
vgcreate -s 8M vg_data /dev/sdb1 # PEサイズを 8MB に設定
# VG の詳細で PE サイズを確認
vgdisplay vg_data
# → "PE Size" の行に表示される
# lvcreate で PE 数を指定する方法(-l オプション)
lvcreate -l 100 -n lv_home vg_data # 100PE分 = 400MB(デフォルト4MBの場合)
lvcreate -l 50%VG -n lv_home vg_data # VGの50%を使う
| 指定方法 | コマンド例 | 説明 |
|---|---|---|
| サイズ指定 | lvcreate -L 10G | GBやMBで直感的に指定 |
| PE数指定 | lvcreate -l 2560 | PE数で指定(4MB×2560=10GB) |
| 割合指定 | lvcreate -l 50%VG | VG全体の割合で指定 |
💡 試験では「-L(大文字)」と「-l(小文字)」の使い分けが問われます!
-Lはサイズ(10G など)、-lはPE数またはパーセント指定です。間違えやすいので注意!
LVを作成すると、アクセスできるパスが 2種類 あります。試験でどちらの形式で出題されても答えられるように両方覚えておきましょう。
2種類のデバイスパス
| パス形式 | 例 | 説明 |
|---|---|---|
/dev/<VG名>/<LV名> | /dev/vg_data/lv_home | シンボリックリンク(よく使う) |
/dev/mapper/<VG名>-<LV名> | /dev/mapper/vg_data-lv_home | デバイスマッパーの実体パス |
# どちらも同じLVを指している
ls -l /dev/vg_data/lv_home
# → /dev/vg_data/lv_home -> /dev/mapper/vg_data-lv_home
# フォーマットもマウントも、どちらのパスでもOK
mkfs.ext4 /dev/vg_data/lv_home
mkfs.ext4 /dev/mapper/vg_data-lv_home # 同じ意味
mount /dev/mapper/vg_data-lv_home /home # こちらでもOK
★ デバイスマッパー(Device Mapper)とは?
Linuxカーネルのデバイスマッパー機能がLVMの仮想ブロックデバイスを管理しています。/dev/mapper/配下に実体が作られ、/dev/VG名/LV名はそこへのシンボリックリンクです。
VG名とLV名の間が「-(ハイフン)」で結ばれるのが特徴です。
# /dev/mapper/ の内容を確認
ls /dev/mapper/
# → control vg_data-lv_home vg_data-lv_var ...
# dmsetup コマンドでデバイスマッパーの一覧を確認
dmsetup ls
⚠️ 試験の引っかけポイント!
VG名やLV名にハイフンが含まれる場合(例:vg-data/lv-home)、/dev/mapper/のパスではハイフンが二重になります。
例:/dev/mapper/vg--data-lv--home
実務でVG名・LV名を付けるときはハイフンを避けるか、ルールを統一しておくと安全です。
PVの作成:pvcreate
# パーティションをPVとして初期化する
pvcreate /dev/sdb1
pvcreate /dev/sdc1
# 複数同時に指定もできる
pvcreate /dev/sdb1 /dev/sdc1
PVの確認:pvdisplay / pvs / pvscan
# PVの詳細情報を表示
pvdisplay
# 特定のPVだけ表示
pvdisplay /dev/sdb1
# 簡潔な一覧表示(実務でよく使う)
pvs
# システム上のPVをスキャンして表示
pvscan
PVの削除:pvremove
# PVからLVMのメタデータを削除(VGから外した後に実行)
pvremove /dev/sdb1
VGの作成:vgcreate
# VGを作成(VG名とPVを指定)
vgcreate vg_data /dev/sdb1
# 複数のPVをまとめてVGを作成
vgcreate vg_data /dev/sdb1 /dev/sdc1
# PEサイズを変更して作成(デフォルトは4MB)
vgcreate -s 8M vg_data /dev/sdb1
VGの確認:vgdisplay / vgs / vgscan
# VGの詳細情報を表示
vgdisplay
# 特定のVGだけ表示
vgdisplay vg_data
# 簡潔な一覧表示
vgs
# システム上のVGをスキャン
vgscan
VGにPVを追加:vgextend
# 新しいPVをVGに追加(容量を増やしたい時)
vgextend vg_data /dev/sdd1
VGからPVを削除:vgreduce
# VGからPVを削除(まず pvmove でデータを移動してから)
pvmove /dev/sdb1 # PV上のデータを他のPVへ移動
vgreduce vg_data /dev/sdb1
💡 試験に出る!
vgreduceの前に必ずpvmoveでデータを他のPVに移動しておきましょう。移動せずに削除するとデータが消えます!
VGの削除:vgremove
# VGを削除(先にLVをすべて削除しておくこと)
vgremove vg_data
VGの有効化・無効化
vgchange -a y vg_data # 有効化(-a y)
vgchange -a n vg_data # 無効化(-a n)
LVの作成:lvcreate
# 10GBのLVを作成
lvcreate -L 10G -n lv_home vg_data
# VGの50%を使ってLVを作成
lvcreate -l 50%VG -n lv_home vg_data
| オプション | 説明 |
|---|---|
-L <サイズ> | LVのサイズを指定(例:10G、500M) |
-l <PE数 or %> | PE数またはVGの割合でサイズ指定 |
-n <名前> | LV名を指定 |
作成後のLVは /dev/<VG名>/<LV名> または /dev/mapper/<VG名>-<LV名> でアクセスできます。
# 作成したLVをフォーマットしてマウント
mkfs.ext4 /dev/vg_data/lv_home
mount /dev/vg_data/lv_home /home
# /dev/mapper/ 形式でも同じ操作が可能
mount /dev/mapper/vg_data-lv_home /home
👉
mkfsやmountの詳しい使い方は 2.02.1 ファイルシステムの設定とマウント で解説しています。
LVの確認:lvdisplay / lvs / lvscan
# LVの詳細情報を表示
lvdisplay
# 特定のLVだけ表示
lvdisplay /dev/vg_data/lv_home
# 簡潔な一覧表示
lvs
# システム上のLVをスキャン
lvscan
LVのサイズ変更:lvextend / lvreduce / lvresize
# LVを5GB拡張する
lvextend -L +5G /dev/vg_data/lv_home
# ファイルシステムも同時に拡張(-r オプション)
lvextend -L +5G -r /dev/vg_data/lv_home
# LVを縮小する(※データ消失リスクあり!必ずバックアップを!)
lvreduce -L -2G /dev/vg_data/lv_home
# サイズを絶対値で指定して変更
lvresize -L 20G /dev/vg_data/lv_home
⚠️ 重要な注意点!
LVを拡張した後、ファイルシステム側も拡張しないと領域を使えません。
- ext4の場合:
resize2fs /dev/vg_data/lv_home- XFSの場合:
xfs_growfs /mnt/data(マウントしたまま実行可能)
-rオプションを付けるとlvextendと同時にファイルシステムも拡張してくれます!
💡
resize2fsとxfs_growfsの詳細は
2.02.2 ファイルシステムの管理① および ② もあわせてご確認ください!
LVの削除:lvremove
# LVを削除(アンマウントしてから)
umount /home
lvremove /dev/vg_data/lv_home
LVMのスナップショットは「ある時点でのLVの状態」を保存する機能です。バックアップの直前にスナップショットを取っておくと、一貫性のあるバックアップができます。
スナップショットの作成
# lv_home のスナップショットを 2GB の領域で作成
lvcreate -L 2G -s -n lv_home_snap /dev/vg_data/lv_home
| オプション | 説明 |
|---|---|
-s | スナップショットを作成 |
-n <名前> | スナップショットの名前 |
-L <サイズ> | 差分データの保存領域サイズ |
⚠️ 注意:スナップショットの差分領域がいっぱいになると、スナップショットが無効になります。元LVへの書き込み量を考慮して、余裕のあるサイズを指定しましょう。
スナップショットのマウント・削除
# スナップショットをマウントして内容を確認
mount /dev/vg_data/lv_home_snap /mnt/snap
# /dev/mapper/ 形式でも同様にマウント可能
mount /dev/mapper/vg_data-lv_home_snap /mnt/snap
# スナップショットを削除
lvremove /dev/vg_data/lv_home_snap
💡【PR】 LVMのコマンドは問題で確実に定着させよう!
| 操作 | PV | VG | LV |
|---|---|---|---|
| 作成 | pvcreate | vgcreate | lvcreate |
| 詳細表示 | pvdisplay | vgdisplay | lvdisplay |
| 一覧表示 | pvs | vgs | lvs |
| スキャン | pvscan | vgscan | lvscan |
| 削除 | pvremove | vgremove | lvremove |
| 拡張 | – | vgextend | lvextend |
| 縮小 | – | vgreduce | lvreduce |
| 有効/無効 | – | vgchange | lvchange |
💡 覚え方
コマンド名は全部「pv・vg・lv + 動詞」のパターンです。create・display・remove・extend・reduceを3種類の頭文字と組み合わせて覚えましょう!
✅ まとめ:これだけは暗記して試験へ!
| ポイント | 内容 |
|---|---|
| LVMの作成順 | PV → VG → LV の順番!逆は不可 |
| PEのデフォルトサイズ | 4MB(vgcreate 時のデフォルト。-s で変更可) |
-L と -l の違い | -L はサイズ指定、-l はPE数 or パーセント指定 |
| LVのデバイスパス | /dev/VG名/LV名 と /dev/mapper/VG名-LV名 の2形式 |
| vgreduce の前に | pvmove でデータを退避してから実行 |
| LV拡張後の注意 | FS側も拡張する(resize2fs or xfs_growfs) |
-r オプション | lvextend -r でLVとFSを同時拡張 |
| スナップショット | lvcreate -s で作成。差分保存領域のサイズ指定が必要 |
| 設定ファイル | /etc/lvm/lvm.conf |
VirtualBoxで2枚目の仮想ディスクを追加して、実際にLVMを構築してみるのが一番の近道です。pvcreate → vgcreate → lvcreate → mkfs → mount の流れを手を動かして覚えてみてください!
✅ まとめを確認したら、次はアウトプットで確実に定着させましょう!
【PR】▶ LinuC対策におすすめの教材はこちら
勉強、大変だと思いますが、焦らず一つずつ積み重ねていきましょう。
皆さんにとって、今日も素敵な1日になりますように!
参考:LPI-Japan 公式試験範囲 https://linuc.org/linuc2/range/201.html