OS別EBSオンライン拡張方法
こんにちは佐伯です。
直近でルートボリュームの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
1 2 3 4 5 6 7 8 9 10 | $ df -hファイルシス サイズ 使用 残り 使用% マウント位置devtmpfs 484M 56K 484M 1% /devtmpfs 494M 0 494M 0% /dev/shm/dev/xvda1 7.8G 1.1G 6.7G 14% /$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 8G 0 disk└─xvda1 202:1 0 8G 0 part / |
パーティションの拡張
1 2 3 4 5 6 7 8 9 10 11 12 | $ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 8G 0 part /$ sudo growpart /dev/xvda 1CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=16773086,end=16777182 new: size=20967390,end=20971486$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 10G 0 part / |
ファイルシステムの拡張
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ df -hファイルシス サイズ 使用 残り 使用% マウント位置devtmpfs 484M 56K 484M 1% /devtmpfs 494M 0 494M 0% /dev/shm/dev/xvda1 7.8G 1.1G 6.7G 14% /$ sudo resize2fs /dev/xvda1resize2fs 1.42.12 (29-Aug-2014)Filesystem at /dev/xvda1 is mounted on /; on-line resizing requiredold_desc_blocks = 1, new_desc_blocks = 1The filesystem on /dev/xvda1 is now 2620923 (4k) blocks long.$ df -hファイルシス サイズ 使用 残り 使用% マウント位置devtmpfs 484M 56K 484M 1% /devtmpfs 494M 0 494M 0% /dev/shm/dev/xvda1 9.8G 1.1G 8.6G 11% / |
Amazon Linux 2
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ df -hファイルシス サイズ 使用 残り 使用% マウント位置devtmpfs 479M 0 479M 0% /devtmpfs 494M 0 494M 0% /dev/shmtmpfs 494M 13M 482M 3% /runtmpfs 494M 0 494M 0% /sys/fs/cgroup/dev/xvda1 8.0G 1.1G 7.0G 13% /tmpfs 99M 0 99M 0% /run/user/1000$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 8G 0 disk└─xvda1 202:1 0 8G 0 part / |
パーティションの拡張
1 2 3 4 5 6 7 8 9 10 11 12 | $ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 8G 0 part /$ sudo growpart /dev/xvda 1CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=20967391,end=20971487$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 10G 0 part / |
ファイルシステムの拡張
Amazon Linux2はXFSなのでファイルシステムの拡張には、xfs_growfsコマンドを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ sudo xfs_growfs /dev/xvda1meta-data=/dev/xvda1 isize=512 agcount=4, agsize=524159 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0data = bsize=4096 blocks=2096635, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 2096635 to 2620923$ df -hファイルシス サイズ 使用 残り 使用% マウント位置devtmpfs 479M 0 479M 0% /devtmpfs 494M 0 494M 0% /dev/shmtmpfs 494M 13M 482M 3% /runtmpfs 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
1 2 3 4 5 6 7 8 9 10 11 12 13 | > df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 458M 8.0K 458M 1% /devtmpfs 496M 0 496M 0% /dev/shmtmpfs 496M 11M 486M 3% /run/dev/xvda1 9.8G 1.3G 8.0G 14% /tmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000> lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 10G 0 part / |
パーティションの拡張
1 2 3 4 5 6 7 8 9 10 11 12 | > lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 20G 0 disk└─xvda1 202:1 0 10G 0 part /> sudo growpart /dev/xvda 1CHANGED: partition=1 start=2048 old: size=20969472 end=20971520 new: size=41940959,end=41943007> lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 20G 0 disk└─xvda1 202:1 0 20G 0 part / |
ファイルシステムの拡張
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | > df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 458M 8.0K 458M 1% /devtmpfs 496M 0 496M 0% /dev/shmtmpfs 496M 11M 486M 3% /run/dev/xvda1 9.8G 1.3G 8.0G 15% /tmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000> sudo resize2fs /dev/xvda1resize2fs 1.42.11 (09-Jul-2014)Filesystem at /dev/xvda1 is mounted on /; on-line resizing requiredold_desc_blocks = 1, new_desc_blocks = 2The filesystem on /dev/xvda1 is now 5242619 blocks long.> df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 458M 8.0K 458M 1% /devtmpfs 496M 0 496M 0% /dev/shmtmpfs 496M 11M 486M 3% /run/dev/xvda1 20G 1.3G 18G 7% /tmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000 |
Red Hat Enterprise Linux 7.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ df -hファイルシス サイズ 使用 残り 使用% マウント位置/dev/xvda2 10G 925M 9.1G 10% /devtmpfs 474M 0 474M 0% /devtmpfs 496M 0 496M 0% /dev/shmtmpfs 496M 13M 483M 3% /runtmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk├─xvda1 202:1 0 1M 0 part└─xvda2 202:2 0 10G 0 part / |
パーティションの拡張
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 20G 0 disk├─xvda1 202:1 0 1M 0 part└─xvda2 202:2 0 10G 0 part /$ sudo growpart /dev/xvda 2CHANGED: disk=/dev/xvda partition=2: start=4096 old: size=20967390,end=20971486 new: size=41938910,end=41943006$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 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コマンドを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $ df -hファイルシス サイズ 使用 残り 使用% マウント位置/dev/xvda2 10G 925M 9.1G 10% /devtmpfs 474M 0 474M 0% /devtmpfs 496M 0 496M 0% /dev/shmtmpfs 496M 13M 483M 3% /runtmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000$ sudo xfs_growfs /dev/xvda2meta-data=/dev/xvda2 isize=512 agcount=7, agsize=393216 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0data = bsize=4096 blocks=2620923, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 2620923 to 5242363$ df -hファイルシス サイズ 使用 残り 使用% マウント位置/dev/xvda2 20G 925M 20G 5% /devtmpfs 474M 0 474M 0% /devtmpfs 496M 0 496M 0% /dev/shmtmpfs 496M 13M 483M 3% /runtmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000 |
Ubuntu Server 16.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ df -hFilesystem Size Used Avail Use% Mounted onudev 488M 0 488M 0% /devtmpfs 100M 3.0M 97M 3% /run/dev/xvda1 7.7G 849M 6.9G 11% /tmpfs 496M 0 496M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 8G 0 disk└─xvda1 202:1 0 8G 0 part / |
パーティションの拡張
1 2 3 4 5 6 7 8 9 10 11 12 | $ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 8G 0 part /$ sudo growpart /dev/xvda 1CHANGED: partition=1 start=2048 old: size=16775135 end=16777183 new: size=20969439,end=20971487$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 10G 0 disk└─xvda1 202:1 0 10G 0 part / |
ファイルシステムの拡張
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $ df -hFilesystem Size Used Avail Use% Mounted onudev 488M 0 488M 0% /devtmpfs 100M 3.0M 97M 3% /run/dev/xvda1 7.7G 849M 6.9G 11% /tmpfs 496M 0 496M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 100M 0 100M 0% /run/user/1000$ sudo resize2fs /dev/xvda1resize2fs 1.42.13 (17-May-2015)Filesystem at /dev/xvda1 is mounted on /; on-line resizing requiredold_desc_blocks = 1, new_desc_blocks = 1The filesystem on /dev/xvda1 is now 2621179 (4k) blocks long.$ df -hFilesystem Size Used Avail Use% Mounted onudev 488M 0 488M 0% /devtmpfs 100M 3.0M 97M 3% /run/dev/xvda1 9.7G 849M 8.8G 9% /tmpfs 496M 0 496M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 496M 0 496M 0% /sys/fs/cgrouptmpfs 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のオンライン拡張を行った際のちょっとしたハマりポイントです。
1 2 3 4 5 6 7 8 9 10 11 | $ df -hファイルシス サイズ 使用 残り 使用% マウント位置devtmpfs 3.8G 44K 3.8G 1% /devtmpfs 3.8G 0 3.8G 0% /dev/shm/dev/nvme0n1p1 7.8G 1.1G 6.7G 14% /$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTnvme0n1 259:0 0 8G 0 disk├─nvme0n1p1 259:1 0 8G 0 part /└─nvme0n1p128 259:2 0 1M 0 part |
これまで通り末尾のパーティション番号分ければ良いんでしょ?と、growpartコマンドを実行しましたが、エラーとなりパーティションの拡張ができませんでした。
1 2 3 4 5 6 7 8 | $ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTnvme0n1 259:0 0 10G 0 disk├─nvme0n1p1 259:1 0 8G 0 part /└─nvme0n1p128 259:2 0 1M 0 part$ sudo growpart /dev/nvme0n1p 1FAILED: /dev/nvme0n1p: does not exist |
正解は以下のとおりでした。(pがいらない)
1 2 | $ sudo growpart /dev/nvme0n1 1CHANGED: 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