論理ボリュームマネージャー（Linux LVM）について調査してみました

[OnamaeVPS]:https://www.onamae.com/server/vps/
[CentOS]:https://www.centos.org

##はじめに
論理ボリュームについて調べてみました。
環境は [お名前.com VPS][OnamaeVPS] にインストールした [CentOS 7.4][CentOS] です。

##パーティション構成を把握する
[お名前.com VPS][OnamaeVPS] は初期状態だとストレージが２つに分割されています。
私はOS領域に６０ＧＢ、残り１４０ＧＢを `/home` にマウントする想定でストレージを再構成してからインストールしました。[CentOS 7.4][CentOS] のインストール自体は基本デフォルト構成でインストール済みです。
まずは実体把握のために `df` コマンドを実行してみます。

```
[root@localhost ~]# df
```

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/8a5317fa-6f10-4049-6bc1-33ffd0b324f5.png">|
|:-:|

`tmpfs` は一時ファイルを格納するための仕組みなので、特に気にしないことにします。
以外のデバイスとマウントポイントは以下の通り整理できます。

| デバイス | マウントポイント |
|:-:|:-:|
| /dev/mapper/centos-root | / |
| /dev/mapper/centos-home | /home |
| /dev/vda1 | /boot |

[CentOS 7.4][CentOS] をインストールしたデバイスは `/dev/vda` なので、`fdisk`コマンドで構成を確認してみます。

```
[root@localhost ~]# fdisk -l /dev/vda
```

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/72230e4f-1d4b-3d21-24b3-f00776564720.png">|
|:-:|

`/boot` にマウントしている `/dev/vda1` はbootデバイスであることが判ります。
`/dev/vda2` は、Linux LVM となっていますが、これは論理ボリュームマネージャー（LVM: Logical Volume Manager）です。
論理ボリュームマネージャーとは、論理ボリュームという単位でパーティションを扱うことで、物理的なストレージ構成を隠蔽するための仕組みです。例えば、複数の物理ストレージをまとめてひとつのボリュームグループとして定義し、それを論理ボリュームに分けて扱うことが可能です。こうすることで、物理的なストレージ構成の変更をユーザーやアプリケーションで意識する必要がなくなるので、ストレージデバイスの管理が容易となります。

`/dev/vda` の構造をもう少し詳しく調べてみました。
まずは、ボリュームグループを調査するために、`vgdisplay`コマンドを実行します。

```
[root@localhost ~]# vgdisplay
```

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/23915757-5900-7d29-6147-2ed3d5f2d45c.png">|
|:-:|

ボリュームグループは `centos` という名前で定義されていました。
次に論理ボリュームを調査するために、`lvdisplay`コマンドを実行します。

```
[root@localhost ~]# lvdisplay
```

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/142380c4-100a-90ab-6d18-d1b0a7fc92f0.png">|
|:-:|

以下の３つの論理ボリュームを確認することができました。

| 論理ボリューム名 |
|:-:|
| /dev/centos/swap |
| /dev/centos/home |
| /dev/centos/root |

デバイスとして、ボリュームグループ `centos` の配下に紐付いていることがわかります。
これらの結果から、`/dev/vda` は以下の図のように表現することができます。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/26f75980-470d-1e0e-5900-cde9d7c0e7e3.png">|
|:-:|

`/dev/vda1` は前述したとおりbootパーティションですので、論理ボリュームマネージャーではありません。
`/dev/vda2` は論理ボリュームマネージャーであり、ボリュームグループ `/dev/centos` を３つの論理ボリューム `/dev/centos/swap` `/dev/centos/root` `/dev/centos/home` に分割しています。
また、括弧内に記載の `/dev/mapper/centos-swap` `/dev/mapper/centos-root` `/dev/mapper/centos-home` は、デバイスマッパーが割り当てたデバイスであり、同じものを示しています。
同じものを示しているかは、それぞれのデバイスパスを見ればわかります。

```
[root@localhost ~]# cd /dev/centos
[root@localhost centos]# ls -la
```

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/f32147fc-587c-5f4c-bb5c-d9a975f6a8ed.png">|
|:-:|

```
[root@localhost centos]# cd /dev/mapper
[root@localhost mapper]# ls -la
```

|<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/0280de5c-6976-f98e-b51c-ef3b9de9c52a.png">|
|:-:|

デバイスマッパーは、`/dev/dm-(数字)` というカーネルが管理する便宜上のデバイスを `/dev/mapper/(マップ名)` にマッピングします。
論理ボリュームマネージャーはデバイスマッパーを利用するアプリケーションとしての位置づけなので、論理ボリュームはデバイスマッパーが形成したデバイスを示すシンボリックリンクであるというのが正しい解釈だと考えられます。（あくまで私がそのように解釈しただけですが ^^;）

##最後に
今回は論理ボリュームマネージャーについて調べてみました。特に論理ボリュームに対する利点などを追求する内容ではありませんでしたが、構造上どのように形成されているかのイメージはつかめたように感じます。
そもそもこの内容を調べたのは、残り１４０ＧＢの領域を `/home` にマウントしようと考えていたときに、ある程度 Linux のファイルシステムやストレージの扱いについて理解しておいたほうが良いのでは？と思い立ったからです。
理解しきるのは非常に難しいのでしょうが、難しい中にも少しの理解やキーワードを知る機会を得たことは非常に良かったと思います。