【AWS】EBSボリュームを拡張する方法

スポンサーリンク

EBS ボリュームを拡張する方法を何パターンかまとめました。比較的最近ですが、条件付きでインスタンスを起動した状態で変更することもできるようになってます。

EC2を無停止でEBSボリュームの変更をする

インスタンスのルートデバイスにアタッチされているボリュームの容量を変更します。「EC2コンソール -> ボリューム -> アクション -> Modify Volume」を選択してください。

f:id:tasukujp:20170503182621p:plain

サイズを 8GiB から 16GiB に変更します。ボリュームタイプの変更も可能です。

f:id:tasukujp:20170503183001p:plain

最後の確認と、変更が有効になるまで時間がかかること、新しく割り当てられた領域を使用するにはボリューム上のファイルシステムを拡張する必要がある、という注意書きが表示されます。

f:id:tasukujp:20170503183011p:plain

Yes を押すとリクエストが完了してボリュームの変更が開始されます。この時点で失敗する場合は、「前世代のEC2で無停止の変更ができない場合」や「スナップショットからEBSを拡張して差し替えるパターン」を参照してください。

状態がcompleted (100%)になったら完了です。in-useなのはアタッチされているためでavailableの場合はアタッチされていない状態です。

f:id:tasukujp:20170503185436p:plain

インスタンスにログインして確認してみるとボリュームサイズは増えていますが、ファイルシステムは拡張されていません。ボリュームのサイズが変更された場合、増加されたストレージ容量を利用するために、ボリュームのファイルシステムの拡張が必要です。

今回の例ではパーティション拡張の必要がある/dev/xvdaは 8GiB から 16GiB に変更し、ファイルシステムの拡張だけでいい/dev/xvdfは 8GiB から 12GiB に変更しています。/dev/xvda1はパーティションなので増やした分のボリュームは反映されていません。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  12G  0 disk /data

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.1M   97M   4% /run
/dev/xvda1      7.7G  1.1G  6.7G  14% /
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
/dev/xvdf       7.8G   18M  7.4G   1% /data

ルートボリューム/dev/xvda1のパーティション拡張は手順がやや複雑です。Linux パーティションを拡張する を参考にしてください。または、「前世代のEC2で無停止の変更ができない場合」や「スナップショットからEBSを拡張して差し替えるパターン」の方が楽かもしれません。

/dev/xvdfのファイルシステムを拡張するために、file -sコマンドを使用してファイルシステムを確認します。

$ sudo file -s /dev/xvd*
/dev/xvda:  DOS/MBR boot sector
/dev/xvda1: Linux rev 1.0 ext4 filesystem data, UUID=4573eb39-57f3-439b-9a73-8aef508afd3f, volume name "cloudimg-rootfs" (needs journal recovery) (extents) (large files) (huge files)
/dev/xvdf:  Linux rev 1.0 ext4 filesystem data, UUID=f1b548ca-1cd1-4943-8bda-75fefa60e636 (needs journal recovery) (extents) (large files) (huge files)

Linux ext4なのでresize2fsコマンドを使用してファイルシステムを拡張します。ファイルシステムによって使用するコマンドは違います。ちなみに拡張する前にはボリュームのスナップショットを作成しておきましょう。

$ sudo resize2fs /dev/xvdf
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/xvdf is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/xvdf is now 3145728 (4k) blocks long.

/dev/xvdfが拡張されて 12GiB に変更されました。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.1M   97M   4% /run
/dev/xvda1      7.7G  1.1G  6.7G  14% /
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
/dev/xvdf        12G   20M   12G   1% /data

Linux の EBS ボリュームのサイズ、IOPS、またはタイプの変更 - Amazon Elastic Compute Cloud

無停止オペレーションは前世代のボリュームだったり2016 年 11 月 1 日より前に現世代のインスタンスにアタッチされたボリュームには適用できなかったりします。

EBS ボリュームの変更に関する考慮事項 - Amazon Elastic Compute Cloud

前世代のEC2で無停止の変更ができない場合

インスタンスを停止します。

f:id:tasukujp:20170503205400p:plain

「EC2コンソール -> ボリューム -> アクション -> Modify Volume」を選択してボリュームサイズを変更します。

f:id:tasukujp:20170503205408p:plain

インスタンスを起動します。

f:id:tasukujp:20170503210717p:plain

インスタンスにログインして確認すると、ルートボリュームのパーティションとファイルシステムが拡張されていました。ファイルシステムが拡張されてない場合は拡張してください。何回か試したところルートボリュームの場合、拡張は必要なさそうです。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  64G  0 disk
└─xvda1 202:1    0  64G  0 part /
xvdf    202:80   0  12G  0 disk /data

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.1M   97M   4% /run
/dev/xvda1       62G  1.1G   61G   2% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/xvdf        12G   20M   12G   1% /data
tmpfs           100M     0  100M   0% /run/user/1000

ルートボリューム以外のボリュームサイズを変更した場合はファイルシステムの変更が必要でした。

$ sudo resize2fs /dev/xvdf
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/xvdf is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/xvdf is now 4194304 (4k) blocks long.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.1M   97M   4% /run
/dev/xvda1       62G  1.1G   61G   2% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/xvdf        16G   22M   15G   1% /data
tmpfs           100M     0  100M   0% /run/user/1000

EBS ボリュームを変更するためのインスタンスの起動と停止 - Amazon Elastic Compute Cloud

スナップショットからEBSを拡張して差し替えるパターン

EBS のアクションに Modify Volume が無かった時はスナップショットから拡張した EBS を作成して古い EBS をデタッチ、新しい EBS をアタッチしていました。

インスタンスを停止します。今回ルートデバイスの拡張を行なうので名前を控えておきましょう。

f:id:tasukujp:20170503202001p:plain

ルートデバイスのスナップショットを作成します。

f:id:tasukujp:20170503202120p:plain

スナップショットから新しいEBSボリュームを作成します。

f:id:tasukujp:20170503203357p:plain

古いボリュームをインスタンスからデタッチして

f:id:tasukujp:20170503203405p:plain

新しいボリュームをインスタンスにアタッチします。あらかじめインスタンスのルートデバイスの名前を控えておきましょうというのはこのためです。

f:id:tasukujp:20170503203413p:plain

EBSボリュームを差し替えたらインスタンスを起動してログインしてみましょう。ルートボリュームのパーティションとファイルシステムが拡張されています。ファイルシステムが拡張されてない場合は拡張してください。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  32G  0 disk
└─xvda1 202:1    0  32G  0 part /
xvdf    202:80   0  12G  0 disk /data

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.1M   97M   4% /run
/dev/xvda1       31G  1.1G   30G   4% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/xvdf        12G   20M   12G   1% /data
tmpfs           100M     0  100M   0% /run/user/1000