【Linux】LVMで論理ボリューム作成 -5コマンドで設定できる

【Linux】LVMで論理ボリューム作成-5コマンドで設定 Linuxサーバ

5つのコマンド実行でLVMの論理ボリュームを作成できます。
その作成方法のポイントと注意事項を解説します。

LVMの論理ボリューム作成の5ステップ(コマンド)は以下になります。

  1. PV(Physical Volume)の作成
  2. VG(Volume Group)の作成 
  3. LV(Logical Volume)の作成 
  4. ファイルシステムの作成(mkfs.xfs)
  5. ディスクのマウント
論理ボリューム作成の5ステップイメージ図
論理ボリューム作成の5ステップイメージ図

スポンサーリンク

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つに分割したパターンとなっております。

LVM設定するデバイスが単一(/dev/sdb)と複数(/dev/sdbと/dev/sdc)


解説1.PV(Physical Volume)の作成

■ポイント

  1. パーティションを作成しない。
    ※fdiskコマンドで「/dev/sdb1」「/dev/sdc1」とパーティション作成をしない


  2. pvcreateコマンドは、単一ディスク指定でも複数ディスク指定でも実行結果は同じになります。
    ※まとめて実行するか個別に実行するかの違いだけです。


単一デバイスの場合

■デバイスを確認

fdisk -l /dev/sdb


■/dev/sdbデバイス

pvcreate /dev/sdb
pvdisplay
単一デバイスのPV(Physical Volume)を作成

複数デバイスの場合

■デバイスを確認

fdisk -l /dev/sdb /dev/sdc


■/dev/sdbと/dev/sdc※まとめて登録可能

pvcreate /dev/sdb  /dev/sdc
pvdisplay
複数デバイスのPV(Physical Volume)を作成


解説2.VG(Volume Group)の作成

■ポイント

  1. 1デバイスごとにVGを作成します。
    ※pvcreateで作成した複数のデバイスをまとめて1つのVGとして登録しない。


  2. VG名はデバイス名(sdb)をつけない名前をおススメします。
    詳しくは下記の「VG名とLV名に仮想デバイス名を使用しない方がよい理由」を参照してください。

    ※今回は、作成方法を分かりやすく解説するためにVG名にデバイス名(sdb)を使用しています。

単一デバイスの場合

■/dev/sdbデバイス

vgcreate  vg-sdb /dev/sdb
vgdisplay


単一デバイスのVG(Volume Group)を作成

複数デバイスの場合

■/dev/sdbデバイス※1デバイス毎に設定

vgcreate  vg-sdb /dev/sdb



■/dev/sdcデバイス※1デバイス毎に設定

vgcreate  vg-sdc /dev/sdc
vgdisplay


複数デバイスのVG(Volume Group)を作成

■おススメしない設定
pvcreate /dev/sdb /dev/sdc
vgcreate vg-sdb-sdc /dev/sdb /dev/sdc


複数のデバイスを1つのVGで登録する設定は極力しない

「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)の作成

■ポイント

  1. マウントポイントを分けたい場合はLV作成時に行います。
    ※マウントポイントを分ける理由は他のマウントポイントの容量に干渉しないためなので、LV作成時に実現できます。


  2. LVの作成でデバイスのマッパー(mapper)が作成されます。
    これは、LVをOS上で管理するために作成されたデバイス名です。

    「LV Path(/dev/vg-sdb/lv-sdb) 」=  「デバイスのマッパー(/dev/mapper/vg--sdb-lv--sdb)」
    ※「fdisk -l」を実行するとデバイスのマッパーが表示され、LV Pathでは表示されません。

  3. LV名はデバイス名(sdb)をつけない名前をおススメします。
    詳しくは下記の「VG名とLV名に仮想デバイス名を使用しない方がよい理由」を参照してください。

    ※今回は、作成方法を分かりやすく解説するためにLV名にデバイス名(sdb)を使用しています。

単一デバイスの場合

■/dev/sdbデバイス※1つのLVを設定

lvcreate  -n  lv-sdb -l 100%FREE  vg-sdb
lvdisplay






単一デバイスのLV(Logical Volume)の作成

複数デバイスの場合

■/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
複数デバイスのLV(Logical Volume)の作成

「-l 100%FREE」:空き容量をすべて割り当てる場合に指定します。

「-L 100M」:割り当てたい容量を指定します。単位は「M(メガ)、G(ギガ)、T(テラ)」などが利用可能です。



LVPathとデバイスのマッパー(mapper)が同じである根拠

下記、画像より「/dev/vg-sdb/lv-sdb」と「/dev/mapper/vg--sdb-lv--sdb」が同じデバイスを指示していることがわかります。

LVを作成すると勝手にデバイスのマッパー(mapper)が作成されます。
これは、LVをOS上で管理するために作成されたデバイス名だというぐらいの解釈で構いません。
どちらのデバイス名を利用しても問題ありません。

作成されたデバイスのマッパー(mapper)は「fdisk -l」で確認できます。

「LV Path」と「デバイスのマッパー(mapper)」が同じである根拠


解説4.ファイルシステムの作成(mkfs.xfs)

■ポイント

  1. 主流である「mkfs.xfs」で実行します。※適宜、「mkfs.ext4」などでも可能

  2. 「LV Path」と「デバイスのマッパー(mapper)」どちらでmkfsしても問題ありません。

単一デバイスの場合

■/dev/sdbデバイス

mkfs.xfs /dev/vg-sdb/lv-sdb






単一デバイスのファイルシステムの作成(mkfs.xfs)

複数デバイスの場合

■/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
複数デバイスのファイルシステムの作成(mkfs.xfs)


解説5.ディスクのマウント

■ポイント

  1. 「LV Path」と「デバイスのマッパー(mapper)」どちらでmountしても問題ありません

  2. /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
複数デバイスのディスクのマウント



LVMで作成した論理ボリュームを/etc/fstabに設定する方法

「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で作成した論理ボリュームを/etc/fstabに設定する方法



追加解説

単一のデバイス(ディスク)で論理ボリュームを作成する理由

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)
サーバのディスク構成(仮想ディスクB削除前)


ーー作業後ーー 

ポート
NO
ファイル名仮想デバイス名(VG名)・(LV名)
0仮想ディスクA(diskA.vdi)/dev/sda-
仮想ディスクC(diskC.vdi)/dev/sdb(vg-sdc)・(lv-sdc)
サーバのディスク構成(仮想ディスクB削除後)

となり、「仮想デバイス名(/dev/sdb)」と「VG名とLV名で用いたデバイス名(sdc)」が異なることになります。


まとめ

ポイント
  1. デバイスにパーティションを作成しない
  2. 複数あるデバイスをVG設定でまとめない
  3. VG名LV名は汎用的な名前にしてデバイス名などをつけない
  4. ディスク容量を分割したい場合(マウントポイントを分けたい場合)はLV設定で分割する
  5. /etc/fstabでマウントするときは「UUID」で指定する



コメント

タイトルとURLをコピーしました