EBSのボリュームサイズの変更は以下で簡単に行えます。
EC2の停止は必要ありません。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/requesting-ebs-volume-modifications.html
コンソールを使用して、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
例: 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/
-
SSH を使用して Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスに接続します。
-
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 -
以下のコマンドを実行して、アタッチされたブロックデバイスとルート「/」マウントポイントに関する詳細情報を集めます。
$ 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 です。
- 「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