序章

LVM 、または論理ボリューム管理は、ユーザーがコンポーネントストレージデバイスの物理レイアウトをプールおよび抽象化して、より簡単で柔軟な管理を行えるようにするストレージデバイス管理テクノロジーです。 デバイスマッパーのLinuxカーネルフレームワークを利用して、現在のイテレーションであるLVM2を使用して、既存のストレージデバイスをグループにまとめ、必要に応じて結合されたスペースから論理ユニットを割り当てることができます。

LVMの主な利点は、抽象化、柔軟性、および制御の向上です。 論理ボリュームには、「データベース」や「ルートバックアップ」などの意味のある名前を付けることができます。 ボリュームは、スペース要件の変更に応じて動的にサイズ変更したり、実行中のシステム上のプール内の物理デバイス間で移行したり、簡単にエクスポートしたりできます。 LVMは、スナップショット、ストライピング、ミラーリングなどの高度な機能も提供します。

このガイドでは、LVMがどのように機能するかを簡単に説明してから、すばやく起動して実行するために必要な基本的なコマンドを示します。

LVMのアーキテクチャと用語

実際のLVM管理コマンドに飛び込む前に、LVMがストレージデバイスをどのように編成するか、およびLVMが使用するいくつかの用語を基本的に理解することが重要です。

LVMストレージ管理構造

LVMは、物理ストレージデバイスの上に抽象化を階層化することで機能します。 LVMが使用する基本的なレイヤーは、最も原始的なものから始まります。

  • 物理ボリューム LVMユーティリティプレフィックス:pv..。 説明:物理ブロックデバイスまたは他のディスクのようなデバイス(たとえば、RAIDアレイなどのデバイスマッパーによって作成された他のデバイス)は、より高いレベルの抽象化のための原材料としてLVMによって使用されます。 物理ボリュームは通常のストレージデバイスです。 LVMはデバイスにヘッダーを書き込み、管理用に割り当てます。
  • ボリュームグループ LVMユーティリティプレフィックス:vg..。 説明:LVMは、物理ボリュームをボリュームグループと呼ばれるストレージプールに結合します。 ボリュームグループは、基盤となるデバイスの特性を抽象化し、コンポーネントの物理ボリュームのストレージ容量を組み合わせた統合論理デバイスとして機能します。
  • 論理ボリューム LVMユーティリティプレフィックス:lv..。 (一般的なLVMユーティリティはlvmで始まる場合があります…)説明:ボリュームグループは、任意の数の論理ボリュームにスライスできます。 論理ボリュームは、機能的には物理ディスク上のパーティションと同等ですが、はるかに柔軟性があります。 論理ボリュームは、ユーザーとアプリケーションが対話する主要なコンポーネントです。

要約すると、LVMを使用して、物理ボリュームをボリュームグループに結合し、システムで使用可能なストレージスペースを統合できます。 その後、管理者はボリュームグループを任意の論理ボリュームにセグメント化できます。論理ボリュームは柔軟なパーティションとして機能します。

エクステントとは何ですか?

ボリュームグループ内の各ボリュームは、エクステントと呼ばれる小さな固定サイズのチャンクにセグメント化されます。 エクステントのサイズは、ボリュームグループによって決定されます(グループ内のすべてのボリュームは同じエクステントサイズに準拠します)。

物理ボリュームのエクステントは物理エクステントと呼ばれ、論理ボリュームのエクステントは論理エクステントと呼ばれます。 論理ボリュームは、LVMが論理エクステントと物理エクステントの間で維持する単なるマッピングです。 この関係により、エクステントサイズは、LVMによって割り当てられるスペースの最小量を表します。

エクステントは、LVMの柔軟性とパワーの多くの背後にあります。 LVMによって統合デバイスとして提示される論理エクステントは、継続的な物理エクステントにマッピングする必要はありません。 LVMは、ユーザーを中断することなく、論理ボリュームを構成する物理エクステントをコピーして再編成できます。 論理ボリュームは、ボリュームにエクステントを追加したり、ボリュームからエクステントを削除したりするだけで、簡単に拡張または縮小することもできます。

シンプルなユースケース

LVMが使用する用語と構造のいくつかに精通しているので、LVMを使用するいくつかの一般的な方法を探ることができます。 まず、2つの物理ディスクを使用して4つの論理ボリュームを形成する基本的な手順を説明します。

物理デバイスを物理ボリュームとしてマークする

最初のステップは、LVMが認識および管理できるブロックデバイスについてシステムをスキャンすることです。 これを行うには、次のように入力します。

  1. 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ディスクとして使用します。 この例のディスクは、200Gのスペースがある/dev/sdaと、100Gの/dev/sdbです。

警告:LVMで使用する予定のデバイスに、重要なデータが既に書き込まれていないことを再確認してください。 LVM内でこれらのデバイスを使用すると、現在の内容が上書きされます。 サーバーにすでに重要なデータがある場合は、先に進む前にバックアップを作成してください。

使用する物理デバイスがわかったので、pvcreateコマンドを使用して、それらをLVM内の物理ボリュームとしてマークできます。

  1. sudo pvcreate /dev/sda /dev/sdb
Output
Physical volume "/dev/sda" successfully created Physical volume "/dev/sdb" successfully created

これにより、デバイスにLVMヘッダーが書き込まれ、デバイスをボリュームグループに追加する準備ができていることが示されます。

次のように入力することで、LVMが物理ボリュームを登録したことをすばやく確認できます。

  1. 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つのコマンドで両方の物理ボリュームを追加するには、次のように入力します。

  1. sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output
Volume group "LVMVolGroup" successfully created

pvsの出力をもう一度確認すると、物理ボリュームが新しいボリュームグループに関連付けられていることがわかります。

  1. 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

次のように入力すると、ボリュームグループ自体の簡単な要約を確認できます。

  1. 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つの論理ボリュームを次のように作成できます。

  1. sudo lvcreate -L 10G -n projects LVMVolGroup
  2. sudo lvcreate -L 5G -n www LVMVolGroup
  3. sudo lvcreate -L 20G -n db LVMVolGroup
Output
Logical volume "projects" created. Logical volume "www" created. Logical volume "db" created.

vgsコマンドからカスタム出力を選択すると、論理ボリュームとボリュームグループとの関係を確認できます。

  1. 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を渡すことができるようにします。

  1. sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output
Logical volume "workspace" created.

ボリュームグループ情報を再確認すると、使用可能なスペースがすべて使い果たされていることがわかります。

  1. 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

ご覧のとおり、「workspace」ボリュームが作成され、「LVMVolGroup」ボリュームグループが完全に割り当てられています。

論理ボリュームのフォーマットとマウント

論理ボリュームができたので、通常のブロックデバイスとして使用できます。

論理デバイスは、他のストレージデバイスと同様に、/devディレクトリ内で使用できます。 あなたは2つの場所でそれらにアクセスすることができます:

  • /dev/volume_group_name/logical_volume_name
  • /dev/mapper/volume_group_name-logical_volume_name

したがって、Ext4ファイルシステムで4つの論理ボリュームをフォーマットするには、次のように入力します。

  1. sudo mkfs.ext4 /dev/LVMVolGroup/projects
  2. sudo mkfs.ext4 /dev/LVMVolGroup/www
  3. sudo mkfs.ext4 /dev/LVMVolGroup/db
  4. sudo mkfs.ext4 /dev/LVMVolGroup/workspace

または、次のように入力できます。

  1. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
  2. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
  3. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
  4. sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace

フォーマット後、マウントポイントを作成できます。

  1. sudo mkdir -p /mnt/{projects,www,db,workspace}

次に、論理ボリュームを適切な場所にマウントできます。

  1. sudo mount /dev/LVMVolGroup/projects /mnt/projects
  2. sudo mount /dev/LVMVolGroup/www /mnt/www
  3. sudo mount /dev/LVMVolGroup/db /mnt/db
  4. sudo mount /dev/LVMVolGroup/workspace /mnt/workspace

マウントを永続的にするには、通常のブロックデバイスの場合と同じように、マウントを/etc/fstabに追加します。

  1. 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の操作の詳細については、Ubuntu16.04でLVMを使用するためのガイドを確認してください。