この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは佐伯です。
直近でルートボリュームのEBSをオンライン拡張することがあり、OSごとにまとめてみたのと少しだけハマった箇所の紹介です。
EBSボリューム変更時の制限
以下の制限事項があるのでご注意ください。
- エラーメッセージが表示された場合や旧世代のEC2インスタンスタイプでは、EBSのデタッチまたはEC2インスタンスの停止が必要になるケースがある
- 旧世代のマグネティックボリュームタイプの変更はサポートされていない
- EBSのボリュームサイズを小さくすることはできない
- EBSのボリュームサイズやタイプを変更すると、6時間以内は再変更ができない
AWSドキュメント: EBS ボリューム変更時の制限 - Amazon Elastic Compute Cloud
作業の大まかな流れ
基本的には以下の流れになります。今回はルートボリュームのサイズを変更しています。なお、本番環境でEBSを拡張する場合は、スナップショットを取得しましょう。
EBSボリュームサイズの変更
EC2インスタンスにアタッチされているEBSのボリュームサイズを変更します。手順は共通して以下の通りです。
サイズを変更し、状態が "Optimizing" になればパーティションやファイルシステムの拡張が可能です。
パーティションの拡張
EBSのボリュームサイズを変更しただけではパーティションの拡張は行われませんので、パーティションの拡張が必要になります。Linux OSではgrowpartコマンドを使用します。
ファイルシステムの拡張
パーティション拡張後、ファイルシステムを拡張します。Linux OSではext2、ext3、およびext4ファイルシステムの場合、resize2fsコマンドを使用します。XFSファイルシステムの場合、xfs_growfsコマンドを使用します。
やってみた
AWSドキュメントに記載の通りで目新しさはありませんが、各OSでやってみました。
Amazon Linux
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 484M 56K 484M 1% /dev
tmpfs 494M 0 494M 0% /dev/shm
/dev/xvda1 7.8G 1.1G 6.7G 14% /
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
パーティションの拡張
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 8G 0 part /
$ sudo growpart /dev/xvda 1
CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=16773086,end=16777182 new: size=20967390,end=20971486
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 10G 0 part /
ファイルシステムの拡張
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 484M 56K 484M 1% /dev
tmpfs 494M 0 494M 0% /dev/shm
/dev/xvda1 7.8G 1.1G 6.7G 14% /
$ sudo resize2fs /dev/xvda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/xvda1 is now 2620923 (4k) blocks long.
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 484M 56K 484M 1% /dev
tmpfs 494M 0 494M 0% /dev/shm
/dev/xvda1 9.8G 1.1G 8.6G 11% /
Amazon Linux 2
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 479M 0 479M 0% /dev
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 494M 13M 482M 3% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.1G 7.0G 13% /
tmpfs 99M 0 99M 0% /run/user/1000
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
パーティションの拡張
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 8G 0 part /
$ sudo growpart /dev/xvda 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=20967391,end=20971487
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 10G 0 part /
ファイルシステムの拡張
Amazon Linux2はXFSなのでファイルシステムの拡張には、xfs_growfsコマンドを使用します。
$ sudo xfs_growfs /dev/xvda1
meta-data=/dev/xvda1 isize=512 agcount=4, agsize=524159 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2096635, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2096635 to 2620923
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 479M 0 479M 0% /dev
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 494M 13M 482M 3% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/xvda1 10G 1.1G 9.0G 11% /
tmpfs 99M 0 99M 0% /run/user/1000
SUSE Linux Enterprise Server 12 SP3
> df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 458M 8.0K 458M 1% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 11M 486M 3% /run
/dev/xvda1 9.8G 1.3G 8.0G 14% /
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 10G 0 part /
パーティションの拡張
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 10G 0 part /
> sudo growpart /dev/xvda 1
CHANGED: partition=1 start=2048 old: size=20969472 end=20971520 new: size=41940959,end=41943007
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 20G 0 part /
ファイルシステムの拡張
> df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 458M 8.0K 458M 1% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 11M 486M 3% /run
/dev/xvda1 9.8G 1.3G 8.0G 15% /
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
> sudo resize2fs /dev/xvda1
resize2fs 1.42.11 (09-Jul-2014)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/xvda1 is now 5242619 blocks long.
> df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 458M 8.0K 458M 1% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 11M 486M 3% /run
/dev/xvda1 20G 1.3G 18G 7% /
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
Red Hat Enterprise Linux 7.5
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda2 10G 925M 9.1G 10% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 13M 483M 3% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
├─xvda1 202:1 0 1M 0 part
└─xvda2 202:2 0 10G 0 part /
パーティションの拡張
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
├─xvda1 202:1 0 1M 0 part
└─xvda2 202:2 0 10G 0 part /
$ sudo growpart /dev/xvda 2
CHANGED: disk=/dev/xvda partition=2: start=4096 old: size=20967390,end=20971486 new: size=41938910,end=41943006
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
├─xvda1 202:1 0 1M 0 part
└─xvda2 202:2 0 20G 0 part /
ファイルシステムの拡張
Amazon Linux2同様にXFSなのでファイルシステムの拡張には、xfs_growfsコマンドを使用します。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda2 10G 925M 9.1G 10% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 13M 483M 3% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
$ sudo xfs_growfs /dev/xvda2
meta-data=/dev/xvda2 isize=512 agcount=7, agsize=393216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2620923, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2620923 to 5242363
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda2 20G 925M 20G 5% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 13M 483M 3% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
Ubuntu Server 16.04
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 488M 0 488M 0% /dev
tmpfs 100M 3.0M 97M 3% /run
/dev/xvda1 7.7G 849M 6.9G 11% /
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
パーティションの拡張
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 8G 0 part /
$ sudo growpart /dev/xvda 1
CHANGED: partition=1 start=2048 old: size=16775135 end=16777183 new: size=20969439,end=20971487
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 10G 0 part /
ファイルシステムの拡張
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 488M 0 488M 0% /dev
tmpfs 100M 3.0M 97M 3% /run
/dev/xvda1 7.7G 849M 6.9G 11% /
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
$ sudo resize2fs /dev/xvda1
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/xvda1 is now 2621179 (4k) blocks long.
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 488M 0 488M 0% /dev
tmpfs 100M 3.0M 97M 3% /run
/dev/xvda1 9.7G 849M 8.8G 9% /
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 496M 0 496M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1000
Microsoft Windows Server 2012 R2
EBSのボリュームサイズ変更後、[ディスクの管理]->[操作]->[ディスクの再スキャン]をクリックすると未割り当て領域が確認できます。
Cドライブを右クリックし、[ボリュームの拡張]をクリックします。あとはボリュームの拡張ウィザードに従って、ボリュームを拡張するだけです。
Microsoft Windows Server 2016
Windows Server 2012 R2と手順は同じです。EBSのボリュームサイズ変更後、[ディスクの管理]->[操作]->[ディスクの再スキャン]
[ボリュームの拡張]からボリュームの拡張ウィザードに従って拡張を行います。
ちょっとだけハマったところ
M5インスタンスにアタッチされているEBSのオンライン拡張を行った際のちょっとしたハマりポイントです。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 3.8G 44K 3.8G 1% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
/dev/nvme0n1p1 7.8G 1.1G 6.7G 14% /
$ 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
これまで通り末尾のパーティション番号分ければ良いんでしょ?と、growpartコマンドを実行しましたが、エラーとなりパーティションの拡張ができませんでした。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 10G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
$ sudo growpart /dev/nvme0n1p 1
FAILED: /dev/nvme0n1p: does not exist
正解は以下のとおりでした。(pがいらない)
$ sudo growpart /dev/nvme0n1 1
CHANGED: disk=/dev/nvme0n1 partition=1: start=4096 old: size=16773086,end=16777182 new: size=20967390,end=20971486
以降はその他のLinux OS同様にファイルシステムに合わせてresize2fs or xfs_growfsコマンドでファイルシステムを拡張しました。 と、OS関係なくインスタンスタイプによるハマりポイントポイントでした。なお、M5/C5のEBSに関して以下AWSドキュメントに記載がありました。
AWSドキュメント: Amazon EBS と NVMe - Amazon Elastic Compute Cloud