EC2インスタンスのストレージのボリュームサイズを変更する


社内でRedashのAMIを運用していたのですが、急に動かなくなってしまい、ボリュームサイズの変更が必要になりました。

/ is using 99.8% of 7.69GB

げげ〜。

ボリュームサイズの変更

ボリュームサイズの変更の手順は以下です。

  • EBSボリュームのサイズを変更する
  • EC2内のパーティションを物理のボリュームのサイズに合わせて再設定する

EBSボリュームのサイズを変更する

EC2ダッシュボード > Elastic Block Store > ボリュームに移動し、サイズを変更したいEBSボリュームを選択してボリュームの変更をします。

今回は8GBを倍の16GBに変更します。

EC2内のパーティションを物理のボリュームのサイズに合わせて再設定する

パーティションの変更の仕方は以下のドキュメントの「パーティションの拡張 (必要な場合)」に従います。実際これのとおりにやっただけです。

ディスクとパーティショニングをlsblkコマンドで確認します。

root@ip-XXX-XXX-XXX-XXX:~# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   16G  0 disk 
└─nvme0n1p1 259:1    0    8G  0 part /

この状態ではディスクは16Gあるのに、8Gしか割り当てられておらず、8G余っています。

これをgrowportコマンドでパーティションに割り当てます。

root@ip-XXX-XXX-XXX-XXX:~# growpart /dev/nvme0n1 1
CHANGED: partition=1 start=2048 old: size=16775135 end=16777183 new: size=33552351,end=33554399

/dev/nvme0n1がデバイス名で1がパーティション番号です。

これでボリュームサイズの変更を反映することが出来ます。

トラブルシューティング

実際にはgrowpartコマンドを実行した際に

root@ip-XXX-XXX-XXX-XXX:~# growpart /dev/nvme0n1 1
mkdir: cannot create directory ‘/tmp/growpart.1729’: No space left on device
FAILED: failed to make temp dir

というエラーが出ました。あまりにも容量が足りなすぎてコマンドの実行が出来ないようです。
なんとかしてコマンドを実行するのに必要な最低限のスペースを空けないといけないので、/var/log以下のファイルを削除して、なんとかなりました。