現象
CapistranoでRailsアプリケーションをAWSのEC2インスタンスにデプロイする際に、以下のようなエラーが出てデプロイに失敗しました。
Tasks: TOP => deploy:check => git:check => git:wrapper
(See full trace by running task with --trace)
The deploy has failed with an error: scp: /tmp/production.sh: No space left on device
インスタンスにログインすると、以下のように同様のエラーメッセージが表示されました。
/home/user/.rbenv/libexec/rbenv-init: 行 131: ヒアドキュメント用一時ファイルを作成できません: デバイスに空き領域がありません
問題と対応
ディスク容量を確認します。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 488M 56K 488M 1% /dev
tmpfs 498M 0 498M 0% /dev/shm
/dev/xvda1 7.8G 7.7G 0 100% /
ディスク容量がいっぱいだったのが原因だったみたいです。
そこで不要なlogファイル等を消してみたのですが、改善されず。。
結局、インスタンスを再起動することで解決出来ました。
以下のようになりました。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 488M 56K 488M 1% /dev
tmpfs 498M 0 498M 0% /dev/shm
/dev/xvda1 7.8G 3.0G 4.8G 38% /
得られた知見メモ
解決の一般論
No space left on device – running out of Inodes
対応手順としてまとめてあって、調べた中で特に有用な記事だと思いました。
2010年の古めの記事ですが、thanksコメントは最近されたものも多くよさげ。
今回は、容量がいっぱいだったことが原因でしたが、そうでなくても同じエラーメッセージが出ることがあるみたいです。
今回の解決法について
EC2 instance on Amazon and I am greeted with “No space left on the disk”
容量いっぱいなら余計なファイル消せばいいと思って消しても改善されなくて、調べるとインスタンスを再起動したら良くなるという記事をちらほら見つけて、やってみたら解決しました。
分からないこと
なぜ、今回のような現象が起きたのか。単純にディスク容量がいっぱいになってエラーが出たのなら、大きなログファイルを消した段階でエラーが解決するはずだが、、
もし分かる方がいればご教示下さい。