5.2. LVM

LVM(論理ボリューム管理機能)はディスク管理を柔軟に行える機能のこと。
ディスクのパーティションを直接操作は行わず、仮想的なパーティションの論理ボリュームを動的に管理する。
以下のメリットがLVMにはある。

  • パーティションのサイズを変更できる(通常は一度決めるとできない)
  • 別ディスクにパーティションを移動させることができる
  • ディスクサイズを超える大きさのパーティションを作成できる

LVMでは仮想的なブロックデバイスの機能はデバイスマッパーと呼ばれる機能によって実現されている。
これらの仮想的なデバイスは/dev/mapper/VG名-LV名というデバイス名で扱われる。

まあカーネル内では/dev/dm-*という形で、LVMでは/dev/VG名/LV名というデバイス名も扱われる。

5.2.1. LVMの仕組み

LVMの概要は以下の通り。
ボリュームグループは仮想的ディスク、論理ボリュームは仮想的パーティションといえる。

LVM

  • 1台のハードディスクや1つのパーティションを物理ボリューム(PV)にする
  • 物理ボリュームは一定サイズの物理エクステント(PE)から構成される
  • 1つ以上の物理ボリュームからボリュームグループ(VG)が構成される
  • VG内でPEから論理ボリューム(LV)が構成される
  • 論理ボリュームは従来のパーティション同様ブロックデバイスとして扱える
  • LVのサイズ変更や他ディスクへの移動が可能
  • LVは複数ディスクにまたがって作成できる
  • VGは後からサイズ変更ができる

5.2.2. LVMの作成

LVM利用手順は以下の通り。

  1. パーティションの作成(fdisk)
  2. 物理ボリュームを用意(pvcreate)
  3. 物理ボリュームを束ねてボリュームグループを作成(vgcreate)
  4. ボリュームグループから論理ボリュームを切り出す(lvcreate)
  5. ファイルシステムの作成(mkfs)
  6. マウント(mount)

/dev/sdd1,/dev/sde1を使用した例

  1. LVM用のパーティションの用意 初めにLVMを作成するためのパーティションまたはハードディスクを用意する。 パーティションを利用する場合はタイプを8eに設定する
parted /dev/sdd1
parted /dev/sde1
  1. 物理ボリュームを初期化する pvcreateコマンドでデバイスを物理ボリュームとして初期化する
pvcreate /dev/sdd1 /dev/sde1
  1. ボリュームグループの作成 vgcreateコマンドでボリュームグループを作成する(例の名称ではgroup1)
vgcreate group1 /dev/sdd1 /dev/sde1

なお-sオプションで物理エクステントのサイズを指定可能(省略した場合デフォルトで4MB) 4. 論理ボリュームの作成 lvcreateコマンドで論理ボリュームを作成する(例の名称ではlv1)

lvcreate -L 500M -n lv1 group1

なおlvscanコマンドで論理ボリュームの状態を確認可能 5. ファイルシステムの作成/マウント ファイルシステムを作成してマウントを行う。例ではext4で/mntにマウントする

mkfs.ext4 /dev/group1/lv1
mount  /dev/group1/lv1 /mnt

なおdf -Tコマンドで確認可能。

5.2.3. LVMの管理

LVM関連のコマンドを記載する。

pvdisplay/pvscanコマンド

物理ボリュームの詳細情報の表示を行うコマンド。

pvdisplay /dev/sda1
pvscan # 簡潔に表示

vgextendコマンド

ボリュームグループに物理ボリュームを追加するコマンド。

vgextend [ボリュームグループ] [物理ボリューム]

pvmoveコマンド

物理ボリュームを別の物理ボリュームに移動させるコマンド。

pvmove [移動元物理ボリューム] [移動先物理ボリューム]

vgreduceコマンド

ボリュームグループから物理ボリュームを削除するコマンド。

vgreduce [ボリュームグループ] [削除する物理ボリューム]

pvremoveコマンド

物理ボリュームを削除するコマンド。

pvremove [物理ボリューム]

vgdisplayコマンド

ボリュームグループの詳細を表示するコマンド。

vgdisplay [ボリュームグループ]

lvdisplayコマンド

論理ボリュームの詳細情報の表示するコマンド。

lvdisplay [論理ボリューム]

lvextendコマンド

論理ボリュームを拡張するコマンド。

lvextend -L +100M [論理ボリューム]

このコマンドだけではファイルシステムまで拡張されない。
そのためresize2fsコマンドやxfs_growfsコマンドでファイルシステムのサイズも拡張する必要がある。

resize2fs/xfs_growsfsコマンド

resize2fsコマンドはext2~ext4ファイルシステムの場合ファイルシステムを広げるコマンド。
xfs_growfsコマンドはXFSの場合にファイルシステムを広げるコマンド。

e2fsck -f /dev/group1/lv1
resize2fs /dev/group1/lv1

lvremoveコマンド

論理ボリュームを削除するコマンド。

lvremove [論理ボリューム]

スナップショット機能

スナップショット機能を使用するとファイルシステムをマウントせずにバックアップすることができる
具体的にはスナップショットの作成ではファイルシステムを書き込み禁止やアンマウントせずにバックアップができる。

スナップショットをsnap0という名前でとる例

lvcreate -s -L 100M -n snap0 /dev/group1/lv1
dump 0uf /dev/st0 /dev/group1/snap0

スナップショットの特性上、スナップショットの作成後にファイルシステムに変更が加われば加わるほどスナップショット領域は大きくなる。
そのためバックアップ取得後は、スナップショットを削除したほうが良い。

5.2.4. LVMの関連コマンド

物理ボリューム関連コマンド

コマンド説明
pvcreatePVの作成
pvdisplayPVの情報の表示
pvmovePV内のPEを移動
pvremovePVの削除
pvscanPVの検索
pvsPVの情報出力

ボリュームグループ関連のコマンド

コマンド説明
vgcreateVGを作成
vgchangeVGの属性を変更
vgdisplayVGの情報を表示
vgextendVGの拡張(PVの追加)
vgreduceVGの縮小(PVの削除)
vgremoveVGの削除
vgimportVGのインポート
vgexportVGのエクスポート
vgmerge2つのVGを統合する
vgrenameVG名の変更
vgscanVGの検索
vgsVGの情報表示

論理ボリューム関連のコマンド

コマンド説明
lvcreateLVの作成
lvdisplayLVの情報表示
lvextendLVの拡張(PEの追加)
lvreduceLVの縮小(PEの削除)
lvremoveLVを削除
lvrenameLV名を変更
lvscanLVの検索
lvsLVの情報表示