EC2にディスクを追加する(Linux編)

# 環境

- AmazonLinux2 (ami-06098fd00463352b6)
- t2.micro
- OSディスク 8GB
- 追加ディスク 10GBを追加する

# EBSを作成

まず、EC2 → ボリューム → ボリュームの作成より、追加ディスクを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/3430cfd8-4ce0-5c57-1fc9-b154efab7cfa.png)

作成したボリュームを対象のEC2にアタッチします。状態がin-useに変わることを確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/2aaa35a8-5af4-d86f-1425-1383715c13db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/0f5b1e61-92f5-094a-bba0-208feeb42f3a.png)

# ボリュームのフォーマットとマウント

次に、EC2にSSH接続して、アタッチしたボリュームを使えるようにしていきます。
以下の公式ドキュメントをベースに進めていきます。

[Linux で Amazon EBS ボリュームを使用できるようにする](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html)

`lsblk`コマンドでデバイス名を確認すると、xvdfに10GBにディスクが追加されていることがわかります。

```
# デバイス名確認
lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  10G  0 disk 
```

念のため、ファイルシステムが作成されていないことを`file -s`コマンドで確認します。
出力に data だけが表示されている場合は、デバイスにはファイルシステムが存在していないことになります。

```
#  ファイルシステム有無を確認
sudo file -s /dev/xvdf
/dev/xvdf: data
```

`lsblk -f`コマンドで確認すると、xvdfとだけ表示されていて、FSTYPEやUUIDが何も表示されていないことがわかります。

```
# インスタンスにアタッチされているすべてのデバイスに関する情報を確認
sudo lsblk -f
NAME    FSTYPE LABEL UUID                                 MOUNTPOINT
xvda
└─xvda1 xfs    /     74fc4c15-c86f-4c31-92f6-0df873546b85 /
xvdf
```

`mkfs`コマンドでルートデバイスと同じxfsのファイルシステムを作成します。
作成できたら`lsblk -f`コマンドで確認してみましょう。
FSTYPE、UUIDが表示されていることがわかります。

```
# ファイルシステムを作成
sudo mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1        
         =                       crc=1        finobt=1, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25   
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2       
         =                       sectsz=512   sunit=0 blks, lazy-count=1   
realtime =none                   extsz=4096   blocks=0, rtextents=0
```
```
# ファイルシステム作成を確認
sudo lsblk -f
NAME    FSTYPE LABEL UUID                                 MOUNTPOINT
xvda
└─xvda1 xfs    /     74fc4c15-c86f-4c31-92f6-0df873546b85 /
xvdf    xfs          c6d0f507-452c-471f-9ede-900891b901bb
```

ちなみに、Linuxではファイルシステム作成前に`fdisk`でパーティションを作成しないといけないと思っていたのですが、1つのディスクの領域を`/dev/xvdf1` `/dev/xvdf2`といった風に分けないのであれば不要みたいです。

OS上でディスクのフォーマットができたので、次は任意のディレクトリを作成してマウントします。
ここでは、`/data`というディレクトリを作成して`mount`コマンドでマウントしてみます。
`lsblk`コマンドや`df`コマンドで確認して、マウントポイントが表示されていればOKです。

```
# ディレクトリを作成
sudo mkdir /data

# マウント
sudo mount /dev/xvdf /data

# 確認
lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  10G  0 disk /data
```

# 自動マウント設定

単にマウントしただけでは再起動するとマウント解除されてしまうので、自動マウントされるよう`/etc/fstab`に追記しておきます。まず、`blkid`コマンドで追加ディスクのUUIDを確認します。前述の`lsblk -f`コマンドでも確認することができます。

```
# アタッチしたデバイス名のUUIDを確認(lsblk -fでも可)
sudo blkid
/dev/xvda1: LABEL="/" UUID="74fc4c15-c86f-4c31-92f6-0df873546b85" TYPE="xfs" PARTLABEL="Linux" PARTUUID="ed868158-eb4b-43a5-8ed5-8b58aa998193"
/dev/xvdf: UUID="c6d0f507-452c-471f-9ede-900891b901bb" TYPE="xfs"
```

`/etc/fstab`ファイルはディスクの構成ファイルのひとつで重要なファイルなので、編集する前には`cp`コマンドで事前にバックアップを取得しておきましょう。

```
# 事前バックアップ
sudo cp /etc/fstab /etc/fstab.org
```

`vi`で開いて、確認した`/dev/xvdf`のUUIDを追記します。

```
# 自動マウントのための設定をfstabに追記
sudo vi /etc/fstab

UUID=c6d0f507-452c-471f-9ede-900891b901bb  /data  xfs  defaults,nofail  0  2
```

1つ目の項目にUUIDを指定します。
UUIDの代わりに`/dev/xvdf/`を指定してもマウントできますが、公式ドキュメントにあるようにUUIDでの指定が推奨されています。

>/etc/fstab でシステムの現在のデバイス名 (/dev/xvdf など) は使用できますが、代わりにデバイスの 128 ビット汎用一意識別子 (UUID) を使用することをお勧めします。デバイス名は変更される可能性がありますが、UUID はパーティションの存続期間を通じて持続します。UUID を使用することで、ハードウェアの再構成後にシステムが起動できなくなる可能性を減らすことができます。

`/etc/fstab`のその他の項目の意味については以下のQiita記事などが参考になります。
このあたりはAWS関係なく、Linux共通の仕組みですね。
[fstabについて](https://qiita.com/kihoair/items/03635447591358210772)

最後に自動マウントの動作確認を行います。
前の手順ですでにマウントしてあるので、`umount`コマンドでマウント解除します。
`mount -a`コマンドを実行すると、`/etc/fstab`の構成情報を元にマウントがされます。

```
# アンマウントしてから自動マウントの動作確認
sudo umount /data
sudo mount -a
```
```
# 確認
df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  460K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.5G  6.6G  19% /
tmpfs            99M     0   99M   0% /run/user/1000
/dev/xvdf        10G   43M   10G   1% /data
tmpfs            99M     0   99M   0% /run/user/0
```

最後に念のため、EC2を再起動しても自動マウントされていることを確認するのが良いです。

# 参考リンク

[Linux で Amazon EBS ボリュームを使用できるようにする](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html)

[Amazon Linux 2 で追加ボリューム(EBS)をマウントする手順]
(https://dev.classmethod.jp/articles/amazon-linux-2-ebs-mount/)