導入
LVMまたは論理ボリューム管理は、ユーザーがコンポーネントストレージデバイスの物理的レイアウトをプールして抽象化し、柔軟な管理を可能にするストレージデバイス管理技術です。現行のバージョンであるLVM2は、デバイスマッパー Linuxカーネルフレームワークを利用して、既存のストレージデバイスをグループにまとめ、必要に応じて結合された空間から論理ユニットを割り当てることができます。
LVMの主な利点は、抽象化、柔軟性、および制御の向上です。論理ボリュームは「データベース」や「ルートバックアップ」のような意味のある名前を持つことができます。また、空間要件が変化するにつれてボリュームのサイズを動的に変更したり、プール内の物理デバイス間でシステムが稼働している間やエクスポート時に移行したりすることができます。LVMは、スナップショット、ストライピング、ミラーリングといった高度な機能も提供します。
このガイドでは、LVMの仕組みを学び、裸のメタルマシンで迅速に稼働するための基本コマンドを練習します。
LVMアーキテクチャと用語
LVM管理コマンドに入る前に、LVMがストレージデバイスをどのように整理し、どのような用語を使用するかの基本的な理解が重要です。
LVMストレージ管理構造
LVMは物理ストレージデバイスの上に抽象化を積み重ねることで機能します。LVMが使用する基本的なレイヤーは、最も原始的なものから始まります:
-
物理ボリューム: 物理ボリュームのLVMユーティリティ接頭辞は
pv...
です。これらは物理的なブロックデバイスまたは他のディスクのようなデバイス(たとえば、デバイスマッパーによって作成された他のデバイス、RAIDアレイのようなもの)であり、LVMによってより高い抽象化レベルのための生の建材として使用されます。物理ボリュームは通常のストレージデバイスです。LVMは管理のためにデバイスにヘッダーを書き込みます。 -
ボリュームグループ: ボリュームグループのLVMユーティリティ接頭辞は
vg...
です。
LVMは物理ボリュームをボリュームグループとして組み合わせます。ボリュームグループは下位デバイスの特性を抽象化し、統合された論理デバイスとして機能し、コンポーネント物理ボリュームの組み合わせストレージ容量を持ちます。 -
論理ボリューム:論理ボリュームに対するLVMユーティリティのプレフィックスは
lv...
であり、汎用のLVMユーティリティはlvm...
で始まる場合もあります。ボリュームグループは任意の数の論理ボリュームに分割することができます。論理ボリュームは物理ディスクのパーティションと機能的に同等ですが、はるかに柔軟性があります。論理ボリュームはユーザーやアプリケーションが主に操作するコンポーネントです。
LVMを使用すると、物理ボリュームをボリュームグループに結合してシステム上で利用可能なストレージスペースを統一することができます。その後、管理者はボリュームグループを任意の論理ボリュームに分割することができます。これにより、柔軟なパーティションのように機能します。
エクステントの理解
各ボリュームグループ内の各ボリュームは、extentsと呼ばれる小さな固定サイズのチャンクに分割されます。extentsのサイズはボリュームグループによって決定されます。グループ内のすべてのボリュームは同じextentsサイズに準拠しています。
物理ボリューム上のextentsは物理的extentsと呼ばれ、論理ボリューム上のextentsは論理的extentsと呼ばれます。論理ボリュームは、論理的extentsと物理的extentsの間のマッピングをLVMが維持するものです。この関係のため、extentsのサイズはLVMによって割り当てることができる最小のスペースを表します。
Extentsは、LVMの柔軟性とパワーの大部分を支えています。LVMによって統一されたデバイスとして表示される論理extentsは、連続した物理extentsにマップする必要はありません。LVMは、論理ボリュームを構成する物理的extentsをコピーおよび再構成することができ、ユーザーには何の中断も発生しません。論理ボリュームは、extentsを追加することによって拡張したり、extentsを削除することによって縮小したりすることもできます。
一般的な使用例
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のパーティションがあることに注目してください。パーティションは主にシステムでパフォーマンスの向上のために使用されるRAMディスクとして使用される/dev/ram*
パーティションです。この例のディスクは、200Gのスペースを持つ/dev/sda
と、100Gを持つ/dev/sdb
です。
警告: 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が物理ボリュームを登録したことを確認するには、pvs
を実行します:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
PV
列の下には、両方のデバイスが存在することに注意してください。この列は物理ボリュームを表しています。
物理ボリュームをボリュームグループに追加する
デバイスから物理ボリュームを作成したので、ボリュームグループを作成できます。ほとんどの場合、最大の柔軟性を確保するためにシステムごとに単一のボリュームグループがあります。以下のボリュームグループの例は、LVMVolGroup
という名前です。ボリュームグループの名前は任意に設定できます。
ボリュームグループを作成し、両方の物理ボリュームを追加するには、次のコマンドを実行してください:
- 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
vgs
を使用してボリュームグループの短い概要を表示します:
- sudo vgs
Output VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
ボリュームグループには現在、2つの物理ボリューム、0個の論理ボリュームがあり、その下にあるデバイスの容量が合計されています。
ボリュームグループプールから論理ボリュームを作成する
もしボリュームグループが利用可能な場合、それをプールとして使用して論理ボリュームを割り当てることができます。従来のパーティションとは異なり、論理ボリュームを使用すると、ボリュームのレイアウトを把握する必要がなく、LVMがこれをマッピングおよび処理してくれます。ボリュームのサイズと名前だけを指定すれば十分です。
以下の例では、ボリュームグループから4つの異なる論理ボリュームを作成します:
- 10Gの「projects」ボリューム
- 5Gのウェブコンテンツ用「www」ボリューム
- 20Gのデータベース用「db」ボリューム
- 残りのスペースを埋める「workspace」ボリューム
論理ボリュームを作成するには、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列を追加しました。それは論理ボリュームにどれだけのスペースが割り当てられているかを示しています。
今、"workspace"
ボリュームに残りのスペースを -l
フラグを使用して割り当てることができます。これは拡張で動作します。また、意図をより良く伝えるためにパーセンテージと単位を指定することもできます。この例では、残りの空きスペースを割り当てるために 100%FREE
を渡すことができます:
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
カスタムの vgs
コマンドでボリュームグループ情報を確認すると、利用可能なスペースがすべて使用されていることがわかります:
- 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つの論理ボリュームをフォーマットするには、次のコマンドを実行します:
- 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
ファイルに追加してください。次の例ではnano
を使用しています:
- sudo nano /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
ファイルを編集した後、保存して終了します。 nano
を使用している場合は、CTRL+c
を押して、y
、次にENTER
を押します。
オペレーティングシステムは、今後、起動時にLVMの論理ボリュームを自動的にマウントするはずです。
結論
これで、LVMが管理するさまざまなコンポーネントと、ストレージデバイスをLVMセットアップで動作させる方法について理解できるようになりました。
LVMの操作方法について詳しくは、当社のUbuntu 18.04でLVMを使用するガイドをご覧ください。