CentOS 7 でサーバー構築（論理ボリュームマウント編）

[MyContent1]:https://qiita.com/sigenyan/items/7aeceb8338bbecd87bb5
[MyContent2]:https://qiita.com/sigenyan/items/4b86f694cc3c6171d0d0
[MyContent3]:https://qiita.com/sigenyan/items/1e52b99fca0320951159
[MyContent4]:https://qiita.com/sigenyan/items/f975ae49941c64af4173

[MyContent103]:https://qiita.com/sigenyan/items/e67eaa065da749c04e36

[OnamaeVPS]:https://www.onamae.com/server/vps/
[CentOS]:https://www.centos.org
[CentOS-DL]:https://www.centos.org/download
[WinSCP]:https://winscp.net


<font color="DeepPink">(2020年8月改変)
本投稿は [CentOS 7.8 (2003)][CentOS] で更新しました。
</font>

##はじめに

[CentOS 7][CentOS] を [お名前.com VPS][OnamaeVPS] にインストールしたときの手順をご紹介します。
VPSプランは２ギガメモリプランです。
１２ヶ月まとめ払いならば１ギガメモリプランとさほど金額差はありませんのでおすすめです。
記事では [CentOS 7][CentOS] インストールから各種さまざまなサーバーアプリケーションのセットアップまでを複数に渡ってご紹介したいと思います。

+ [CentOS 7 でサーバー構築（インストール編）][MyContent1]
+ CentOS 7 でサーバー構築（論理ボリュームマウント編）
+ [CentOS 7 でサーバー構築（ユーザー作成～SSH開通編）][MyContent3]
+ [CentOS 7 でサーバー構築（パッケージ管理編）][MyContent4]

さて、今回は１４０Ｇのストレージを `/home` にマウントする方法をご紹介したいと思います。
一応ストレージを分けたいと考えたのは、バックアップやサーバー引っ越しの際に分けておいた方が良いような気がしたからなのですが、そもそも勉強不足でそこまで明確な理由はありません。
「別ストレージを `/home` にマウントする方法はこうだな」ぐらいに見てもらえれば良いかと思います。

ここでの作業は [CentOS 7 でサーバー構築（インストール編）][MyContent1] の最後にシリアルコンソールの設定が完了済ですので、シリアルコンソール接続で進めてまいります。
`root` ユーザーでログインして作業してください。

##ストレージ構成を把握する

[CentOS 7][CentOS] は６０ＧＢのストレージデバイスにインストールされています。ストレージ構成がどのようになっているかは別記事 [論理ボリュームマネージャー（Linux LVM）について調査してみました][MyContent103] をご覧ください。
今回は、１４０ＧＢをすべて `/home` へマウントしようとしていますが、すでに論理ボリューム `/dev/centos/home` がマウント済で１９ＧＢを使用しています。マウントを単純に変更するだけでは、元々の'/dev/centos/home' が宙に浮いてしまいますので、無駄となってしまいます。
無駄とならないように以下の手順で進めたいと思います。

　1. １４０Ｇの領域に新たな論理ボリュームを作成
　2. １４０Ｇを `/home` へマウント付け替え
　3. 論理ボリューム `/dev/centos/home` を削除

##1.１４０Ｇの領域に新たな論理ボリュームを作成
１４０Ｇの領域に論理ボリュームを作成します。
まずは、１４０Ｇの物理デバイスである `/dev/vdb` にパーティションを `fdisk` コマンドで作成します。

```
[root@localhost ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xdcadc61b.

コマンド (m でヘルプ): m
コマンドの動作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-293601279, 初期値 2048):
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-293601279, 初期値 293601279):
初期値 293601279 を使います
Partition 1 of type Linux and of size 140 GiB is set

コマンド (m でヘルプ): t
Selected partition 1
Hex code (type L to list all codes): L

 0  空              24  NEC DOS         81  Minix / 古い Li bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux スワップ  c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隠し C: ド c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 拡張領域  c7  Syrinx
 5  拡張領域        41  PPC PReP Boot   86  NTFS ボリューム da  非 FS データ
 6  FAT16           42  SFS             87  NTFS ボリューム db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux プレーン  de  Dell ユーティリ
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX ブート可能  4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 ブートマネ 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad ハ eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 拡張領域 (L 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC
11  隠し FAT12      56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq 診断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  隠し FAT16 <32M 61  SpeedStor       ab  Darwin ブート   f2  DOS セカンダリ
16  隠し FAT16      63  GNU HURD または af  HFS / HFS+      fb  VMware VMFS
17  隠し HPFS/NTFS  64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI スワップ   fd  Linux raid 自動
1b  隠し W95 FAT32  70  DiskSecure Mult bb  隠し Boot Wizar fe  LANstep
1c  隠し W95 FAT32  75  PC/IX           be  Solaris ブート  ff  BBT
1e  隠し W95 FAT16  80  古い Minix
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

コマンド (m でヘルプ): w
パーティションテーブルは変更されました！

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
[root@localhost ~]#
```

設定の流れは下記のとおりです。（基本的にすべてデフォルト）
1. `m` コマンドでコマンドのHELPが表示されます。
2. `n` コマンドで新規パーティションを作成する操作に入ります。
3. Partition typeの候補が表示されますので、`p (primary)`を選択します。
4. パーティション番号は `1` を選択します。
5. 割当領域の開始・終了セクターを入力しますが、デフォルトなのでどちらも入力せずに `Enter` してください。
6. 次に `t` コマンドでパーティションを `Linux LVM` に変更する操作に入ります。
7. Hex code での入力を指示されますが、`Linux LVM` の Hex code が不明なので、`L` を押下してリストを表示してください。
8. `8e` が `Linux LVM` を示す Hex code であることが確認できますので、`8e` を入力します。
9. 最後に `w` コマンドでパーティションテーブルに書込みが実行されるので、これで完了です。

想定した内容で作成できているか、 `fdisk` コマンドで確認します。

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

Disk /dev/vdb: 150.3 GB, 150323855360 bytes, 293601280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0xdcadc61b

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/vdb1            2048   293601279   146799616   8e  Linux LVM
[root@localhost ~]#
```

想定どおり、`/dev/vdb1` が `Linux LVM` として作成されています。
`/dev/vdb1` パーティションを物理ボリュームにします。

```
[root@localhost ~]# pvcreate /dev/vdb1
  Physical volume "/dev/vdb1" successfully created.
[root@localhost ~]#
```


`pvdisplay` コマンドで確認します。

```
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda2
  VG Name               centos
  PV Size               <59.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              15103
  Free PE               1
  Allocated PE          15102
  PV UUID               CB3IX6-yrff-GJBK-qqBP-fqcM-lGkX-duzc3x

  "/dev/vdb1" is a new physical volume of "<140.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb1
  VG Name
  PV Size               <140.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               dNqs9f-jx0L-rfc5-WZbx-2JoK-llTy-JGT8nP

[root@localhost ~]#
```

１４０Ｇの物理ボリュームが作成できていることが確認できました。
物理ボリューム `/dev/vdb1` にボリュームグループを作成します。

```
[root@localhost ~]# vgcreate lvguserdata /dev/vdb1
  Volume group "lvguserdata" successfully created
[root@localhost ~]#
```

`vgdisplay` コマンドで確認します。

```
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               lvguserdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <140.00 GiB
  PE Size               4.00 MiB
  Total PE              35839
  Alloc PE / Size       0 / 0
  Free  PE / Size       35839 / <140.00 GiB
  VG UUID               nJK3rO-YOm4-1YMD-PuMW-8K2e-9Ofy-fkxGcV

  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <59.00 GiB
  PE Size               4.00 MiB
  Total PE              15103
  Alloc PE / Size       15102 / 58.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               tFVUKa-9h5u-h2uO-cbqS-jLD3-T6n6-g8s4lt

[root@localhost ~]#
```

１４０Ｇのボリュームグループが作成できていることが確認できました。
今回は `/dev/vdb1` 単体パーティションでボリュームグループを作成しているので、１４０Ｇの領域となります。

`vgscan` コマンドを実行してLVMキャッシュファイルを更新しておきます。

```
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "lvguserdata" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2
[root@localhost ~]#
```

最後にボリュームグループ `lvguserdata` に論理ボリュームを作成します。
`/home` にしか割り当てませんので、すべての領域を指定して `home` 論理ボリュームを作成します。

```
[root@localhost ~]# lvcreate --name home -l 100%FREE lvguserdata
  Logical volume "home" created.
[root@localhost ~]#
```

`lvdisplay` コマンドで確認します。

```
[root@localhost ~]# lvdisplay lvguserdata
  --- Logical volume ---
  LV Path                /dev/lvguserdata/home
  LV Name                home
  VG Name                lvguserdata
  LV UUID                4Svjix-p0Ta-wg4u-QeI1-r0av-mozR-ebFKgr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-09-09 09:01:56 +0900
  LV Status              available
  # open                 0
  LV Size                <140.00 GiB
  Current LE             35839
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

[root@localhost ~]#
```

論理ボリュームができました。

もし、論理ボリュームを複数に分けたい場合はサイズを指定する必要があります。
以下のようにすればサイズを指定して論理ボリュームが作成できます。

```
[root@localhost ~]# lvcreate --name <論理ボリューム名> --size <サイズ> <ボリュームグループ名>

(例) 論理ボリューム /dev/lvguserdata/home を 30GB で作成します。
[root@localhost ~]# lvcreate --name home --size 30GB lvguserdata

```

仕上げに作成した論理ボリュームにXFSファイルシステムを作成します。

```
[root@localhost ~]# mkfs.xfs /dev/lvguserdata/home
meta-data=/dev/lvguserdata/home  isize=512    agcount=4, agsize=9174784 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=36699136, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=17919, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]#
```

これで `/home` へマウントするための論理ボリュームの作成は完了しました。

##2. １４０Ｇを `/home` へマウント付け替え
論理ボリュームを作成しましたが、`/home` へマウントする前に実際にマウントできるかテストします。
`mount` コマンドでマウントし、`df` コマンドでマウントできているか確認できます。

```
[root@localhost ~]# mount -t xfs /dev/lvguserdata/home /mnt
[root@localhost ~]# df
ファイルシス                 1K-ブロック    使用    使用可 使用% マウント位置
devtmpfs                          929004       0    929004    0% /dev
tmpfs                             940912       0    940912    0% /dev/shm
tmpfs                             940912    8648    932264    1% /run
tmpfs                             940912       0    940912    0% /sys/fs/cgroup
/dev/mapper/centos-root         40137576 1253344  38884232    4% /
/dev/vda1                        1038336  153056    885280   15% /boot
/dev/mapper/centos-home         19593216   32992  19560224    1% /home
tmpfs                             188184       0    188184    0% /run/user/0
/dev/mapper/lvguserdata-home   146724868   32992 146691876    1% /mnt
[root@localhost ~]#
```

最後のエントリに `/dev/mapper/lvguserdata-home` が `/mnt` にマウントできていることがわかります。
マウントテストはこれで終了です。マウントは一旦解除します。

```
[root@localhost ~]# umount /mnt
```

これから `/home` に `/dev/lvguserdata/home` をマウントしますが、すでに `/dev/centos/home` がマウントされています。
まずは `/dev/centos/home` のマウントを解除する必要があります。
今回はOSインストールに引き続き、この作業を行っているので `/home` にはなにも存在していないはずです。
念の為に確認してからマウント解除します。

```
[root@localhost ~]# cd /home
[root@localhost home]# ls -la
合計 0
drwxr-xr-x.  2 root root   6  4月 11  2018 .
dr-xr-xr-x. 17 root root 244  8月 30 02:23 ..
[root@localhost home]#
```

なにもなかったので、マウントを解除します。

```
[root@localhost home]# cd
[root@localhost ~]# umount /home
[root@localhost ~]# df
ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
devtmpfs                     929004       0   929004    0% /dev
tmpfs                        940912       0   940912    0% /dev/shm
tmpfs                        940912    8648   932264    1% /run
tmpfs                        940912       0   940912    0% /sys/fs/cgroup
/dev/mapper/centos-root    40137576 1253324 38884252    4% /
/dev/vda1                   1038336  153056   885280   15% /boot
tmpfs                        188184       0   188184    0% /run/user/0
[root@localhost ~]#
```

`/home` をマウント解除しますので、`/home` に居座っていてはビジーで怒られて解除できません。
なので、`cd` コマンドで rootユーザーのホームである `/root` に移動してからマウント解除します。
`df` コマンドでマウント解除されていることを確認します。

引き続き、`/dev/lvguserdata/home` を `/home` にマウントしますが、再起動時にマウント解除状態に戻らないように、`/etc/fstab` を編集しておきます。

```
[root@localhost ~]# vi /etc/fstab
```

下記のとおり、元々の定義である `/dev/mapper/centos-home` をコメントアウトし、`/dev/mapper/lvguserdata-home` を追加しました。
ちなみに、`/dev/mapper/lvguserdata-home` はデバイスマッパーでのデバイスパスであり、`/dev/lvguserdata/home` とイコールです。

```sh:（変更前）/etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Aug 29 23:19:21 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=a138d722-b2e0-4373-9c9e-b7c232bdab5c /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
```

```sh:（変更後）/etc/fstab

#
# /etc/fstab
# Created by anaconda on Sat Aug 29 23:19:21 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=a138d722-b2e0-4373-9c9e-b7c232bdab5c /boot                   xfs     defaults        0 0
#/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/lvguserdata-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
```

再起動時に想定どおりマウントされるかを確認するため、`reboot` します。

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

再起動したらrootでログインし、`df` コマンドで確認します。

```
[root@localhost ~]# df
ファイルシス                 1K-ブロック    使用    使用可 使用% マウント位置
devtmpfs                          929004       0    929004    0% /dev
tmpfs                             940912       0    940912    0% /dev/shm
tmpfs                             940912    8668    932244    1% /run
tmpfs                             940912       0    940912    0% /sys/fs/cgroup
/dev/mapper/centos-root         40137576 1273336  38864240    4% /
/dev/vda1                        1038336  153056    885280   15% /boot
/dev/mapper/lvguserdata-home   146724868   32992 146691876    1% /home
tmpfs                             188184       0    188184    0% /run/user/0
[root@localhost ~]#
```

再起動してもちゃんとマウントされていることが確認できました。


##3. 論理ボリューム `/dev/centos/home` を削除
元々 `/home` にマウントしていた論理ボリューム `/dev/centos/home` は不要なので削除します。

```
[root@localhost ~]# lvremove /dev/centos/home
Do you really want to remove active logical volume centos/home? [y/n]: y
  Logical volume "home" successfully removed
[root@localhost ~]#
```

`lvdisplay` コマンドで削除されたことを確認します。

```
[root@localhost ~]# lvdisplay centos
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                JKZJkH-1MVr-u80X-FpYO-kmUp-1Nk1-Rb96qu
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-08-29 23:19:18 +0900
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                6oBeb9-etCU-2WwT-G5wh-D39C-JKU1-pqK1SM
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-08-29 23:19:19 +0900
  LV Status              available
  # open                 1
  LV Size                <38.30 GiB
  Current LE             9804
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

[root@localhost ~]#
```

削除されたことが確認できたので、解放された領域を `/dev/centos/root` に割り当てることにします。

`lvextend` コマンドで論理ボリュームの拡張を行います。

```
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
  Size of logical volume centos/root changed from <38.30 GiB (9804 extents) to <57.00 GiB (14591 extents).
  Logical volume centos/root successfully resized.
[root@localhost ~]#
```

論理ボリュームの拡張が成功したので、ファイルシステムを拡張します。
ファイルシステムを拡張しないと、使用可能なサイズは拡張されたことにはなりません。

```
[root@localhost ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=2509824 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=10039296, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=4902, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 10039296 to 14941184
[root@localhost ~]#
```

ファイルシステムの拡張も完了しました。
`df` コマンドで確認します。

```
[root@localhost ~]# df
ファイルシス                 1K-ブロック    使用    使用可 使用% マウント位置
devtmpfs                          929004       0    929004    0% /dev
tmpfs                             940912       0    940912    0% /dev/shm
tmpfs                             940912    8652    932260    1% /run
tmpfs                             940912       0    940912    0% /sys/fs/cgroup
/dev/mapper/centos-root         59745128 1253572  58491556    3% /
/dev/vda1                        1038336  153056    885280   15% /boot
/dev/mapper/lvguserdata-home   146724868   32992 146691876    1% /home
tmpfs                             188184       0    188184    0% /run/user/0
[root@localhost ~]#
```

`/dev/mapper/centos-root` が拡張されて以前より利用可能なサイズが増えています。
これで今回の作業は完了です。

##さいごに
今回は新しく論理ボリュームを作成し、`/home` にマウントする作業を実施しました。論理ボリュームは現在の状態を損なわずにサイズの拡張や縮小ができることが非常に便利ですね。
さて、次はネットワーク設定を行い、外部ネットワークからSSH接続ができる状態にしたいと思います。