ディスクサイズ不足?サーバーのディスク容量を食ってる原因を見つける方法

インフラ

先日、AWS上に乗ったRailsのアプリケーションがうまく動いておらずログを見てみると、No space left on deviceというエラーメッセージが吐き出されていました。

ディスクサイズ不足が原因で、空きスペースが足りないためにコンパイル作業ができなかった模様でした。

結局、無駄に容量を食っているファイルを削除して問題を解決したのですが、どこのフォルダ・ファイルが容量を食ってるんだ?と調べる機会は多いと思います。

今回はディスク不足になった時や大きなサイズのファイルを探す時にどのようにすればいいのかについて説明をしたいと思います。

大まかに以下のような手順となります。

ディスクサイズ不足の解決方法
  1. dfコマンドでディスクの使用状況の確認
  2. duコマンドでディレクトリのサイズを確認

では詳しく説明していきます。

dfコマンドでディスクの使用状況の確認

まずはディスク全体の使用状態を確認します。(結果は適当です)

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       16G   16G    0G 100% /
devtmpfs        993M   56K  993M   1% /dev
tmpfs          1001M     0 1001M   0% /dev/shm

-hオプションで読みやすい表示になっています。

サンプルの結果ををみると、100%となっているので、ディスク容量がパンパンだということがわかります。

duコマンドでディレクトリのサイズを確認

dfコマンドでディスクの使用状況がわかったので、使用量が多いディレクトリを特定していきます。

そのためにはduコマンドを利用します。例えば上位5件を昇順で表示したい場合は以下のようになります。(結果は適当です。)

du -h | sort -rh | head -5

 10G    .
6.5G    ./hoge
4.5G    ./hoge/log
1.1G    ./moge
1.2G    ./fuga

sort -rで昇順にし、sort -hで読みやすい形に表示し、head -5で上位5件を表示しています。

全ての結果を見たいのであればheadの代わりにmoreを利用するといいです。

なお、AWSの場合はファイル削除した後にインスタンスのリスタートをする必要があるかもしれないです。