前書き
LVM、または論理ボリューム管理は、ユーザーがコンポーネントストレージデバイスの物理レイアウトをプールおよび抽象化して、より簡単で柔軟な管理を行えるようにするストレージデバイス管理テクノロジです。 デバイスマッパーLinuxカーネルフレームワークを利用して、現在の反復であるLVM2を使用して、既存のストレージデバイスをグループに集め、必要に応じて結合スペースから論理ユニットを割り当てることができます。
LVMの主な利点は、抽象化、柔軟性、および制御の向上です。 論理ボリュームには、「データベース」や「ルートバックアップ」などの意味のある名前を付けることができます。 スペース要件の変化に応じてボリュームのサイズを動的に変更し、実行中のシステム上のプール内の物理デバイス間で移行したり、簡単にエクスポートしたりできます。 LVMは、スナップショット、ストライピング、ミラーリングなどの高度な機能も提供します。
このガイドでは、LVMがどのように機能するかを簡単に説明し、すぐに起動して実行するために必要な基本的なコマンドを示します。
LVMのアーキテクチャと用語
実際のLVM管理コマンドに飛び込む前に、LVMがストレージデバイスを整理する方法と、LVMが使用する用語のいくつかを基本的に理解することが重要です。
LVMストレージ管理構造
LVMは、物理ストレージデバイスの上に抽象化を階層化することにより機能します。 最も基本的なものから始めて、LVMが使用する基本的なレイヤーは次のとおりです。
-
Physical Volumes:
-
LVM utility prefix:
pv...
-
Description:物理ブロックデバイスまたは他のディスクのようなデバイス(たとえば、RAIDアレイなどのデバイスマッパーによって作成された他のデバイス)は、より高いレベルの抽象化のための原材料としてLVMによって使用されます。 物理ボリュームは通常のストレージデバイスです。 LVMは、管理用に割り当てるためにデバイスにヘッダーを書き込みます。
-
-
Volume Groups:
-
LVM utility prefix:
vg...
-
Description:LVMは、物理ボリュームをボリュームグループと呼ばれるストレージプールに結合します。 ボリュームグループは、基礎となるデバイスの特性を抽象化し、コンポーネントの物理ボリュームのストレージ容量を組み合わせた統合論理デバイスとして機能します。
-
-
Logical Volumes:
-
LVM utility prefix:
lv...
(一般的なLVMユーティリティはlvm...
で始まる場合があります) -
Description:ボリュームグループは、任意の数の論理ボリュームにスライスできます。 論理ボリュームは、物理ディスク上のパーティションと機能的には同等ですが、はるかに柔軟性があります。 論理ボリュームは、ユーザーとアプリケーションが対話する主要なコンポーネントです。
-
要約すると、LVMを使用して物理ボリュームをボリュームグループに結合し、システムで使用可能なストレージスペースを統合できます。 その後、管理者は、ボリュームグループを任意の論理ボリュームにセグメント化して、柔軟なパーティションとして機能させることができます。
エクステントとは何ですか?
ボリュームグループ内の各ボリュームは、extentsと呼ばれる小さな固定サイズのチャンクにセグメント化されます。 エクステントのサイズはボリュームグループによって決定されます(グループ内のすべてのボリュームは同じエクステントサイズに適合します)。
物理ボリュームのエクステントはphysical extentsと呼ばれ、論理ボリュームのエクステントはlogical extentsと呼ばれます。 論理ボリュームは、LVMが論理エクステントと物理エクステントの間で維持する単なるマッピングです。 この関係のため、エクステントサイズは、LVMによって割り当てられるスペースの最小量を表します。
エクステントは、LVMの柔軟性とパワーの多くの背後にあります。 LVMによって統合デバイスとして提示される論理エクステントは、連続した物理エクステントにマッピングする必要はありません。 LVMは、ユーザーを中断することなく、論理ボリュームを構成する物理エクステントをコピーおよび再編成できます。 論理ボリュームは、ボリュームにエクステントを追加または削除するだけで簡単に拡張または縮小できます。
シンプルなユースケース
LVMが使用する用語と構造のいくつかに精通したので、LVMを使用するいくつかの一般的な方法を探ることができます。 まず、2つの物理ディスクを使用して4つの論理ボリュームを形成する基本手順を説明します。
物理デバイスを物理ボリュームとしてマークする
最初のステップは、LVMが表示および管理できるブロックデバイスのシステムをスキャンすることです。 これを行うには、次のように入力します。
sudo lvmdiskscan
出力には、LVMが対話できるすべての利用可能なブロックデバイスが表示されます。
Output /dev/ram0 [ 64.00 MiB]
/dev/sda [ 200.00 GiB]
/dev/ram1 [ 64.00 MiB]
. . .
/dev/ram15 [ 64.00 MiB]
/dev/sdb [ 100.00 GiB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
上記の出力から、現在2つのディスクと17のパーティションがあることがわかります。 パーティションは主に/dev/ram*
パーティションであり、パフォーマンス向上のためにシステムをRam diskとして使用します。 この例のディスクは、200Gのスペースがある/dev/sda
と100Gのある/dev/sdb
です。
[.warning]#Warning:LVMで使用する予定のデバイスに、重要なデータが既に書き込まれていないことを再確認してください。 LVM内でこれらのデバイスを使用すると、現在の内容が上書きされます。 サーバーにすでに重要なデータがある場合は、続行する前にバックアップを作成してください。
#
使用する物理デバイスがわかったので、pvcreate
コマンドを使用してそれらをLVM内の物理ボリュームとしてマークできます。
sudo pvcreate /dev/sda /dev/sdb
Output Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
これにより、デバイスにLVMヘッダーが書き込まれ、デバイスをボリュームグループに追加する準備ができたことを示します。
次のように入力して、LVMが物理ボリュームを登録したことをすばやく確認できます。
sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
ご覧のとおり、両方のデバイスは、物理ボリュームを表すPV
列の下にあります。
物理ボリュームをボリュームグループに追加する
デバイスから物理ボリュームを作成したので、ボリュームグループを作成できます。 ボリュームグループの名前を選択する必要がありますが、これは一般的な名前のままにします。 ほとんどの場合、割り当ての柔軟性を最大限に高めるために、システムごとに1つのボリュームグループしかありません。 簡単にするために、ボリュームグループをLVMVolGroup
と呼びます。
ボリュームグループを作成し、1つのコマンドで両方の物理ボリュームを追加するには、次のように入力します。
sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output Volume group "LVMVolGroup" successfully created
pvs
の出力を再度確認すると、物理ボリュームが新しいボリュームグループに関連付けられていることがわかります。
sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g
/dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g
次のように入力すると、ボリュームグループ自体の簡単な概要を確認できます。
sudo vgs
Output VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
ご覧のとおり、ボリュームグループには現在2つの物理ボリュームがあり、論理ボリュームはありません。また、基盤となるデバイスの合計容量があります。
ボリュームグループプールから論理ボリュームを作成する
ボリュームグループが使用可能になったので、論理ボリュームを割り当てることができるプールとして使用できます。 従来のパーティショニングとは異なり、論理ボリュームを使用する場合、LVMはこれをマップして処理するため、ボリュームのレイアウトを知る必要はありません。 ボリュームのサイズと名前を指定するだけです。
ボリュームグループから4つの個別の論理ボリュームを作成します。
-
10G「プロジェクト」ボリューム
-
Webコンテンツ用の5G「www」ボリューム
-
データベース用の20G「db」ボリューム
-
残りのスペースを埋める「ワークスペース」ボリューム
論理ボリュームを作成するには、lvcreate
コマンドを使用します。 プル元のボリュームグループを渡す必要があり、-n
オプションを使用して論理ボリュームに名前を付けることができます。 サイズを直接指定するには、-L
オプションを使用できます。 代わりに、エクステントの数でサイズを指定する場合は、-l
オプションを使用できます。
次のように、-L
オプションを使用して最初の3つの論理ボリュームを作成できます。
sudo lvcreate -L 10G -n projects LVMVolGroup
sudo lvcreate -L 5G -n www LVMVolGroup
sudo lvcreate -L 20G -n db LVMVolGroup
Output Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.
vgs
コマンドからカスタム出力を選択すると、論理ボリュームとボリュームグループとの関係を確認できます。
sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db
論理ボリュームに割り当てられたスペースを確認できるように、出力の最後の2列を追加しました。
これで、エクステントで機能する-l
フラグを使用して、ボリュームグループ内の残りのスペースを「ワークスペース」ボリュームに割り当てることができます。 私たちの意図をよりよく伝えるために、パーセンテージと単位を提供することもできます。 この場合、残りの空き領域を割り当てて、100%FREE
を渡すことができるようにします。
sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
ボリュームグループ情報を再確認すると、利用可能なスペースがすべて使い果たされていることがわかります。
sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects
LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www
LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db
LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace
ご覧のとおり、「ワークスペース」ボリュームが作成され、「LVMVolGroup」ボリュームグループが完全に割り当てられています。
論理ボリュームのフォーマットとマウント
論理ボリュームができたので、通常のブロックデバイスとして使用できます。
論理デバイスは、他のストレージデバイスと同様に、/dev
ディレクトリ内で使用できます。 次の2つの場所からアクセスできます。
-
/dev/volume_group_name/logical_volume_name
-
/dev/mapper/volume_group_name-logical_volume_name
したがって、4つの論理ボリュームをExt4ファイルシステムでフォーマットするには、次のように入力できます。
sudo mkfs.ext4 /dev/LVMVolGroup/projects
sudo mkfs.ext4 /dev/LVMVolGroup/www
sudo mkfs.ext4 /dev/LVMVolGroup/db
sudo mkfs.ext4 /dev/LVMVolGroup/workspace
または、次のように入力できます。
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
フォーマット後、マウントポイントを作成できます。
sudo mkdir -p /mnt/{projects,www,db,workspace}
その後、論理ボリュームを適切な場所にマウントできます。
sudo mount /dev/LVMVolGroup/projects /mnt/projects
sudo mount /dev/LVMVolGroup/www /mnt/www
sudo mount /dev/LVMVolGroup/db /mnt/db
sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
マウントを永続的にするには、通常のブロックデバイスの場合と同じように、マウントを/etc/fstab
に追加します。
sudo nano /etc/fstab
/etc/fstab
. . .
/dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0
/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0
/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0
/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0
これで、オペレーティングシステムはブート時にLVM論理ボリュームを自動的にマウントするはずです。
結論
この時点までに、LVMが柔軟なストレージシステムを作成するために管理するさまざまなコンポーネントを十分に理解できることを願っています。 また、LVMセットアップでストレージデバイスを起動して実行する方法の基本的な理解も必要です。
このガイドでは、LVMがLinuxシステムの管理者に提供するパワーと制御について簡単に触れました。 LVMの操作の詳細については、guide to using LVM with Ubuntu 16.04を確認してください。