LVM についての覚書

以前導入したサーバで使用されており少し操作が必要になったこともありましたが、なかなか理解がしきれない部分があったので。でもって、すぐに忘れるので。

(以下の記述では触れてませんが、ファイル操作を行うときにはマウントが必要だし、パーティション等の操作を行うときはアンマウントが必要(一部マウントしたままで可能なものもあるけど)。)

LVM を使わないとき

新しく購入した HDD を使おうとするとき、接続し、うまく認識されれば(たとえば) /dev/sdc といった名前が付けられたディスクがみつかる。この /dev/sdc に対し、1つ、あるいは複数のパーティションを作成する。そうして得られたパーティション /dev/sdcX に対して ext4 あたりの好みのファイルシステムでフォーマット。

# # 適当な例
# # 動作テストも何もしてないので注意

# ls /dev/sd*
/dev/sda   /dev/sda1   /dev/sda2   /dev/sda3
/dev/sdb   /dev/sdb1   /dev/sdc

# # パーティションの作成
# fdisk /dev/sdc
(略)

# ls /dev/sd*
/dev/sda   /dev/sda1   /dev/sda2   /dev/sda3
/dev/sdb   /dev/sdb1   /dev/sdc    /dev/sdc1

# # ext4 でフォーマット
# mkfs.ext4 /dev/sdc1
(略)

このようにディスクを用意し、ディスクをパーティションに分割し、パーティションを任意のファイルシステムをフォーマットするという流れをとる。イメージとしては家(ディスク)を壁(パーティション)を区切っても、本棚(ファイルシステム)を用意しないと本(ファイル)は整理できない……みたいな感じだろうか?



パーティションとして拡張できる余裕があり、ファイルシステムが対応していれば、領域を拡張することも可能。まずパーティションを広げ、次に resize2fsファイルシステムの領域をパーティションいっぱいまで拡張する。

領域の縮小もファイルシステムが対応していれば可能で、 ext4 は対応している。まず縮小を行う前にチェック(解析?)のために fsck.ext4 を実行し、次に resize2fsファイルシステムの縮小を行い、その後パーティションの縮小という流れ。

ただし、 XFS や ZFS といったファイルシステムは縮小に対応していない。

LVM とは

複数のディスクやパーティション(PV; Phisical Volume)を、論理的(仮想的)なグループ(VG; Volume Group)としてまとめ、その中にパーティションのような領域(LV; Logical Volume)を作ることができる技術で、色々と柔軟な管理ができる。

対比としては VG ≒デバイス、 LV ≒パーティションで、 PV は VG に追加するために LVM の管理下に登録したものといった感じ?



でもって、 LV も当然ファイルシステムでフォーマットする必要がある。ここで、ファイルシステムとして縮小不可能な XFS 等を使うと、 LVM として非常に柔軟性を欠くことになり HDD の取外し等が大変なことになる。

LV の作り方

pvcreate でデバイスやパーティションを PV として登録し、 vgcreate で1つ以上の PV から VG を作る。 lvcreate で VG 上に任意サイズの LV を作る。

ファイルシステムのフォーマットも行う。

LV の拡張

pvcreate でデバイスやパーティションを PV として登録し、既に存在する VG に対し vgextend で PV を追加する。既に存在する lvextend で領域を拡張する。

ファイルシステムの拡張も行う。

PV として登録した HDD の取外し

まず VG のなかで LV に割当てていない空き領域が、取外したい PV 以上の容量あるか確認する。十分な空き容量がない場合、(可能であれば)ファイルシステムの縮小→ LV の縮小を実施するか、新たに PV を追加して VG を増やす。ここで、縮小不可能なファイルシステムを使っているとつらい。

LV を縮小させるなり VG を拡張するなりして十分な空き容量ができたら、 LV が実際に専有している PV を別の PV の変更する pvmove を使って取外したい PV から実データをなくす。その後、 vgreduce で VG から PV を取外し、 pvremove で LVM の管理下から外す。こうすることでようやく HDD の取外しができる(他のパーティションも問題なければ)。



障害が発生した場合はしょうがないが、データを保存した HDD を取外して保管といった運用が非常に難しくなる。結局、新規で構築しなおした際に、 LVM は使用しない構成に改めたのであった。