No space left on device エラーの解決方法 ~ inode 枯渇編

ディスク空き容量あるにも関わらず Linux サーバーで No space left on device エラーが発生したときに解決した方法をご紹介します。inode が枯渇していたのが原因でした。

Linux | リナックス

[前提] ディスク空き容量はあって inode が枯渇していた

ディスク使用率は 76% で空き容量は 3.7G と No space left on device エラーが発生するほどではない。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2        16G   12G  3.7G  76% /
tmpfs           499M     0  499M   0% /dev/shm

原因がわからなくてググってみたら、

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

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

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

という記事を見つけました。

早速やってみたら、ビンゴ。inode 枯渇問題でした。

$ df -i
Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/vda2      1048576 1048576      0  100% /
tmpfs           127541       1 127540    1% /dev/shm

inode を多く消費しているディレクトリの特定

以下のスクリプトで inode を多く消費しているディレクトリを特定できました。

echo "==== `pwd` ====" ; for i in `ls -1`;do echo -n "## $i ### " ; echo "(`find ./$i -type f |wc -l`)" ;done | sort -r

ルートディレクトリからひたすら上記のスクリプトを実行しては、下の階層のディレクトリへ cd で移動してを繰り返して、問題のディレクトリを特定していきます。

wp-file-cache が inode 枯渇の原因

ぼくが No space left on device エラーに遭遇したときの原因は、WordPress プラグイン wp-file-cache のキャッシュファイルが 88万件ちかく存在していたせいでした。

以下の記事の通り wp-file-cache プラグインには消えてもらいました。

👏 inode 枯渇問題を無事解決 👏

ファイル削除を終えて df -i で IUse% を確認すると 100% から 15% に下がっていました。無事に inode が枯渇問題を解決でき、No space left on device エラーも発生しなくなりました。

$ df -i
Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/vda2      1048576 153319 895257   15% /
tmpfs           127541      1 127540    1% /dev/shm

以上、No space left on device エラーから inode 枯渇を特定して、無事に解決に至った現場からお送りしました。