AWS EC2 にボリュームを追加する・ボリュームを変更する

# 背景

ファイルコピーなどで `No space left on device` というメッセージが表示された場合、インスタンスにアタッチされている EBS ボリュームが使用容量いっぱいなので追加する必要があります。

```
$ cp file1 file2
cp: cannot create regular file ‘file2’: No space left on device
```

ファイルシステムの使用状況を確認してみます。ルートファイルシステムの使用率が 100 % になっています。

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        462M     0  462M   0% /dev
tmpfs           471M     0  471M   0% /dev/shm
tmpfs           471M   13M  458M   3% /run
tmpfs           471M     0  471M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  8.0G   16K 100% /
tmpfs            95M     0   95M   0% /run/user/1000
```

# 書いたこと

ファイルシステムを追加する手順について書きました。ただし容量がいっぱいだったので、ファイルシステムのマウントポイントを作成できませんでした。ですので、既存のボリュームの容量を拡張する手順についても書きました。

# 追加ボリュームの作成

「ボリュームの作成」をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/dfb061f7-5627-caf0-23c9-5ed751c46828.png)

以下でボリュームタイプ、サイズ、AZ などを選択します。<strong>ボリュームを追加するインスタンスと同じ AZ </strong>でボリュームを作成する必要があります。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/70b4b2b2-c669-e366-9d6d-373e75d12bc7.png)

「ボリュームの作成」をクリックします。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/3c21040d-b8e0-3da4-9689-ac270c5dbae5.png)


作成後、ボリュームをアタッチします。ボリュームの状態が「使用可能」になっていることを確認した後、「アクション」→ 「ボリュームのアタッチ」の順にクリックします。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/1dd92e02-6be8-fcd5-4d65-cfeb64e1e819.png)

追加するインスタンスの ID を選択します。デバイス名はデフォルトのまま進めます。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ee6f813a-a9f5-a036-84fd-576a75b5e4d2.png)

# マウント（失敗）

ボリュームを作成し、アタッチした段階ではまだファイルシステムとして使用できないので、マウント手順を記載します。

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        462M     0  462M   0% /dev
tmpfs           471M     0  471M   0% /dev/shm
tmpfs           471M   13M  458M   3% /run
tmpfs           471M     0  471M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  8.0G   16K 100% /
tmpfs            95M     0   95M   0% /run/user/1000
```

アタッチ後、利用できるブロックデバイスに先ほど作成したボリュームが追加されます。`MOUNTPOINT` 列にパスがなく、まだマウントされていません。

```
$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0    8G  0 disk
├─nvme0n1p1   259:1    0    8G  0 part /
└─nvme0n1p128 259:2    0    1M  0 part
nvme1n1       259:3    0  100G  0 disk
```

file -s コマンドを使用して、ファイルシステムタイプなど、特定のデバイスに関する情報を取得します。次の出力例のように、単にデータが出力される場合は、デバイス上にファイルシステムはありません。

```
$ sudo file -s /dev/nvme1n1
/dev/nvme1n1: data
```

ファイルシステムを作成します。

```
$ sudo mkfs -t xfs /dev/nvme1n1
```

マウントポイントを作成します。

```
$ sudo mkdir /data
```

ここで以下のエラーが発生しました。

```
$ sudo mkdir /data
mkdir: cannot create directory ‘/data’: No space left on device
```

追加のファイルシステムは用意できたのですが、それをマウントするためのマウントポイントを作成するための容量がありませんでした。

# ボリュームの容量を変更する

ここではボリュームの変更について書きます。「アクション」→ 「ボリュームの変更」をクリックします。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8b5f0fff-6c68-85b5-4e5e-af1fd4c7d462.png)

8GiB から 10GiB に変更します。（増加の変更のみ可能です）

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/9376f57f-6d70-be11-a91c-ca92ea91a834.png)

この後、使用可能になるまで待ちます。

使用可能になった後、`lsblk` コマンドで容量が増加されたことを確認します。

```
$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   10G  0 disk
├─nvme0n1p1   259:1    0   10G  0 part /
└─nvme0n1p128 259:2    0    1M  0 part
nvme1n1       259:3    0  100G  0 disk
```

このときファイルシステムの容量はまだ拡張されていません。

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        462M     0  462M   0% /dev
tmpfs           471M     0  471M   0% /dev/shm
tmpfs           471M   13M  458M   3% /run
tmpfs           471M     0  471M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  8.0G   16K 100% /
tmpfs            95M     0   95M   0% /run/user/1000
tmpfs            95M     0   95M   0% /run/user/0
tmpfs            10M     0   10M   0% /tmp
```

ファイルシステムの容量を拡張します。

```
$ sudo xfs_growfs -d /
```

拡張されたか確認します。

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        462M     0  462M   0% /dev
tmpfs           471M     0  471M   0% /dev/shm
tmpfs           471M  596K  470M   1% /run
tmpfs           471M     0  471M   0% /sys/fs/cgroup
/dev/nvme0n1p1   10G  8.1G  2.0G  81% /
tmpfs            95M     0   95M   0% /run/user/1000
tmpfs            95M     0   95M   0% /run/user/0
tmpfs            10M     0   10M   0% /tmp
```

# マウント（成功）

マウントポイントを作成し、マウントします。容量が拡張できたので、マウントポイントを作成することができ、マウントができました。

```
$ sudo mkdir /data
$ sudo mount /dev/nvme1n1 /data
```

ファイルシステムが追加されたか確認します。

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        462M     0  462M   0% /dev
tmpfs           471M     0  471M   0% /dev/shm
tmpfs           471M  628K  470M   1% /run
tmpfs           471M     0  471M   0% /sys/fs/cgroup
/dev/nvme0n1p1   10G  8.1G  2.0G  81% /
tmpfs            95M     0   95M   0% /run/user/1000
tmpfs            95M     0   95M   0% /run/user/0
tmpfs            10M     0   10M   0% /tmp
/dev/nvme1n1    100G  135M  100G   1% /data
```

```
$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   10G  0 disk
├─nvme0n1p1   259:1    0   10G  0 part /
└─nvme0n1p128 259:2    0    1M  0 part
nvme1n1       259:3    0  100G  0 disk /data
```

# 参考記事

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ebs-volume-size-increase/

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/requesting-ebs-volume-modifications.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html