EBS ボリュームを拡張する方法を何パターンかまとめました。比較的最近ですが、条件付きでインスタンスを起動した状態で変更することもできるようになってます。
EC2を無停止でEBSボリュームの変更をする
インスタンスのルートデバイスにアタッチされているボリュームの容量を変更します。「EC2コンソール -> ボリューム -> アクション -> Modify Volume」を選択してください。
サイズを 8GiB から 16GiB に変更します。ボリュームタイプの変更も可能です。
最後の確認と、変更が有効になるまで時間がかかること、新しく割り当てられた領域を使用するにはボリューム上のファイルシステムを拡張する必要がある、という注意書きが表示されます。
Yes を押すとリクエストが完了してボリュームの変更が開始されます。この時点で失敗する場合は、「前世代のEC2で無停止の変更ができない場合」や「スナップショットからEBSを拡張して差し替えるパターン」を参照してください。
状態がcompleted (100%)
になったら完了です。in-use
なのはアタッチされているためでavailable
の場合はアタッチされていない状態です。
インスタンスにログインして確認してみるとボリュームサイズは増えていますが、ファイルシステムは拡張されていません。ボリュームのサイズが変更された場合、増加されたストレージ容量を利用するために、ボリュームのファイルシステムの拡張が必要です。
今回の例ではパーティション拡張の必要がある/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で無停止の変更ができない場合
インスタンスを停止します。
「EC2コンソール -> ボリューム -> アクション -> Modify Volume」を選択してボリュームサイズを変更します。
インスタンスを起動します。
インスタンスにログインして確認すると、ルートボリュームのパーティションとファイルシステムが拡張されていました。ファイルシステムが拡張されてない場合は拡張してください。何回か試したところルートボリュームの場合、拡張は必要なさそうです。
$ 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 をアタッチしていました。
インスタンスを停止します。今回ルートデバイスの拡張を行なうので名前を控えておきましょう。
ルートデバイスのスナップショットを作成します。
スナップショットから新しいEBSボリュームを作成します。
古いボリュームをインスタンスからデタッチして
新しいボリュームをインスタンスにアタッチします。あらかじめインスタンスのルートデバイスの名前を控えておきましょうというのはこのためです。
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