EC2インスタンスのEBSボリュームサイズを拡張する

## アジェンダ
1 はじめに
2 環境説明及び前提条件
3 事前確認
4 EBSボリュームサイズ拡張
5 パーティション拡張
6 ファイルシステム拡張
7 まとめ

## 1 はじめに
こんにちは、NTTデータ先端技術の陰です。
今回は、Amazon Web Services（AWS）のElastic Compute Cloud（EC2）インスタンスにアタッチされているElastic Block Store（EBS）ボリュームのサイズを拡張する方法について紹介します。

## 2 環境情報及び前提条件
今回、作業を実施する環境情報及び前提条件は以下の通りです。

##### 環境情報
OSイメージ：Amazon Linux 2 Kernel 5.10 AMI 2.0.20220912.1 x86_64 HVM gp2
リージョン：ap-northeast-1（アジアパシフィック (東京)）

##### 前提条件
①シェル・ターミナル・コンソールがセットアップされていること
②AWSマネジメントコンソールにアクセスでき、作業に必要な権限が付与されたIdentity and Access Management（IAM）ユーザを持っていること
③EC2インスタンスが作成されていること
④拡張対象のEBSボリュームがEC2インスタンスにアタッチされていること

## 3 事前確認
EBSボリュームサイズを拡張する前にEBSボリュームの状態を確認します。

##### AWSマネジメントコンソールから確認
AWSマネジメントコンソール上部の検索窓から「EC2」を検索し選択します。その後、左ペインの「ELASTIC BLOCK STORE > ボリューム」をクリックし、移動した「ボリューム」ページから今回拡張対象のEBSボリュームがインスタンスにアタッチされていること、拡張前のサイズが1GiBであることを確認します。（拡張前のボリュームサイズは各環境ごとに異なりますので、自環境のボリュームサイズをご確認ください）
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/5d835449-bb6c-4f2e-90ad-919dede21d53.png)
##### ターミナル・コンソールから確認
OSサーバ上でも拡張対象のEBSボリュームがインスタンスにアタッチされていること、拡張前のサイズが1GiBであることを確認します。（拡張前のボリュームサイズは各環境ごとに異なりますので、自環境のボリュームサイズをご確認ください）
```
$ lsblk -o +SERIAL
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT SERIAL
xvda    202:0    0    8G  0 disk
└xvda1 202:1    0    8G  0 part /
xvdf    202:80   0    1G  0 disk  ##拡張対象のデバイス
└xvdf1 202:81   0 1023M  0 part /ebs_data  ##拡張対象のパーティション
```
```
$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  472K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  20% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
tmpfs          tmpfs      97M     0   97M   0% /run/user/0
/dev/xvdf1     xfs      1020M   34M  987M   4% /ebs_data  ##拡張対象のファイルシステム
```
## 4 EBSボリュームサイズ拡張
「ELASTIC BLOCK STORE > ボリューム」をクリックし、「ボリューム」ページに移動します。その後、拡張対象のEBSボリュームを選択し、「アクション」プルダウンから「ボリュームの変更」をクリックします。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/2abb4f46-2472-eed0-d4bb-116f98cfe3eb.png)
「ボリュームの変更」ページから拡張したいボリュームサイズ（2GiB）をサイズ欄に入力し、「変更」をクリックしてボリュームサイズを変更します。（ここでは拡張したいボリュームサイズを2GiBにしておりますが、各自適切なボリュームサイズを設定してください）
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/d21ce11a-7cc6-cc83-c510-1ac1dcb22689.png)
「ボリューム」ページから拡張対象のボリュームを選択し、ボリュームのサイズが変更されていること、ボリューム状態が「使用中」であることを確認します。
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/aa05c631-8bf1-1bbb-8441-ae5debb6644c.png)
AWSマネジメントコンソール上でEBSボリュームサイズを拡張した後、OSサーバ上でも変更内容が反映されているか確認します。
```
$ lsblk -o +SERIAL
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT SERIAL
xvda    202:0    0    8G  0 disk
└xvda1 202:1    0    8G  0 part /
xvdf    202:80   0    2G  0 disk  ##拡張対象のデバイス
└xvdf1 202:81   0 1023M  0 part /ebs_data  ##拡張対象のパーティション
```
```
$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  472K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  20% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
tmpfs          tmpfs      97M     0   97M   0% /run/user/0
/dev/xvdf1     xfs      1020M   34M  987M   4% /ebs_data  ##拡張対象のファイルシステム
```
AWSマネジメントコンソール上でEBSボリュームサイズを拡張してもOSサーバ上のパーティション（xvdf1）や、ファイルシステム（/dev/xvdf1）のサイズは拡張されてないことがわかります。
拡張したストレージ容量をOSサーバ上でも利用するためには、固有のコマンドを実行し、サイズを拡張する必要があります。今回作業を実施している環境はOSイメージがAmazon Linuxのため、Linuxコマンドを実行し、サイズを拡張します。
※環境情報の詳細は[2 環境情報及び前提条件](#2-環境情報及び前提条件)を参考にしてください

## 5 パーティション拡張
ボリュームのパーティションを拡張するために対象のパーティション名（xvdf1）を指定し、growpartコマンドを実行します。
```
$ growpart /dev/xvdf 1
CHANGED: partition=1 start=2048 old: size=2095104 end=2097152 new: size=4192223 end=4194271
```
ボリュームのパーティションサイズがAWSマネジメントコンソール上で拡張したボリュームサイズ（2GiB）に拡張されていることを確認します。
```
$ lsblk -o +SERIAL
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT SERIAL
xvda    202:0    0   8G  0 disk            
└xvda1 202:1    0   8G  0 part /          
xvdf    202:80   0   2G  0 disk  ##拡張対象のデバイス          
└xvdf1 202:81   0   2G  0 part /ebs_data  ##拡張対象のパーティション 
```
## 6 ファイルシステム拡張
ファイルシステムを拡張するために対象のファイルシステム名（/dev/xvdf1）を指定し、xfs_growfsコマンドを実行します。

ファイルシステムのタイプによって拡張コマンドが異なりますので、拡張前にファイルシステムのタイプをご確認ください。
今回拡張対象のファイルシステムのタイプはxfsのため、xfs_growfsコマンドで実行します。
| タイプ | コマンド |
|---|---|
| xfs | xfs_growfs |
| ext2・ext3・ext4 | resize2fs |
```
$ xfs_growfs -d /dev/xvdf1
meta-data=/dev/xvdf1             isize=512    agcount=4, agsize=65472 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=261888, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 261888 to 524027
```
ファイルシステムのサイズがAWSマネジメントコンソール上で拡張したサイズ（2GiB）に拡張されていることを確認します。
```
$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  476K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  20% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
tmpfs          tmpfs      97M     0   97M   0% /run/user/0
/dev/xvdf1     xfs       2.0G   35M  2.0G   2% /ebs_data  ##拡張対象のファイルシステム
```
これでEBSボリュームサイズの拡張が完了し、OSサーバ上で使用できるようになります。
## 7 まとめ
今回は、EC2インスタンスにアタッチされているEBSボリュームサイズを拡張する方法について紹介しました。

AWSマネジメントコンソール上でEBSボリュームサイズを拡張した場合、追加のストレージ容量を利用するためにはOSサーバ上でボリュームのパーティションとファイルシステムのサイズも一緒に拡張する必要があることに注意してください。