EC2のEBSの拡張のやり方

EBSを拡張する前に、以下の事項を考慮してください。
1. 拡張する前に、EBSボリュームのタイプが拡張をサポートしていることを確認してください。現在、gp2、io1、およびst1タイプのEBSボリュームのみが拡張をサポートしています。

2. 拡張する前に、EBSボリューム上で実行中のアプリケーションや活動がないことを確認してください。拡張中に活動があると、データ損失の可能性があります。

3. EBSボリュームがEC2インスタンスに関連付けられている場合は、拡張時にEC2インスタンスの操作を一時停止して、データ損失を防ぐ必要があります。

4. 拡張中に、EBSボリュームのIOPSと帯域幅の制限が一時的に変更される可能性があります。そのため、拡張時にEBSボリュームに対して高い入出力操作（I/O）リクエストを避けるべきです。

5. EBSにスナップショットを作成し、データの安全を確保することをお勧めします。

EBSの拡張が完了した後、ファイルシステムを拡張する必要があります。
- EBSボリュームのファイルシステムがext2、ext3、またはext4の場合は、`resize2fs` コマンドを使用してファイルシステムを拡張できます。
- EBSボリュームのファイルシステムがXFSの場合は、`xfs_growfs` コマンドを使用してファイルシステムを拡張できます。

つまり、拡張には2つのステップがあります。1つ目はEBSの拡張、2つ目はファイルシステムをEBSのサイズに合わせて拡張することです。

### 拡張手順は以下の通りです
1. EC2内で「Instance」をクリックし、拡張したいインスタンスを選択した後、「Storage」タブをクリックし、拡張したいEBSの「Volume ID」をクリックします。
![Screenshot 2023-01-06 175507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322984/305c7db6-5a0e-2738-82b9-a51136d91d77.png)

2. そのEBSを選択し、「Actions」をクリックしてから、「Modify Volume」をクリックします。
![Pasted image 20230106180044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322984/6cee1ec5-3ffb-0ad0-e607-48fac0dda242.png)

3. 「Size」を直接変更し、その後「Modify」をクリックします。
![Pasted image 20230106180417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322984/22f35bcd-b250-f6e3-1c5e-4703ef666718.png)
4. プロンプトが表示されます。AWS内での操作はドライブのサイズを増加させるだけであるため、ファイルシステムを拡張する必要があります。ここでは「Modify」をクリックするだけです。
![Pasted image 20230106180552.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322984/8c6a5736-ac1d-5586-4f3c-061a71ac0367.png)
これで、EBSは既に拡張されています。しかし、EC2インスタンスに入り、`df -T` コマンドを使用すると、容量が変更されていないことがわかり
```
ubuntu@user:~$ df -T
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
/dev/root      ext4      32449468 30325208   2107876  94% /
```

したがって、ファイルシステムの拡張も必要です。
1. 最初に、`lsblk`を使用してハードディスクの情報を確認します。
```
loop0         7:0    0 25.1M  1 loop /snap/amazon-ssm-agent/5656
loop1         7:1    0 24.4M  1 loop /snap/amazon-ssm-agent/6312
loop2         7:2    0 63.3M  1 loop /snap/core20/1778
loop3         7:3    0 91.9M  1 loop /snap/lxd/24061
loop4         7:4    0 63.2M  1 loop /snap/core20/1738
loop5         7:5    0 55.6M  1 loop /snap/core18/2667
loop6         7:6    0 49.6M  1 loop /snap/snapd/17883
loop7         7:7    0 91.8M  1 loop /snap/lxd/23991
loop9         7:9    0 55.6M  1 loop /snap/core18/2654
nvme0n1     259:0    0   50G  0 disk 
└─nvme0n1p1 259:1    0   32G  0 part /
```
2.次のコマンドを使用して、パーティションを volume スペースに拡張します。
```
sudo growpart /dev/nvme0n1 1
```
>growpart - extend a partition in a partition table to fill available space  
>**DISK**  
>The device or disk image to operate on  
>**PARTITION-NUMBER**  
>The number of the partition to resize (counting from 1)

したがって、この手順では、デバイス `/dev/nvme0n1` のパーティション `1` をデバイスの利用可能な全スペースに拡張します。つまり、パーティション `nvme0n1p1` を `/dev/nvme0n1` の全利用可能スペースに拡張することになります。
3. 再び `lsblk` コマンドを使用してハードドライブの情報を確認します。拡張が成功したことが以下の出力で確認できます。
```
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 25.1M  1 loop /snap/amazon-ssm-agent/5656
loop1         7:1    0 24.4M  1 loop /snap/amazon-ssm-agent/6312
loop2         7:2    0 63.3M  1 loop /snap/core20/1778
loop3         7:3    0 91.9M  1 loop /snap/lxd/24061
loop4         7:4    0 63.2M  1 loop /snap/core20/1738
loop5         7:5    0 55.6M  1 loop /snap/core18/2667
loop6         7:6    0 49.6M  1 loop /snap/snapd/17883
loop7         7:7    0 91.8M  1 loop /snap/lxd/23991
loop9         7:9    0 55.6M  1 loop /snap/core18/2654
nvme0n1     259:0    0   50G  0 disk 
└─nvme0n1p1 259:1    0   50G  0 part 
```
4. 次に、ファイルシステムの形式に応じて異なるツールを選択します。`df` コマンドを使用して、以下の出力を得ました。
```
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
/dev/root      ext4      32449468 30325208   2107876  94% /
```
Typeがext4形式であることが分かります。もしext2、ext3、またはext4であれば、e2fsck（このツールがなければインストールする必要があります）を使用して拡張を行います。以下のコマンドを入力します。
`e2fsck -n /dev/root` このコマンドは、`/dev/root` を物理サイズと同じ大きさに拡張することを意味し、以下の結果が出力されます。
```
ubuntu@user:~$ sudo e2fsck -n /dev/root
e2fsck 1.45.5 (07-Jan-2020)
Warning!  /dev/root is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
cloudimg-rootfs: clean, 762039/4096000 files, 6838188/8388347 blocks
ubuntu@user:~$ sudo resize2fs /dev/root
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 7
The filesystem on /dev/root is now 13106939 (4k) blocks long.
```
拡張が成功したことが確認できます。再度 `df` コマンドを実行します。

```
ubuntu@user:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        49G   29G   20G  60% /
```
成功したことが確認できました。
5. もしXFS形式であれば、以下のコマンドを実行してください。
```
 apr-get install xfsprogs  // もしインストールされていなければ、インストールしてください。
 xfs_growfs -d /dev/root
```
>xfs_growfs, xfs_info - expand an XFS filesystem  
>xfs_growfs expands an existing XFS filesystem (see xfs(5)). The mount-point argument is the pathname of the directory where the filesystem is mounted. The filesystem must be mounted to be grown (see mount(8)). The existing contents of the filesystem are undisturbed, and the added space becomes available for additional file storage.  
>-d | -D size  
>Specifies that the data section of the filesystem should be grown. If the -D size option is given, the data section is grown to that size, otherwise the **data section is grown to the largest size possible with the -d option.** The size is expressed in filesystem blocks.

ここでは `-d` のデフォルト値を使用し、最大利用可能容量まで拡張します。