##はじめに
勉強用にCloud9を使っているときに容量不足を解決した手順の備忘録として。
Cloud9が動いているインスタンスのストレージを拡張します。
EC2を自分で構築しない/Linuxをあまり触らない人向け。筆者も同じくらいなので理論の部分はあやふやです。
##注意事項
AWSの無料枠(1年間)を過ぎると、ボリュームの使用量に合わせて課金されるので、拡張の際はご注意ください。
記事を書いてる2021年1月時点で、だいたい1GBにつき0.08~0.1USD/月くらいっぽいです。
https://aws.amazon.com/jp/ebs/pricing/
##手順
- 心当たりがある人は、いらないファイルを消す
- EC2のボリューム(EBS)を拡張する
- 拡張したボリュームをファイルシステムに適用する
##1.心当たりがある人は、いらないファイルを消す
Dockerとかの容量食うものを使っている人は、ですね。
Railsチュートリアルとかの勉強にCloud9を使ってる人は特に消せるものもないかと思います。
##2.EC2のボリュームを拡張する
Cloud9のEC2にくっついているボリュームを拡張します。
EC2・ボリュームとはなんぞや?という方は、かみ砕いていえば、
・EC2:仮想サーバ。Cloud9(開発環境)もここの中で動いてます。
・ボリューム(EBS):サーバの保存領域・仮想ディスク。
です。
手順はこちらが詳しく、そっくりそのまま実行で大丈夫です。
AWS Cloud9 で利用している EBS ボリューム領域を拡張する
ボリューム拡張・EC2の再起動まで終わったら次へ。
##3.拡張したボリュームをファイルシステムに適用する
公式ガイドの通りです。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html
が、ちょっと技術文書的な書き方なので簡単に補足します。これ以降すべてターミナル上での操作です。
####①ディスク空き容量をsudo df -hT
コマンドで確認する
こんな感じの結果が出てくると思います。
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 98M 11M 88M 11% /run
/dev/xxxx1 ext4 9.7G 9.7G 0 100% /
以下略
Mounted on列が/
、つまりルートディレクトリに割り当てられているファイルシステムのディスク使用率Use%
が100%ないしカツカツであれば、2.で拡張したボリュームが割り当たっていない可能性があります。
この時点でボリュームが割り当たってるケースもあるんですかね? その場合はここで作業完了です。
####②ボリュームに拡張が必要なパーティションがあるかをlsblk
コマンドで確認する
ざっくりですが、パーティション=ボリュームをさらに、(論理ないし物理的ななにがしかで)区切ったもの とのことです。
ディスクを増やしても、ディスクに割り当てたパーティションが増えなければ、インスタンスとして使える空き容量が増えないので、状況を確認します。
ボリュームを10GB→20GBに増やした場合、こんな感じの結果が出てくると思います。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 55.4M 1 loop /snap/core18/1932
loop1 7:1 0 32.3M 1 loop /snap/amazon-ssm-agent/2996
loop2 7:2 0 55.4M 1 loop /snap/core18/1944
loop3 7:3 0 97.9M 1 loop /snap/core/10577
loop4 7:4 0 97.9M 1 loop /snap/core/10583
loop5 7:5 0 12.7M 1 loop /snap/amazon-ssm-agent/495
xxxx 202:0 0 20G 0 disk
└─xxxx1 202:1 0 10G 0 part /
ルートディレクトリ/
に割り当たっているパーティションxxxx1
の容量が10GBしかありません。
一方でディスク本体であるxxxx
には、2でボリュームに割り当てた通りの20GBの容量があるので、ディスク容量増がパーティションに反映できていない状況です。
####③容量をsudo growpart /dev/xxxx 1
コマンドでパーティションに割り当てる
xxxx にはファイルシステム上のディスクの名前を割り当てます。
①のFilesystem
列の名称から、末尾1
(パーティションの番号)を省いたものがディスク名称です。
コマンド引数3つめの1
はパーティション番号を示しています。
####④上記のgrowpart
コマンドでFAILED: failed to make temp dir
エラーが出たら…
ディスクを本当に100%のカツカツまで使い切ると発生するみたいです。
この場合の手順はこちら。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ebs-volume-size-increase/
tmpfs(メモリに格納されている一時ファイルシステム)を/tmpにマウントします。
sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
コマンドの詳細はちょっとわからず、すみません…
(/と異なるディスクが割り当たっている/tmpにtmpfsを移すことで、一時的にメモリ上のtmpfsを使えるようにするってことだろうか。)
ともあれこれで、size
オプションで指定した10Mの空き容量ができるので、growpart
コマンドを再実行してください。
####⑤パーティションの容量をファイルシステムに反映する
③が終わったら、再びdh -hT
コマンドを実行します。
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 98M 11M 88M 11% /run
/dev/xxxx1 ext4 9.7G 9.7G 0 100% /
以下略
まだ/dev/xxxx1が20GBになっていません。
③でディスク側の準備はパーティション含め完了したものの、OS(Linux)側でそれを認識できてない状態みたいです。
なので次に、ディスク側へ増やした容量をファイルシステムへ反映させます。
ここはファイルシステムのタイプによってコマンドが異なります。
Type列がext4の場合、
sudo resize2fs /dev/xxxx1
xfsの場合、(※筆者はこっちは実行してません。ドキュメントによればこうみたいです)
sudo xfs_growfs -d /
これで容量拡張完了です。確認のためにdh -hT
コマンドを実行します。
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 98M 2.0M 96M 2% /run
/dev/xxxx1 ext4 20G 9.7G 9.7G 50% /
```
無事ルートディレクトリ`/`の容量が20GBになり、使用率も改善しました。
####⑥後始末
④でtmpfsのマウントを実行した場合は元に戻しておきます。
```
sudo umount /tmp
```