EBSボリュームのディスク100％を拡張する流れ


EBSのボリュームサイズの変更は以下で簡単に行えます。
EC2の停止は必要ありません。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/requesting-ebs-volume-modifications.html

:::note info
コンソールを使用して、EBS ボリュームを変更するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
[Volumes] を選択し、変更するボリュームを選択したら、[Actions]、[Modify Volume] の順に選択します。
[Modify Volume] ウィンドウに、ボリューム ID とボリュームの現在の設定 (タイプ、サイズ、IOPS、スループットなど) が表示されます。新しい設定値を以下のように設定します。
タイプを変更するには、[Volume Type] の値を選択します。
サイズを変更するには、[Size] に新しい値を入力します。
ボリュームタイプが gp3、io1 または io2 の場合、IOPS を変更するには、IOPS に新しい値を入力します。
ボリュームタイプが gp3 の場合、スループットを変更するには、[Throughput] に新しい値を入力します。
ボリューム設定を変更したら、[変更] を選択します。確認を求めるメッセージが表示されたら、[Yes] を選択します。
ボリュームサイズを変更しても、ボリュームのファイルシステムを拡張して新しいストレージ容量を利用するまでは、実際の効果はありません。詳細については、「ボリュームサイズ変更後の Linux ファイルシステムの拡張」を参照してください。
:::

EBSのボリュームサイズを変更しただけでは、実際い使用しているファイルシステムの容量は増えません。
パーティションの拡張と増加したサイズを割り当てる必要があります。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html


:::note info
例: NVMe EBS ボリュームのファイルシステムを拡張する
この例では、Nitro System で構築されたインスタンス (M5 インスタンスなど) があるとします。ブートボリュームのサイズを 8 GB から 16 GB に変更し、追加ボリュームのサイズを 8 GB から 30 GB に変更しました。サイズを変更したボリュームのファイルシステムを拡張するには、以下の手順を使用します。

NVMe EBS ボリュームのファイルシステムを拡張するには

インスタンスに接続します。

各ボリュームのファイルシステムを確認するには、df -hT コマンドを使用します。

[ec2-user ~]$ df -hT
以下に示しているのは、XFS ファイルシステムのブートボリュームと XFS ファイルシステムの追加ボリュームがあるインスタンスの出力例です。命名規則 /dev/nvme[0-26]n1 は、ボリュームが NVMe ブロックデバイスとして公開されることを示しています。

[ec2-user ~]$ df -hT
Filesystem      Type  Size  Used Avail Use% Mounted on
/dev/nvme0n1p1  xfs   8.0G  1.6G  6.5G  20% /
/dev/nvme1n1    xfs   8.0G   33M  8.0G   1% /data
...
ボリュームに拡張が必要なパーティションがあるかどうかを確認するには、lsblk コマンドを使用して、インスタンスにアタッチされている NVMe ブロックデバイスに関する情報を表示します。

[ec2-user ~]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       259:0    0  30G  0 disk /data
nvme0n1       259:1    0  16G  0 disk
└─nvme0n1p1   259:2    0   8G  0 part /
└─nvme0n1p128 259:3    0   1M  0 part
この出力例は以下のことを示しています。

ルートボリュームである /dev/nvme0n1 には、パーティション /dev/nvme0n1p1 があります。ルートボリュームのサイズに新しいサイズ (16 GB) が反映されている場合、パーティションのサイズには元のサイズ (8 GB) が反映されるため、ファイルシステムを拡張する前に拡張する必要があります。

ボリューム /dev/nvme1n1 にはパーティションはありません。ボリュームのサイズには、新しいサイズ (30 GB) が反映されます。

前の手順で示したルートボリュームなど、パーティションを持つボリュームの場合は、growpart コマンドを使用してパーティションを拡張します。デバイス名とパーティション番号の間にスペースがある点に注意してください。

[ec2-user ~]$ sudo growpart /dev/nvme0n1 1
(オプション) 増加したボリュームサイズがパーティションに反映されていることを確認するには、再度 lsblk コマンドを使用します。

[ec2-user ~]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       259:0    0  30G  0 disk /data
nvme0n1       259:1    0  16G  0 disk
└─nvme0n1p1   259:2    0  16G  0 part /
└─nvme0n1p128 259:3    0   1M  0 part
各ボリュームのファイルシステムのサイズを確認するには、df -h コマンドを使用します。この出力例では、両方のファイルシステムに元のボリュームサイズである 8 GB が反映されています。

[ec2-user ~]$ df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/nvme0n1p1   8.0G  1.6G  6.5G  20% /
/dev/nvme1n1     8.0G   33M  8.0G   1% /data
...
各ボリュームでファイルシステムを拡張するには、次のように、お使いのファイルシステムに適したコマンドを使用します。

[XFS file system (XFS ファイルシステム)] 各ボリュームのファイルシステムを拡張するには、xfs_growfs コマンドを使用します。この例では、/ と /data は、df -h の出力で示されているボリュームのマウントポイントです。

[ec2-user ~]$ sudo xfs_growfs -d /
[ec2-user ~]$ sudo xfs_growfs -d /data
XFS ツールがまだインストールされていない場合は、以下のようにインストールできます。

[ec2-user ~]$ sudo yum install xfsprogs
[ext4 file system (ext4 ファイルシステム)] 各ボリュームのファイルシステムを拡張するには、resize2fs コマンドを使用します。

[ec2-user ~]$ sudo resize2fs /dev/nvme0n1p1
[ec2-user ~]$ sudo resize2fs /dev/nvme1n1
[Other file system (その他のファイルシステム)] 各ボリュームでファイルシステムを拡張するには、お使いのファイルシステムのマニュアルを参照してください。

(オプション) 増加したボリュームサイズが各ファイルシステムに反映されていることを確認するには、再度 df -h コマンドを使用します。

[ec2-user ~]$ df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/nvme0n1p1    16G  1.6G   15G  10% /
/dev/nvme1n1      30G   33M   30G   1% /data
...
:::

EBSのファイル使用量が100％のときは拡張が行えません。
一時的にメモリに存在する一時ファイルシステムであるtmpfsをマウントして対応します。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ebs-volume-size-increase/

:::note info
1.    SSH を使用して Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスに接続します。

2.    df -h コマンドを使用して、「/」にマウントされたルートパーティションがいっぱいである (100% である) ことを確認します。以下の例では、/dev/nvme0n1p1 のスペースの 100% が使用中です。
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        460M     0  475M   0% /dev
tmpfs           478M     0  492M   0% /dev/shm
tmpfs           478M  432K  492M   1% /run
tmpfs           478M     0  492M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  8.0G  664K 100% /
tmpfs            96M     0   99M   0% /run/user/1000
3.    以下のコマンドを実行して、アタッチされたブロックデバイスとルート「/」マウントポイントに関する詳細情報を集めます。

$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   9G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part
$ lsblk -f
NAME          FSTYPE LABEL           UUID                                 MOUNTPOINT
nvme0n1
├─nvme0n1p1   xfs    /               afcf1342-1d40-41bd-bde9-e4ea5d87e3b6 /
└─nvme0n1p128
前述の例における出力では、ルート EBS ボリュームには合計 9 GiB のスペースがありますが、ルートパーティションであるパーティション 1 (/dev/nvme0n1p1) には 8 GiB しかありません。ファイルシステムのタイプは XFS です。

4.    「No space left on a block device (ブロックデバイスに空きスペースがありません)」エラーを回避するには、一時ファイルシステムである tmpfs を /tmp マウントポイントにマウントします。これにより、10 M の tmpfs が /tmp にマウントされます。

$ sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
5.    growpart コマンドを実行して、ルートパーティション (パーティション 1) のサイズを拡大します。/dev/nvme0n1 をルートパーティションに置き換えます。

$ sudo growpart /dev/nvme0n1 1 
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
lsblk コマンドを実行して、パーティション 1 が 9 GiB に拡張されていることを確認します。

$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   9G  0 disk
├─nvme0n1p1   259:1    0   9G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part
6.    ファイルシステムを展開します。ステップ 3 を参照して、ルートパーティション「/」のファイルシステムを確認します。

以下の例では、XFS タイプのファイルシステムが展開されています。

$ sudo xfs_growfs -d /
data blocks changed from 2096635 to 2358779
         =                       sectsz=512   sunit=0 blks, lazy-count=1
log      =internal               bsize=4096   blocks=2560, version=2
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
         =                       sunit=0      swidth=0 blks
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       crc=1        finobt=1 spinodes=0
         =                       sectsz=512   attr=2, projid32bit=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
meta-data=/dev/nvme0n1p1         isize=512    agcount=4, agsize=524159 blks
以下の例では、パーティション 1 の EXT2/EXT3/EXT4 ファイルシステムが展開されています。

$ sudo resize2fs /dev/nvme0n1p1
7.    ファイルシステムを展開したら、df -h コマンドを使用して、追加したスペースが OS 上で表示されることを確認します。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        960M     0  960M   0% /dev
tmpfs           978M     0  978M   0% /dev/shm
tmpfs           978M  392K  978M   1% /run
tmpfs           978M     0  978M   0% /sys/fs/cgroup
/dev/nvme0n1p1  9.0G  8.0G 1022M  89% /
tmpfs           196M     0  196M   0% /run/user/1000
tmpfs            10M     0   10M   0% /tmp
8.    unmount コマンドを実行して、tmpfs ファイルシステムをアンマウントします。

$ sudo umount /tmp
:::