megutech

自身の備忘録として主にWEBサーバー周りの技術について投稿しています。

無停止でCentOS7 on EC2のEBSストレージを拡張する

遅ればせながら今回の案件で初めてEC2を触ることに。

そこでまずはステージング環境を作ろうとごにょごにょしてたら、ディスクを8GiBで作成してしましました。

ステージング環境とはいえもう少し欲しかったのでディスクを拡張しようとしたらAWSではなんと無停止で拡張可能とのこと!再起動も不要!マジ最高!ってなったんですが、やり方が分からず詰まったりしたので備忘録か。

AWSコンソールからEBSボリュームを増やす

AWSコンソールからEC2のボリュームサイズを変更する。

変更後ステータスがin-use-optimizingが100%になるのを待ちましょう。

いや、待つ必要があるかは分かんないんですが。この辺誰か情報ください。

私は8 -> 40GiBに変更で1時間ほどかかりました。

f:id:citrus_soda:20191121122039p:plain
AWS Console

f:id:citrus_soda:20191121122102p:plain
AWS Console

f:id:citrus_soda:20191121122116p:plain
AWS Console

web上での操作は以上です。

拡張されたボリュームを適用する

拡張が完了したので早速sshログイン後確認してみよう。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/nvme0n1p1   8.0G  896M  7.2G   11% /

しかし拡張されていない。

おかしい・・・。何かが、あったに・・・違いない・・・。

「そう、誰もパーティショニングを拡張していないのである!」

まずは落ち着いてブロックデバイスを見てみる。

$ lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0  40G  0 disk
└─nvme0n1p1 259:1    0   8G  0 part /

lsblkでブロック確認するとdisk側がpartitionより大きくなって、先ほど指定したサイズに変更されていることが分かる。

というわけでnvme0n1のパーティション、nvme0n1p1をgrowpartで拡張する。

nvme0n1p1をどうやって拡張するんだろうと思ったら、nvme0n1のパーティション1(nvme0n1p1)を拡張するので、/dev/nvme0n1 1と指定するみたい。

$ sudo growpart /dev/nvme0n1 1
CHANGED: partition=1 start=2048 old: size=16775168 end=16777216 new: size=83883999,end=83886047
$ lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0  40G  0 disk
└─nvme0n1p1 259:1    0  40G  0 part /

これでパーティションがディスクのサイズまで拡張された。

ただこの時点ではファイルシステムにまで影響していないので、最後にファイルシステムを拡張する。

$ sudo xfs_growfs /dev/nvme0n1p1

最後にちゃんと拡張されているか確認して完了だ。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/nvme0n1p1    40G  897M   40G    3% /

以上ーー!

参考

ダウンタイムゼロでEC2(CentOS7)のEBSボリュームを拡張する方法