Linux

No space left on device とエラーが出るときの対処法

More than 1 year has passed since last update.

問題

CentOSでファイル操作をしようとすると、「No space left on device」と言われるようになった。
こうなると、もう何もできない。(Gitコマンド叩け無い、ファイル作れない等)

原因を探る

エラーメッセージをそのまま読むと「このデバイス、もうスペースが無いよ」である。
HDDを使い切ってしまったのかとdfコマンドを叩いてみるが、まだ3.4Gも残っている。

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vda1              50G   44G  3.4G  93% /

色々調べているうちに、容量ではなくてinodeが足りない説が浮上した。

inodeとは、UNIX系OSで使用されるファイルシステムの名称で、ファイルの所有者やアクセス権、サイズ、作成日時、場所などを管理しているもののことだそうだ。

残りinodeはdfコマンドに-iをつければ確認できるらしく、叩いてみると...ビンゴである。

$ df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/vda1            3276800 3276799       1  100% /

解決法

上記の原因から、減らすのは容量ではなくファイル数であることがわかった。
以下のコマンドを実行すると、カレントディレクトリに存在するファイル数を再帰的に計算してくれる。(ルートディレクトリで叩くと鬼ヤバになるので注意したい)

$ sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

これを使って、たくさんのファイル数を消費しているディレクトリを探し当てましょう。
その中で、消しても問題なさそうなディレクトリを一括で削除すると宜しいと思います。