5つのコマンド実行でLVMの論理ボリュームを作成できます。
その作成方法のポイントと注意事項を解説します。
■LVMの論理ボリューム作成の5ステップ(コマンド)は以下になります。
- PV(Physical Volume)の作成
↓ - VG(Volume Group)の作成
↓ - LV(Logical Volume)の作成
↓ - ファイルシステムの作成(mkfs.xfs)
↓ - ディスクのマウント
LVMの論理ボリューム作成で利用する5つのコマンド
1.PV(Physical Volume)の作成
pvcreate /dev/sdb
新規デバイス(/dev/sdb)であること
/dev/sdb:任意のデバイス名を指定
2.VG(Volume Group)の作成
vgcreate vg-sdb /dev/sdb
vg-sdb:VG名を任意で指定(VG名は自分で決める)
3.LV(Logical Volume)の作成
lvcreate -n lv-sdb -l 100%FREE vg-sdb
lv-sdb:「-n」オプションでLV名を任意で指定(LV名は自分で決める)
4.ファイルシステムの作成(mkfs.xfs)
mkfs.xfs /dev/vg-sdb/lv-sdb
/dev/vg-sdb/lv-sdb:「lvdisplay」コマンド実行時の「LV Path」名を指定
※ext4でフォーマットしたい場合は「mkfs.ext4」となります。
5.ディスクのマウント
mkdir /lv-data
/lv-data:マウントするディレクトリを任意で作成(ディレクトリは自分で決める)
mount /dev/vg-sdb/lv-sdb /lv-data/
※適宜、起動時にマウントするように設定したい場合は、「/etc/fstab」へマウント設定してください。
LVMで論理ボリューム作成の解説
5コマンド(ステップ)実行時のポイントを踏まえて細かく解説します。
LVM設定するデバイスが単一(/dev/sdb)と複数(/dev/sdbと/dev/sdc)ある場合と比較して解説します。
※複数デバイスの「/etc/sdc」はLVを2つに分割したパターンとなっております。
解説1.PV(Physical Volume)の作成
■ポイント
- パーティションを作成しない。
※fdiskコマンドで「/dev/sdb1」「/dev/sdc1」とパーティション作成をしない - pvcreateコマンドは、単一ディスク指定でも複数ディスク指定でも実行結果は同じになります。
※まとめて実行するか個別に実行するかの違いだけです。
単一デバイスの場合
■デバイスを確認
fdisk -l /dev/sdb
■/dev/sdbデバイス
pvcreate /dev/sdb
pvdisplay
複数デバイスの場合
■デバイスを確認
fdisk -l /dev/sdb /dev/sdc
■/dev/sdbと/dev/sdc※まとめて登録可能
pvcreate /dev/sdb /dev/sdc
pvdisplay
解説2.VG(Volume Group)の作成
■ポイント
- 1デバイスごとにVGを作成します。
※pvcreateで作成した複数のデバイスをまとめて1つのVGとして登録しない。 - VG名はデバイス名(sdb)をつけない名前をおススメします。
詳しくは下記の「VG名とLV名に仮想デバイス名を使用しない方がよい理由」を参照してください。
※今回は、作成方法を分かりやすく解説するためにVG名にデバイス名(sdb)を使用しています。
単一デバイスの場合
■/dev/sdbデバイス
vgcreate vg-sdb /dev/sdb
vgdisplay
複数デバイスの場合
■/dev/sdbデバイス※1デバイス毎に設定
vgcreate vg-sdb /dev/sdb
■/dev/sdcデバイス※1デバイス毎に設定
vgcreate vg-sdc /dev/sdc
vgdisplay
■おススメしない設定
pvcreate /dev/sdb /dev/sdc
vgcreate vg-sdb-sdc /dev/sdb /dev/sdc
「vgcreate vg-sdb-sdc /dev/sdb /dev/sdc」と実行して、2つのデバイスを1つのVGで登録した場合、「/dev/sdb」と「/dev/sdc」の2つのデバイス内で1つのテキストファイルやアプリケーションファイルなどが管理されることになります。
2つのデバイスにファイルがまたがって保管されるため、移行や障害が発生した場合に対応が難しくなります。また、デバイスが増えると管理の手間も増えます。
これらの事からデバイスを追加してもVGで複数のデバイスを統合するのは極力さけて、1デバイスごとにVGを分けて作成することを推奨いたします。
解説3.LV(Logical Volume)の作成
■ポイント
- マウントポイントを分けたい場合はLV作成時に行います。
※マウントポイントを分ける理由は他のマウントポイントの容量に干渉しないためなので、LV作成時に実現できます。 - LVの作成でデバイスのマッパー(mapper)が作成されます。
これは、LVをOS上で管理するために作成されたデバイス名です。
「LV Path(/dev/vg-sdb/lv-sdb) 」= 「デバイスのマッパー(/dev/mapper/vg--sdb-lv--sdb)」
※「fdisk -l」を実行するとデバイスのマッパーが表示され、LV Pathでは表示されません。 - LV名はデバイス名(sdb)をつけない名前をおススメします。
詳しくは下記の「VG名とLV名に仮想デバイス名を使用しない方がよい理由」を参照してください。
※今回は、作成方法を分かりやすく解説するためにLV名にデバイス名(sdb)を使用しています。
単一デバイスの場合
■/dev/sdbデバイス※1つのLVを設定
lvcreate -n lv-sdb -l 100%FREE vg-sdb
lvdisplay
複数デバイスの場合
■/dev/sdbデバイス※1つのLVを設定
lvcreate -n lv-sdb -l 100%FREE vg-sdb
■/dev/sdcデバイス※2つLVで分割
lvcreate -n lv-sdc01 -L 100M vg-sdc
lvcreate -n lv-sdc02 -L 900M vg-sdc
lvdisplay
「-l 100%FREE」:空き容量をすべて割り当てる場合に指定します。
「-L 100M」:割り当てたい容量を指定します。単位は「M(メガ)、G(ギガ)、T(テラ)」などが利用可能です。
下記、画像より「/dev/vg-sdb/lv-sdb」と「/dev/mapper/vg--sdb-lv--sdb」が同じデバイスを指示していることがわかります。
LVを作成すると勝手にデバイスのマッパー(mapper)が作成されます。
これは、LVをOS上で管理するために作成されたデバイス名だというぐらいの解釈で構いません。
どちらのデバイス名を利用しても問題ありません。
作成されたデバイスのマッパー(mapper)は「fdisk -l」で確認できます。
解説4.ファイルシステムの作成(mkfs.xfs)
■ポイント
- 主流である「mkfs.xfs」で実行します。※適宜、「mkfs.ext4」などでも可能
- 「LV Path」と「デバイスのマッパー(mapper)」どちらでmkfsしても問題ありません。
単一デバイスの場合
■/dev/sdbデバイス
mkfs.xfs /dev/vg-sdb/lv-sdb
複数デバイスの場合
■/dev/sdbデバイス
mkfs.xfs /dev/mapper/vg--sdb-lv--sdb
■/dev/sdcデバイス
mkfs.xfs /dev/mapper/vg--sdc-lv--sdc01
mkfs.xfs /dev/vg-sdc/lv-sdc02
解説5.ディスクのマウント
■ポイント
- 「LV Path」と「デバイスのマッパー(mapper)」どちらでmountしても問題ありません
- /etc/fstabでmount設定する時に利用するUUIDは「blkid |grep mapper」コマンドを実行して確認してください。
※lvdisplayで確認できる「LV UUID」とは違いますので注意ください。
単一デバイスの場合
mkdir /lv-data
■/dev/sdbデバイス
mount /dev/vg-sdb/lv-sdb /lv-data
df -h
複数デバイスの場合
mkdir /lv-sdb-data
mkdir /lv-sdc-data01
mkdir /lv-sdc-data02
■/dev/sdbデバイス
mount /dev/mapper/vg--sdb-lv--sdb /lv-sdb-data
■/dev/sdcデバイス
mount /dev/mapper/vg--sdc-lv--sdc01 /lv-sdc-data01
mount /dev/vg-sdc/lv-sdc02 /lv-sdc-data02
df -h
「blkid | grep mapper」コマンドを実行してUUIDを確認してマウントする方法をおススメします。
下記の画像でもわかりますが、LVMで作成した論理ボリュームは、「LV Path」名や「デバイスのマッパー(mapper)」名と「UUID」以外の方法でも/etc/fstabファイルに設定できます。
LVMで設定した論理ボリュームの場合、どの方法で/etc/fstabファイルに設定しても問題ありません。
LVM設定ではない「/dev/sdb1」とか「/dev/sdc1」などの物理デバイスをマウントするときは、必ず「UUID」を指定してマウントします。
それは、デバイスを「UUID」以外の方法で/etc/fsatbファイルに設定するとデバイスがテレコになって意図しないマウントになってしまうことがあるからです。
これを回避するため、どのようなケースであっても「UUIDで設定する」と覚えておけば、間違いが起こらないので「UUID」で設定することをおススメしています。
追加解説
単一のデバイス(ディスク)で論理ボリュームを作成する理由
LVMとは「Logical Volume Manager」の略で物理的なディスクを論理的に扱い
複数のデバイス(ディスク)を単一の論理ボリュームとして設定して管理できる機能です。
とありますが、単一のデバイス(ディスク)で論理ボリュームを作成することをおススメします。
近年、仮想サーバを構築して仮想ディスクを利用することが多いので、「/dev/sdc」というように仮想デバイスを増強してディスク容量を増やすよりも、仮想ディスクでは「/dev/sdb」の容量を拡張する方が簡単に行えるので、仮想デバイス(「/dev/sdc」)を増やして増強する必要はなくなりました。
複数の仮想デバイスを単一の論理ボリュームとして扱うと、「/dev/sdb」と「/dev/sdc」のデバイスがまたがった構成となりデータ移行やディスクに問題が起こった時に対処が難しくなるので、1つのデバイスをLVMで論理ボリュームを作成すると管理面を考えても非常に便利です。
どうしても、マウントポイントを分けて管理したい場合はLV(Logical Volume)を作成するときに設定してください。
VG名とLV名に仮想デバイス名を使用しない方がよい理由
今回、VG名に「vg-sdb」とLV名に「lv-sdb」とデバイス名を使用しましたが、仮想ディスクの縮小・削除すなわち、デバイス(/dev/sdb)の追加・削除を繰返すことが予想される場合、VG名とLV名にデバイス名(sdb)を使用することはおススメできません。
下記のように、「仮想ディスクB」を削除すると「仮想ディスクC」は、サーバ上で「/dev/sdc」と認識されず「/dev/sdb」と認識され仮想デバイス名がポート番号に関係なく詰められてしまいます。
※再起動後に反映されます。
但し、サーバ上のディスク構成が変更されない、追加されるだけなら、VG名とLV名にデバイス名を利用しても構いません。
■VG名・LV名にデバイス名を利用し「仮想ディスクB」の削除が発生した場合
ーー作業前ーー
ポート NO | ファイル名 | 仮想デバイス名 | (VG名)・(LV名) |
0 | 仮想ディスクA(diskA.vdi) | /dev/sda | - |
1 | 仮想ディスクB(diskB.vdi) | /dev/sdb | (vg-sdb)・(lv-sdb) |
2 | 仮想ディスクC(diskC.vdi) | /dev/sdc | (vg-sdc)・(lv-sdc) |
↓
ーー作業後ーー
ポート NO | ファイル名 | 仮想デバイス名 | (VG名)・(LV名) |
0 | 仮想ディスクA(diskA.vdi) | /dev/sda | - |
2 | 仮想ディスクC(diskC.vdi) | /dev/sdb | (vg-sdc)・(lv-sdc) |
となり、「仮想デバイス名(/dev/sdb)」と「VG名とLV名で用いたデバイス名(sdc)」が異なることになります。
まとめ
- デバイスにパーティションを作成しない
- 複数あるデバイスをVG設定でまとめない
- VG名、LV名は汎用的な名前にしてデバイス名などをつけない
- ディスク容量を分割したい場合(マウントポイントを分けたい場合)はLV設定で分割する
- /etc/fstabでマウントするときは「UUID」で指定する
コメント